Prometheus 监控 MySQL 快速开始

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

1. 环境示例

IP 地址HOSTNAME部署组件
192.0.2.131192-0-2-131MySQL 主库、node_exporter、mysqld_exporter、dbbot
192.0.2.132192-0-2-132MySQL 从库、node_exporter、mysqld_exporter
192.0.2.133192-0-2-133MySQL 从库、node_exporter、mysqld_exporter
192.0.2.161192-0-2-161Prometheus、Grafana、Alertmanager

2. 前置准备

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

2.1 依赖链

项目内容
前置依赖已完成 dbbotctl env setup;MySQL 实例已经可用;Prometheus 节点和 MySQL 节点都可 SSH 访问
必填变量监控三件套侧重点是 fcs_auto_download 与告警邮箱;exporter 侧重点是 node_exporter_install_typemysqld_exporter_install_typemysqld_exporter_topology
后续依赖分别完成 node_exporter_install.yml / mysqld_exporter_install.yml 后,用 dbbotctl exporter register 注册 node_exporter / mysqld_exporter;如需 Router 指标,再执行 router_exporter_install.yml

3. 部署监控三件套

3.1 配置 hosts

编辑:

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

示例:

[prometheus]
192.0.2.161 ansible_user=root ansible_ssh_pass="'密码'"
[grafana]
192.0.2.161 ansible_user=root ansible_ssh_pass="'密码'"
[alertmanager]
192.0.2.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

官方下载示例:

wget "https://github.com/prometheus/prometheus/releases/download/v2.54.0/prometheus-2.54.0.linux-amd64.tar.gz"
wget "https://dl.grafana.com/enterprise/release/grafana-enterprise-10.4.6.linux-amd64.tar.gz"
wget "https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz"

补充说明:

  • monitoring_prometheus_ansible/playbooks/common_config.yml 默认 fcs_auto_download: false,这意味着默认走手工放包。
  • 如果控制节点可以访问外网,也可以把 fcs_auto_download 改成 true,让 dbbot 自动下载上述归档包。

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: auto

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

4.1 部署 node_exporter

编辑 mysql_ansible/playbooks/vars/var_node_exporter_install.yml,并确认 inventory/hosts.ini 中的 [dbbot_node_exporter] 已列出需要主机指标的机器:

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

如果你已有其他主机监控工具,这一步可以直接跳过。

4.2 部署 mysqld_exporter

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

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

补充说明:

  • mysqld_exporter_topology: auto 会在目标机自动解析成 msmgr
  • 如果你明确知道拓扑,也可以显式写成 msmgr
  • 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

兼容说明:

  • 旧入口 exporter_install.yml 仍可执行,但现在仅兼容到 mysqld_exporter_install.yml,不会再自动部署 node_exporter

4.3 dbbot 模式

node_exporter_install_type: dbbot
mysqld_exporter_install_type: dbbot
mysqld_exporter_topology: auto

4.4 package 模式

node_exporter_install_type: package
node_exporter_package: node_exporter-1.10.2.linux-amd64.tar.gz

mysqld_exporter_install_type: package
mysqld_exporter_package: mysqld_exporter-0.18.0.linux-amd64.tar.gz
mysqld_exporter_topology: auto

官方下载示例:

wget "https://github.com/prometheus/node_exporter/releases/download/v1.10.2/node_exporter-1.10.2.linux-amd64.tar.gz"
wget "https://github.com/prometheus/mysqld_exporter/releases/download/v0.18.0/mysqld_exporter-0.18.0.linux-amd64.tar.gz"

package 模式说明:

  • mysql_ansible/playbooks/common_config.yml 默认 fcs_auto_download_packages: true,控制节点可自动下载 node_exporter / mysqld_exporter 官方包。
  • 如果你希望完全离线,把 fcs_auto_download_packages 改成 false,然后手工把安装包放到 mysql_ansible/downloads/

5. 注册 exporter 到 Prometheus

推荐优先使用 dbbotctl exporter register

  • dbbotctl 会直接复用仓内自带的 exporterregistrar 二进制。
  • 发布二进制位于 libexec/dbbotctl/exporterregistrar
  • 源码目录位于 mysql_ansible/exporterregistrar/
  • 发行包自带的 exporterregistrar 已按 CGO_ENABLED=0GOOS=linuxGOARCH=amd64GOAMD64=v1 构建,适合常见 Red Hat 系 Linux x86_64 控制节点直接运行。
  • 如果你自行修改了 Go 代码,或控制节点不是 Linux amd64,可进入 mysql_ansible/exporterregistrar/ 重新执行 sh build.sh,生成新的兼容性二进制。
# node exporter
dbbotctl exporter register -t node -H 192.0.2.131 -s 192.0.2.161 -p ${prometheus_server_root_password}
dbbotctl exporter register -t node -H 192.0.2.132 -s 192.0.2.161 -p ${prometheus_server_root_password}
dbbotctl exporter register -t node -H 192.0.2.133 -s 192.0.2.161 -p ${prometheus_server_root_password}

# mysqld exporter: MySQL 3307 -> exporter 9105
dbbotctl exporter register -t mysql -H 192.0.2.131 --db-port 3307 -s 192.0.2.161 -p ${prometheus_server_root_password} --topology mgr
dbbotctl exporter register -t mysql -H 192.0.2.132 --db-port 3307 -s 192.0.2.161 -p ${prometheus_server_root_password} --topology mgr
dbbotctl exporter register -t mysql -H 192.0.2.133 --db-port 3307 -s 192.0.2.161 -p ${prometheus_server_root_password} --topology mgr

# mysqld exporter: MySQL 3310 -> exporter 9108
dbbotctl exporter register -t mysql -H 192.0.2.131 --db-port 3310 -s 192.0.2.161 -p ${prometheus_server_root_password} --topology ms
dbbotctl exporter register -t mysql -H 192.0.2.132 --db-port 3310 -s 192.0.2.161 -p ${prometheus_server_root_password} --topology ms
dbbotctl exporter register -t mysql -H 192.0.2.133 --db-port 3310 -s 192.0.2.161 -p ${prometheus_server_root_password} --topology ms

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

如果你还要把 Router 指标接入 Prometheus,请继续阅读:mysqlrouter_exporter 与 Router 注册

6. 验证

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

Grafana 默认登录:

  • 用户名:admin
  • 密码:admin

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

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