跳到主要内容

监控

本文档以 Oracle MySQL 为例,介绍如何在 KubeBlocks 中配置监控(点击参考完整 PR)。

开始之前

  1. 了解 K8s 基本概念,例如 Pod、Sidecar 模式等。
  2. 阅读添加数据库引擎文档。
  3. 了解基本的监控系统概念,例如 Prometheus、 Grafana 等。

背景知识

监控是 Kubernetes 可观测体系的一个重要部分,可以帮助开发者查看系统运行状态,快速定位问题。

Kubeblocks 目前以数据库引擎 add-on 的形式集成了 Prometheus 和 Grafana 监控组件。本文档介绍如何适配 Prometheus/Grafana 方案。

Prometheus 简介

Prometheus 提供了一个开源监控解决方案,集成了指标收集、指标存储、告警通知等功能。

Prometheus 在云原生、容器化和微服务架构中广泛应用,它可以帮助开发人员和运维团队实时监控应用程序的性能和健康状态,以便更快速地识别和解决问题,确保应用程序的可靠性和可用性。它通常与 Grafana 一起使用,以创建强大的监控和可观察性解决方案。

Grafana 简介

Grafana 是一个开源的分析和监控平台,广泛用于可视化时间序列数据。它允许用户创建交互式和可自定义的仪表盘,以监视、分析和理解来自各种来源的数据。

📎 Table 1. 术语表

术语说明
Prometheus ExporterPrometheus 导出器是一个用于采集监控数据并通过 Prometheus 监控规范对外提供数据的组件。
更详细的 Exporter 列表可参考 Prometheus Exporter List
Prometheus MetricsPrometheus 指标通常用于监控和性能分析的数据,例如应用程序的请求计数、响应时间、CPU使用率、内存使用量等。
Grafana DashboardGrafana 仪表盘是一个可视化界面,用于呈现和展示数据,通常用于监控和分析各种时间序列数据。

KubeBlocks 集成的 Prometheus 已经配置了抓取任务,因此用户只需要配置 Exporter 即可。在 KubeBlocks 中,Exporter 以 Sidecar 的形式和数据库引擎的主容器部署在同一个 Pod 中。

配置 Exporter

先选择一个合适的 Exporter。本文档基于 Oracle MySQL,所以需要一个 mysql-exporter。

配置 Exporter 版本

修改 ClusterVersion (clusterversion.yaml)。

可以从开源社区(比如 Prometheus in Docker)找到合适的 Exporter。

componentVersions:
- componentDefRef: mysql-compdef
versionsContext:
containers:
- name: mysql-container
image: ...
imagePullPolicy: ..
- name: mysql-exporter
image: prom/mysqld-exporter:v0.14.0

指定 mysql-exporter 镜像为 prom/mysqld-exporter,版本是 v0.14.0。

添加 Exporter 容器

修改 clusterdefinition.yaml 文件,以 Sidecar 形式配置 mysql-exporter。

podSpec:
containers:
# mysql container 和其他 containers ->
- name: mysql-exporter
ports:
- name: metrics
containerPort: 9104
protocol: TCP
env:
- name: "MYSQL_MONITOR_USER"
valueFrom:
secretKeyRef:
name: $(CONN_CREDENTIAL_SECRET_NAME)
key: username
- name: "MYSQL_MONITOR_PASSWORD"
valueFrom:
secretKeyRef:
name: $(CONN_CREDENTIAL_SECRET_NAME)
key: password
- name: "DATA_SOURCE_NAME"
value: "$(MYSQL_MONITOR_USER):$(MYSQL_MONITOR_PASSWORD)@(localhost:3306)/"

如上所示,这里在原来的 PodSpec 中添加了一个新的容器,其中 DATA_SOURCE_NAME 为 mysql-exporter 的环境变量。

警告

不同的 Exporter 所需的环境变量不同,需要根据具体的 Exporter 特性来配置。

本文档使用的是 mysql exporter 0.14.0,在最新版本 mysql exporter 0.15.0 已经不再支持 DATA_SOURCE_NAME 变量。

配置 monitor 属性

修改 clusterdefinition.yaml 文件,配置 monitor 属性。

