Prometheus 监控 MySQL 快速开始

本文介绍如何使用 dbbot 快速搭建:Prometheus + Grafana + Alertmanager,并接入 MySQL 与主机 exporter。

1. 环境示例

IP 地址HOSTNAME部署组件
192.168.199.131192-168-199-131MySQL 主库、node_exporter、mysqld_exporter、dbbot
192.168.199.132192-168-199-132MySQL 从库、node_exporter、mysqld_exporter
192.168.199.133192-168-199-133MySQL 从库、node_exporter、mysqld_exporter
192.168.199.161192-168-199-161Prometheus、Grafana、Alertmanager

2. 前置准备

  1. 先完成 MySQL 部署(可参考 MySQL 部署快速开始)。
  2. 确认 dbbot 控制节点可 SSH 到目标节点。

3. 部署监控三件套

3.1 配置 hosts

编辑:

/usr/local/dbbot/monitoring_prometheus_ansible/inventory/hosts.ini

示例:

[prometheus]
192.168.199.161 ansible_user=root ansible_ssh_pass="'密码'"
[grafana]
192.168.199.161 ansible_user=root ansible_ssh_pass="'密码'"
[alertmanager]
192.168.199.161 ansible_user=root ansible_ssh_pass="'密码'"

3.2 准备安装包

放入目录:/usr/local/dbbot/monitoring_prometheus_ansible/downloads

  • prometheus-2.54.0.linux-amd64.tar.gz
  • grafana-enterprise-10.4.6.linux-amd64.tar.gz
  • alertmanager-0.27.0.linux-amd64.tar.gz

3.3 配置告警邮箱

编辑 playbooks/common_config.yml

alert_email_to: 'your_mail@example.com'
alert_email_from: 'your_mail@example.com'
alert_smtp_smarthost: 'smtp.example.com:587'
alert_smtp_auth_username: 'your_mail@example.com'
alert_smtp_auth_password: 'smtp_auth_password'

3.4 执行部署

cd /usr/local/dbbot/monitoring_prometheus_ansible/playbooks
ansible-playbook monitoring_prometheus_deployment.yml

4. 部署 exporter

默认值说明:

  • node_exporter_install_type: dbbot
  • mysqld_exporter_install_type: dbbot
  • mysqld_exporter_topology: ms

这表示默认使用 dbbot 仓内自带的 exporter 二进制,不依赖 GitHub Release 下载。

编辑 mysql_ansible/playbooks/vars/var_exporter_install.yml,然后执行:

cd /usr/local/dbbot/mysql_ansible/playbooks
ansible-playbook exporter_install.yml

补充说明:

  • 主从或单实例场景保持 mysqld_exporter_topology: ms 即可。
  • 仅在 MGR 场景下改为 mysqld_exporter_topology: mgr
  • mysqld_exporter_port 默认值已经改成 auto。dbbot 会按 9104 + (mysql_port - 3306) 自动派生 exporter 端口。
  • 自动派生示例:
    • mysql_port: 3306 -> mysqld_exporter_port: 9104
    • mysql_port: 3307 -> mysqld_exporter_port: 9105
    • mysql_port: 3310 -> mysqld_exporter_port: 9108
  • 如果你更希望手工控制端口,也可以显式设置,例如 mysqld_exporter_port: 9201
  • 如果你显式切换为 package 模式,则需要提前把 node_exportermysqld_exporter 安装包放到 mysql_ansible/downloads/,或者允许 dbbot 控制节点访问 GitHub Release。

5. 注册 exporter 到 Prometheus

使用 exporterregistrar

  • 源码仓自带的二进制位于 mysql_ansible/playbooks/exporterregistrar
  • 发行包自带的 exporterregistrar 已按 CGO_ENABLED=0GOOS=linuxGOARCH=amd64GOAMD64=v1 构建,适合常见 Red Hat 系 Linux x86_64 控制节点直接运行。
  • 如果你自行修改了 Go 代码,或控制节点不是 Linux amd64,可进入 mysql_ansible/exporterregistrar/ 重新执行 sh build.sh,生成新的兼容性二进制。
cd /usr/local/dbbot/mysql_ansible/playbooks

# node exporter
./exporterregistrar register -t node -H 192.168.199.131 -s 192.168.199.161 -p ${prometheus_server_root_password}
./exporterregistrar register -t node -H 192.168.199.132 -s 192.168.199.161 -p ${prometheus_server_root_password}
./exporterregistrar register -t node -H 192.168.199.133 -s 192.168.199.161 -p ${prometheus_server_root_password}

# mysqld exporter: MySQL 3307 -> exporter 9105
./exporterregistrar register -t mysql -H 192.168.199.131 --db-port 3307 -s 192.168.199.161 -p ${prometheus_server_root_password} --topology mgr
./exporterregistrar register -t mysql -H 192.168.199.132 --db-port 3307 -s 192.168.199.161 -p ${prometheus_server_root_password} --topology mgr
./exporterregistrar register -t mysql -H 192.168.199.133 --db-port 3307 -s 192.168.199.161 -p ${prometheus_server_root_password} --topology mgr

# mysqld exporter: MySQL 3310 -> exporter 9108
./exporterregistrar register -t mysql -H 192.168.199.131 --db-port 3310 -s 192.168.199.161 -p ${prometheus_server_root_password} --topology ms
./exporterregistrar register -t mysql -H 192.168.199.132 --db-port 3310 -s 192.168.199.161 -p ${prometheus_server_root_password} --topology ms
./exporterregistrar register -t mysql -H 192.168.199.133 --db-port 3310 -s 192.168.199.161 -p ${prometheus_server_root_password} --topology ms

如果你为 mysqld_exporter_port 显式指定了非自动端口,则注册时追加 -P

6. 验证

  • Prometheus: http://192.168.199.161:9090
  • Grafana: http://192.168.199.161:3000
  • Alertmanager: http://192.168.199.161:9093

Grafana 默认登录:

  • 用户名:admin
  • 密码:admin

首次登录后建议立即修改密码。

告警联调建议:在从库执行 stop replica;,观察 Prometheus/Grafana/Alertmanager 状态变化。