14.10.6 监控告警异常与指标缺失
本节聚焦 ProxySQL 监控告警异常与指标缺失的排查思路,覆盖采集链路、指标源、权限与性能等关键点,并提供可执行命令、配置、原理草图与练习。
原理草图:监控采集链路
1. 采集链路自检(含安装/验证)#
1)安装与启动 exporter(示例)
# 下载并安装(以Linux amd64为例)
curl -L -o /usr/local/bin/proxysql_exporter \
https://github.com/percona/proxysql_exporter/releases/download/v1.1.0/proxysql_exporter
chmod +x /usr/local/bin/proxysql_exporter
# 创建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-username=stats \
--proxysql-admin-password=Stats@123 \
--proxysql-admin-address=127.0.0.1 \
--proxysql-admin-port=6032 \
--web.listen-address=:9104
Restart=always
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable --now proxysql_exporter
2)链路连通性与端口检查
# 检查端口监听
ss -lntp | grep -E '6032|9104'
# 本机抓取测试,预期返回metrics文本
curl -s http://127.0.0.1:9104/metrics | head
3)Prometheus 抓取配置示例
# /etc/prometheus/prometheus.yml
scrape_configs:
- job_name: 'proxysql'
scrape_interval: 15s
scrape_timeout: 5s
static_configs:
- targets: ['10.0.0.11:9104']
2. 指标来源核验(admin统计表)#
关键表查询
-- 连接 admin 6032
mysql -u stats -pStats@123 -h 127.0.0.1 -P6032
-- 统计表是否更新
SELECT * FROM stats_mysql_connections LIMIT 5;
SELECT * FROM stats_mysql_global;
SELECT * FROM stats_mysql_query_digest ORDER BY sum_time DESC LIMIT 5;
命令解释
- stats_mysql_connections:连接数变化,若长期为 0 可能无流量或被绕过。
- stats_mysql_global:全局计数器,判断是否在增长。
- stats_mysql_query_digest:慢查询和统计重表,频繁抓取可能带来压力。
3. 权限与账号问题(最小权限示例)#
创建统计账号
-- 在admin端执行
INSERT INTO admin_users(username,password,default_hostgroup,active)
VALUES('stats','Stats@123',0,1);
-- 赋予访问stats表权限
UPDATE admin_users SET use_ssl=0 WHERE username='stats';
LOAD ADMIN USERS TO RUNTIME;
SAVE ADMIN USERS TO DISK;
校验凭据与变量
SHOW VARIABLES LIKE 'admin-%';
-- 重点:admin_credentials、stats_credentials、mysql_ifaces
4. 运行时与配置一致性(LOAD/SAVE)#
-- 修改配置后必须加载到 runtime
LOAD MYSQL USERS TO RUNTIME;
LOAD MYSQL VARIABLES TO RUNTIME;
LOAD MYSQL QUERY RULES TO RUNTIME;
-- 保存到磁盘,防止重启丢失
SAVE MYSQL USERS TO DISK;
SAVE MYSQL VARIABLES TO DISK;
SAVE MYSQL QUERY RULES TO DISK;
5. 指标缺失常见原因与修复示例#
原因 A:业务绕过 ProxySQL
# 应用侧检查连接目标(预期指向 ProxySQL)
ss -tnp | grep 3306 | head
原因 B:规则未生效或统计未开启
-- 查看规则是否启用统计
SELECT rule_id, active, apply, flagIN, flagOUT
FROM mysql_query_rules;
-- 重新加载规则
LOAD MYSQL QUERY RULES TO RUNTIME;
原因 C:exporter 与 ProxySQL 版本不兼容
proxysql_exporter --version
proxysql --version
# 对比发行说明,必要时升降级并验证metrics
6. 告警异常与误报排查#
口径对齐示例(PromQL)
# 活跃连接 vs 总连接
proxysql_mysql_connections{state="ACTIVE"} > 200
proxysql_mysql_connections{state="TOTAL"} > 200
标签与聚合检查
# 检查实例标签是否完整
count by (instance) (proxysql_mysql_connections)
7. 性能与采集压力控制#
建议:降低重表抓取频率
# Prometheus分级抓取(示例)
scrape_configs:
- job_name: 'proxysql_fast'
scrape_interval: 15s
static_configs:
- targets: ['10.0.0.11:9104']
- job_name: 'proxysql_slow'
scrape_interval: 2m
metrics_path: /metrics
params:
collect[]: [mysql_query_digest] # 需配合exporter支持
static_configs:
- targets: ['10.0.0.11:9104']
8. 日志与诊断命令#
# exporter 日志(systemd)
journalctl -u proxysql_exporter -n 200 --no-pager
# ProxySQL 日志
tail -n 200 /var/lib/proxysql/proxysql.log
9. 快速修复清单(可操作步骤)#
- 放通 6032/9104 端口与安全组,
ss -lntp验证。 - 修正 admin/stats 账号,
SHOW VARIABLES LIKE 'admin-%';检查。 - 确保
LOAD ... TO RUNTIME,并SAVE ... TO DISK。 - 流量确认走 ProxySQL,应用连接指向 6033。
- 版本对齐 exporter 与 ProxySQL,并验证
/metrics输出。
10. 练习与自测#
练习1:故障注入与恢复
# 停掉 exporter,观察监控“无数据”告警
systemctl stop proxysql_exporter
# 恢复
systemctl start proxysql_exporter
练习2:制造权限问题
-- 修改密码导致抓取失败
UPDATE admin_users SET password='BadPwd' WHERE username='stats';
LOAD ADMIN USERS TO RUNTIME;
-- 预期:/metrics 报认证失败
练习3:验证指标增长
-- 在应用侧产生查询后检查统计
SELECT * FROM stats_mysql_global;
SELECT * FROM stats_mysql_connections;