componentDefs:
- name: mysql-compdef
characterType: mysql
service: ..
monitor:
exporterConfig:
scrapePort: 9104 # Exporter 监听端口,用于 Prometheus Pull 数据
scrapePath: "/metrics" # Exporter 路径,用于 Prometheus Pull 数据

KuBeBlocks 支持多种监控方案。如果用开源的 Prometheus/Grafana 方案,需要在 monitor 中需要配置 Exporter 的监听端口和 metrics 路径。这里的配置需要和添加 Exporter 容器中配置的容器端口(container-port)对应。

配置 Grafana 仪表盘

获取 Grafana 仪表盘配置

Grafana 仪表盘可以帮助用户实时监控、分析和理解数据的趋势。对主流数据库,用户可以轻松找到多种仪表盘的配置文件(JSON 格式)。

添加到集群配置

在 Grapha 仪表盘页面中直接导入下载的 JSON 文件,或者将其配置到你的集群模板中。

后者更通用一些,所有通过该模板产生的集群都可以复用相同的配置。

为此,需要在原有的 Helm chart 上,新加两个文件:

  • dashboards:保存 dashboard JSON 文件。
  • grafana:创建一个 ConfigMap 保存 dashboard JSON 文件中的内容。
tree oracle-mysql
.
├── Chart.yaml
├── dashboards
│   └── mysql.json
├── templates
│   ├── NOTES.txt
│   ├── _helpers.tpl
│   ├── clusterdefinition.yaml
│   └── clusterversion.yaml
│   └── grafana
│   └── configmap-dashboards.yaml
└── values.yaml

4 directories, 8 files

监控集群数据

准备环境,开启 Prometheus 监控组件

执行 kbcli addon list 命令查看下列监控相关插件是否已启用(状态为 Enabled)。

kbcli addon list
>
...
grafana Helm Enabled true
alertmanager-webhook-adaptor Helm Enabled true
prometheus Helm Enabled alertmanager true
...

如果未启用(状态为 Disabled),则需要逐一启用:

kbcli addon enable prometheus
kbcli addon enable alertmanager-webhook-adaptor
kbcli addon enable grafana

启用后,可以看到集成的三个 Dashboard。

kbcli dashboard list
>
NAME NAMESPACE PORT CREATED-TIME
kubeblocks-grafana kb-system 13000 Jul 24,2023 11:38 UTC+0800
kubeblocks-prometheus-alertmanager kb-system 19093 Jul 24,2023 11:38 UTC+0800
kubeblocks-prometheus-server kb-system 19090 Jul 24,2023 11:38 UTC+0800

创建数据库集群

  1. 安装集群模板。

    helm install oracle-mysql ./path-to-your-helm-chart/oracle-mysql
  2. 开启监控。

    选项 1. 创建集群时开启

    kbcli cluster create mycluster --cluster-definition='oracle-mysql' --monitor='true'

    选项 2. 在已有集群中开启

    kbcli cluster update mycluster --monitor='true'

打开仪表盘

# 查看可用的仪表盘
kbcli dashboard list
>
NAME NAMESPACE PORT CREATED-TIME
kubeblocks-grafana default 3000 Jan 13,2023 10:53 UTC+0800
kubeblocks-prometheus-alertmanager default 9093 Jan 13,2023 10:53 UTC+0800
kubeblocks-prometheus-server default 9090 Jan 13,2023 10:53 UTC+0800

# 选择 Grafana,使用默认浏览器打开网页控制台
kbcli dashboard open kubeblocks-grafana

登录仪表盘

Grafana Homepage

备注

如果提示需要登录,请使用以下用户名和密码。

Username: admin 
Password: kubeblocks

总结

本文档介绍了如何快速适配 Prometheus/Grafana 方案来监控你的数据库集群。KubeBlocks 未来还会推出基于 OpenTelemetry 的监控方案,敬请期待。

参考资料

  1. Prometheus
  2. Grafana 仪表盘
  3. 创建仪表盘

附录

A.1 关闭集群监控

KubeBlocks 支持通过 kbcli 动态启动和关闭某一个集群的监控:

kbcli cluster update mycluster --monitor='false'