Prometheus 监控 MySQL 快速开始
本文介绍如何使用 dbbot 快速搭建:Prometheus + Grafana + Alertmanager,并接入 MySQL 与主机 exporter。
1. 环境示例
| IP 地址 | HOSTNAME | 部署组件 |
|---|---|---|
| 192.0.2.131 | 192-0-2-131 | MySQL 主库、node_exporter、mysqld_exporter、dbbot |
| 192.0.2.132 | 192-0-2-132 | MySQL 从库、node_exporter、mysqld_exporter |
| 192.0.2.133 | 192-0-2-133 | MySQL 从库、node_exporter、mysqld_exporter |
| 192.0.2.161 | 192-0-2-161 | Prometheus、Grafana、Alertmanager |
2. 前置准备
- 先完成 MySQL 部署(可参考 MySQL 部署快速开始)。
- 确认 dbbot 控制节点可 SSH 到目标节点。
2.1 依赖链
| 项目 | 内容 |
|---|---|
| 前置依赖 | 已完成 dbbotctl env setup;MySQL 实例已经可用;Prometheus 节点和 MySQL 节点都可 SSH 访问 |
| 必填变量 | 监控三件套侧重点是 fcs_auto_download 与告警邮箱;exporter 侧重点是 node_exporter_install_type、mysqld_exporter_install_type、mysqld_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.gzgrafana-enterprise-10.4.6.linux-amd64.tar.gzalertmanager-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: dbbotmysqld_exporter_install_type: dbbotmysqld_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会在目标机自动解析成ms或mgr。- 如果你明确知道拓扑,也可以显式写成
ms或mgr。 mysqld_exporter_port默认值已经改成auto。dbbot 会按9104 + (mysql_port - 3306)自动派生 exporter 端口。- 自动派生示例:
mysql_port: 3306->mysqld_exporter_port: 9104mysql_port: 3307->mysqld_exporter_port: 9105mysql_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=0、GOOS=linux、GOARCH=amd64、GOAMD64=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 状态变化。