说明

四个主要步骤:

  • (1)数据库授权

  • (2)部署prometheus-mysql-exporter

  • (3)对接Grafana数据看板

  • (4)对接Prometheus监控报警

架构图

使用Prometheus监控自建Mysql

说明:如上图,通过mysql_exporter获取MySQL的监控数据,通过node_exporter获得Linux服务器的监控数据。将获得的监控数据传到Prometheus中,最终通过Grafana展示出来。

部署 mysql 服务

本教程是用于测试演练,使用docker快速部署mysql服务:

# 部署mysql
docker run -itd --name mysql-test -p 3306:3306 -e MYSQL_ROOT_PASSWORD=Test#123 mysql:5.7
# 进入mysql
docker exec -it mysql-test /bin/bash
# 登陆mysql
mysql -uroot -pTest#123

创建监控账号并授权

CREATE USER 'exporter'@'%'  IDENTIFIED BY 'Test#123';
GRANT SELECT, PROCESS, SUPER, REPLICATION CLIENT, RELOAD ON *.* TO 'exporter'@'%';
flush privileges;

登陆测试:

mysql -h 192.168.1.1 -uexporter -pTest#123

即可正常登陆~

helm部署mysql-exporter

# 添加库
helm repo add prometheus-community https://prometheus-community.github.io/helm-charts
# 更新库
helm repo update
# 查询包
helm search repo prometheus-mysql-exporter
NAME                                            CHART VERSION   APP VERSION DESCRIPTION                                       
prometheus-community/prometheus-mysql-exporter  1.7.0           v0.12.1     A Helm chart for prometheus mysql exporter with...

更多 helm 操作详见prometheus-mysql-exporter

# 下载prometheus-mysql-exporter
helm pull prometheus-community/prometheus-mysql-exporter
# 解压
tar zxvf prometheus-mysql-exporter-1.7.0.tgz

修改values.yaml

修改values.yaml中的datasource为安装在kubernetes/docker/主机中 mysql 的地址:

# mysql connection params which build the DATA_SOURCE_NAME env var of the docker container
mysql:
  db: ""
  host: "192.168.1.1"
  param: ""
  pass: "Test#123"
  port: 3306
  protocol: ""
  user: "exporter"
# secret with full DATA_SOURCE_NAME env var as stringdata
  existingSecret: false

重新打包

tar -zcvf prometheus-mysql-exporter-v1.0.tgz prometheus-mysql-exporter

helm install

# 创建中间件空间
kubectl create ns middle
# 部署
helm install mysql-devops prometheus-mysql-exporter-v1.0.tgz -n middle
# 查看资源
kubectl get all -n middle

对接Prometheus

这里我直接使用 Prometheus 自动发现,更新svc配置添加如下参数:

kubectl edit svc mysql-devops-prometheus-mysql-exporter -n middle
# 在 annotations 里添加
annotations:
    meta.helm.sh/release-name: mysql-devops
    meta.helm.sh/release-namespace: middle
    # 下面两项
    prometheus.io/port: "9104"
    prometheus.io/scrape: "true"

登陆prometheus-->target,查看:

使用Prometheus监控自建Mysql

对接Grafana

这里我分享两个看板模型,根据需要大家自选挑选~

Grafana官网

MySQL Overview

这个更新的不及时,要体验最新的我们直接去项目地址下载安装mysql监控的dashboard,可参考grafana-dashboards

使用Prometheus监控自建Mysql

MySQL Exporter Quickstart and Dashboard

使用Prometheus监控自建Mysql

Mysql报警规则

kubectl apply -f Alert/prometheus-alert-rules-mysql-devops.yaml