监控
本文档以 Oracle MySQL 为例,介绍如何在 KubeBlocks 中配置监控(点击参考完整 PR)。
开始之前
- 了解 K8s 基本概念,例如 Pod、Sidecar 模式等。
- 阅读添加数据库引擎文档。
- 了解基本的监控系统概念,例如 Prometheus、 Grafana 等。
背景知识
监控是 Kubernetes 可观测体系的一个重要部分,可以帮助开发者查看系统运行状态,快速定位问题。
Kubeblocks 目前以数据库引擎 add-on 的形式集成了 Prometheus 和 Grafana 监控组件。本文档介绍如何适配 Prometheus/Grafana 方案。
Prometheus 简介
Prometheus 提供了一个开源监控解决方案,集成了指标收集、指标存储、告警通知等功能。
Prometheus 在云原生、容器化和微服务架构中广泛应用,它可以帮助开发人员和运维团队实时监控应用程序的性能和健康状态,以便更快速地识别和解决问题,确保应用程序的可靠性和可用性。它通常与 Grafana 一起使用,以创建强大的监控和可观察性解决方案。
Grafana 简介
Grafana 是一个开源的分析和监控平台,广泛用于可视化时间序列数据。它允许用户创建交互式和可自定义的仪表盘,以监视、分析和理解来自各种来源的数据。
📎 Table 1. 术语表
| 术语 | 说明 |
|---|---|
| Prometheus Exporter | Prometheus 导出器是一个用于采集监控数据并通过 Prometheus 监控规范对外提供数据的组件。 更详细的 Exporter 列表可参考 Prometheus Exporter List。 |
| Prometheus Metrics | Prometheus 指标通常用于监控和性能分析的数据,例如应用程序的请求计数、响应时间、CPU使用率、内存使用量等。 |
| Grafana Dashboard | Grafana 仪表盘是一个可视化界面,用于呈现和展示数据,通常用于监控和分析各种时间序列数据。 |
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)对应。