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 对比一致性