14.7.3 Prometheus集成与指标导出
本节重点阐述 ProxySQL 的 Prometheus 集成方式与指标导出流程,覆盖安装、配置、采集、排错与演练,目标是实现标准化采集、可视化监控与告警联动。
一、指标来源与采集范围#
指标来源主要为:
- stats_:统计指标(连接、查询、延迟)
- runtime_:运行时状态(后端健康、路由命中)
- mysql_*:配置(用户、路由、后端)
采集间隔建议 10~30 秒,避免高频查询影响管理面。
二、安装与部署(Exporter)#
示例使用社区版 proxysql-exporter(二进制形式),并以 systemd 运行。
1)创建只读账号(ProxySQL Admin 接口)#
-- 连接 ProxySQL Admin
mysql -u admin -padmin -h 127.0.0.1 -P6032
-- 创建只读账号
INSERT INTO mysql_users(username,password,default_hostgroup,active,transaction_persistent)
VALUES('monitor','monitor_pass',0,1,1);
-- 授权访问统计表
INSERT INTO mysql_query_rules(rule_id,active,match_pattern,destination_hostgroup,apply)
VALUES(100,1,'^SELECT .* FROM stats_.*',0,1);
LOAD MYSQL USERS TO RUNTIME;
SAVE MYSQL USERS TO DISK;
LOAD MYSQL QUERY RULES TO RUNTIME;
SAVE MYSQL QUERY RULES TO DISK;
命令解释:
- mysql_users 创建监控用户
- mysql_query_rules 只允许查询 stats_* 表
- LOAD/SAVE 将配置写入运行时与磁盘
2)下载并运行 Exporter#
# 下载
wget https://github.com/percona/proxysql_exporter/releases/download/v1.2.0/proxysql_exporter-1.2.0.linux-amd64.tar.gz
tar -zxvf proxysql_exporter-1.2.0.linux-amd64.tar.gz
sudo mv proxysql_exporter-1.2.0.linux-amd64/proxysql_exporter /usr/local/bin/
# 创建 systemd 服务
cat >/etc/systemd/system/proxysql_exporter.service <<'EOF'
[Unit]
Description=ProxySQL Exporter
After=network.target
[Service]
ExecStart=/usr/local/bin/proxysql_exporter \
--proxysql.admin=127.0.0.1:6032 \
--proxysql.user=monitor \
--proxysql.password=monitor_pass \
--web.listen-address=:9104
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now proxysql_exporter
预期效果:
curl -s http://127.0.0.1:9104/metrics | head
输出包含 proxysql_* 指标。
三、Prometheus 配置示例#
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: "proxysql"
scrape_interval: 15s
static_configs:
- targets: ["10.0.0.11:9104"]
labels:
instance: "proxysql-01"
cluster: "mysql-prod"
env: "prod"
命令解释:
- scrape_interval 控制采集频率
- labels 用于 Grafana 分组和告警维度
四、关键指标示例与含义#
| 指标 | 含义 | 典型用途 |
|---|---|---|
| proxysql_connections_active | 活跃连接数 | 连接池压力 |
| proxysql_queries_total | 查询总量 | QPS趋势 |
| proxysql_backend_status | 后端状态 | 健康检查 |
| proxysql_backend_latency | 后端延迟 | 慢查询/链路 |
| proxysql_errors_total | 错误总数 | 异常告警 |
查看单指标:
curl -s http://127.0.0.1:9104/metrics | grep proxysql_connections_active
五、Grafana 模块化仪表盘建议#
1) 连接与线程
2) 路由与命中率
3) 后端健康与延迟
4) SQL性能与错误率
5) 容量趋势与热点
六、常见排错#
1)Exporter 无法启动#
journalctl -u proxysql_exporter -n 50
常见原因:
- Admin 账号密码错误
- 6032 端口不可达
- 没有 stats_* 查询权限
2)Prometheus 抓取失败#
curl -v http://10.0.0.11:9104/metrics
检查:
- 防火墙与安全组
- Exporter 进程是否存活
3)指标缺失#
-- 确认 stats 表存在
SHOW TABLES FROM stats;
若版本不兼容,需升级 Exporter 或调整版本适配。
七、告警规则示例(Prometheus)#
groups:
- name: proxysql_alerts
rules:
- alert: ProxySQLBackendDown
expr: proxysql_backend_status == 0
for: 1m
labels:
severity: critical
annotations:
summary: "ProxySQL 后端不可用"
- alert: ProxySQLConnHigh
expr: proxysql_connections_active > 500
for: 2m
labels:
severity: warning
annotations:
summary: "活跃连接过高"
八、练习#
1) 使用 curl 验证 /metrics 输出,并定位 proxysql_queries_total
2) 将 scrape_interval 从 15s 改为 5s,观察 Prometheus TSDB 变化
3) 人为停掉一个后端 MySQL,观察 proxysql_backend_status 是否触发告警
4) 编写一个脚本统计活跃连接数,并与 Grafana 对比一致性