Kube-Prometheus监控MySQL(二)
一、概述
本文介绍如何使用 Kube-Prometheus 监控 MySQL 数据库。通过部署 MySQL Exporter,将 MySQL 的性能指标暴露给 Prometheus 进行采集和监控。
核心组件:
- MySQL Exporter:用于暴露 MySQL 指标的 Exporter(镜像版本:v0.14.0)
- ServiceMonitor:Prometheus Operator 的 CRD,用于服务发现和指标采集配置
二、部署 MySQL Exporter
2.1 创建 Deployment
通过 Deployment 部署 MySQL Exporter,需要配置数据库连接信息。
apiVersion: apps/v1
kind: Deployment
metadata:
#设置唯一名称,建议添加数据库实例ip
name: mysql-exporter-172.16.1.77
namespace: monitoring
labels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: mysql-exporter
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.14.0
spec:
selector:
matchLabels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: mysql-exporter
app.kubernetes.io/part-of: kube-prometheus
replicas: 1
template:
metadata:
labels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: mysql-exporter
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.14.0
spec:
containers:
- name: mysql-exporter
image: prom/mysqld-exporter:v0.14.0
env:
- name: DATA_SOURCE_NAME
# 格式:用户名:密码@(数据库地址:端口)/
# 示例:root:password@(mysql-service.share-components:3306)/
value: "root:password@(mysql-service.share-components:3306)/"
resources:
requests:
cpu: 20m
memory: 20Mi
limits:
cpu: 100m
memory: 30Mi
ports:
- containerPort: 9104
name: http
volumeMounts:
- name: localtime
mountPath: /etc/localtime
volumes:
- name: localtime
hostPath:
path: /usr/share/zoneinfo/Asia/Shanghai
restartPolicy: Always
配置说明:
DATA_SOURCE_NAME:MySQL 连接串,需替换为实际的用户名、密码和地址resources:资源限制,根据实际监控规模调整volumeMounts:挂载宿主机时区文件,确保容器时区正确
2.2 创建 Service
为 MySQL Exporter 创建 Service,暴露监控端口。
apiVersion: v1
kind: Service
metadata:
name: mysql-exporter
namespace: monitoring
labels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: mysql-exporter
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.14.0
platform: mos
spec:
selector:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: mysql-exporter
app.kubernetes.io/part-of: kube-prometheus
type: ClusterIP
ports:
- name: http
port: 9104
targetPort: http
配置说明:
port: 9104:MySQL Exporter 默认暴露端口platform: mos:自定义标签,用于区分不同环境
2.3 创建 ServiceMonitor
ServiceMonitor 用于告诉 Prometheus 如何采集 MySQL Exporter 的指标。
apiVersion: monitoring.coreos.com/v1
kind: ServiceMonitor
metadata:
labels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: mysql-exporter
app.kubernetes.io/part-of: kube-prometheus
app.kubernetes.io/version: v0.14.0
name: mysql-exporter
namespace: monitoring
spec:
endpoints:
- interval: 15s
port: http
relabelings:
- action: replace
regex: (.*)
replacement: $1
sourceLabels:
- __meta_kubernetes_pod_node_name
targetLabel: instance
scheme: http
jobLabel: app.kubernetes.io/name
targetLabels: [platform]
selector:
matchLabels:
app.kubernetes.io/component: exporter
app.kubernetes.io/name: mysql-exporter
app.kubernetes.io/part-of: kube-prometheus
配置说明:
interval: 15s:每 15 秒采集一次指标relabelings:指标重写规则,将 Pod 节点名作为 instance 标签值targetLabels:将 Service 的platform标签添加到采集的指标中
三、验证部署
# 查看 Deployment 状态
kubectl get deployment mysql-exporter-172.16.1.77 -n monitoring
# 查看 Pod 日志
kubectl logs -f <pod-name> -n monitoring
# 访问 Exporter 指标接口
kubectl port-forward svc/mysql-exporter 9104:9104 -n monitoring
curl http://localhost:9104/metrics
四、监控指标说明
MySQL Exporter 提供的核心监控指标:
mysql_up:MySQL 实例是否可用mysql_global_status_threads_connected:当前连接数mysql_global_status_queries:查询总数mysql_global_status_slow_queries:慢查询数量mysql_global_variables_max_connections:最大连接数配置
五、注意事项
- 数据库权限:MySQL Exporter 需要的最小权限为
PROCESS, REPLICATION CLIENT, SELECT - 多实例监控:监控多个 MySQL 实例时,需为每个实例创建独立的 Deployment,通过 name 区分
- 安全配置:生产环境建议使用 Secret 存储数据库密码,而非明文配置
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 逐光の博客!
评论




