14.7.1 监控体系与指标分类

ProxySQL 的监控体系应覆盖性能、可用性、容量与安全四大维度,构建从入口流量到后端 MySQL 的全链路观测。监控目标包括:及时发现异常、定位瓶颈、评估容量、验证变更效果,并为告警与自动化运维提供数据依据。

文章图片

指标分类可按层级与维度进行组织:
- 连接与会话类:前端/后端连接数、活跃会话、连接建立与释放速率、连接池命中率、连接失败与超时次数,用于评估连接池配置与后端稳定性。
- 查询与路由类:QPS、查询延迟分布、路由命中次数、读写分离命中率、规则匹配失败数,用于验证路由规则与读写分离效果。
- 资源与性能类:CPU/内存使用率、线程数、队列长度、内部缓存命中率,用于评估 ProxySQL 自身资源瓶颈。
- 后端健康类:后端主从状态、心跳延迟、节点可达性、故障切换次数,用于保障后端可用性与故障恢复能力。
- 错误与异常类:SQL 解析错误、连接认证失败、后端错误码统计、超时与重试次数,用于异常分析与风险预警。
- 业务与容量类:用户维度流量、实例维度流量、慢查询Top、最大并发、峰值与均值,对容量规划与SLA评估至关重要。

基础安装与验证(以 Linux 为例):

# 安装 ProxySQL(示例:Debian/Ubuntu)
sudo apt-get update
sudo apt-get install -y proxysql

# 启动服务
sudo systemctl enable --now proxysql

# 验证管理端口
ss -lntp | grep 6032   # 6032 管理端口
ss -lntp | grep 6033   # 6033 客户端端口
  • systemctl enable --now:设置开机自启并立即启动。
  • ss -lntp:查看端口监听与进程绑定。

核心指标查看示例(Admin 接口):

# 登录管理接口
mysql -u admin -padmin -h 127.0.0.1 -P 6032

# 连接与会话类
SELECT * FROM stats_mysql_connection_pool;

# 查询与路由类
SELECT * FROM stats_mysql_query_digest ORDER BY count_star DESC LIMIT 10;

# 资源与性能类(ProxySQL 内部统计)
SELECT * FROM stats_memory_metrics;

# 后端健康类
SELECT * FROM mysql_servers;
  • stats_mysql_connection_pool:查看各后端连接池的活跃连接、成功/失败。
  • stats_mysql_query_digest:聚合查询指纹,获取 Top SQL 与延迟。
  • stats_memory_metrics:内存使用与缓存情况。
  • mysql_servers:后端节点健康状态与权重。

示例:对“路由命中率”进行验证与阈值设定
目标:读写分离命中率 ≥ 95%

-- 统计读写分离命中情况(示例字段因版本略有差异)
SELECT hostgroup, sum(count_star) AS total_qps
FROM stats_mysql_query_digest
GROUP BY hostgroup;

-- 计算命中率(示例逻辑)
-- 命中率 = 读库hostgroup QPS / (读库hostgroup QPS + 写库hostgroup QPS)

预期效果:读库 hostgroup QPS 显著高于写库 hostgroup QPS。

排错与诊断示例:

# 1) 查看服务状态
sudo systemctl status proxysql

# 2) 检查日志
sudo tail -n 200 /var/lib/proxysql/proxysql.log

# 3) 检查连接池异常
mysql -u admin -padmin -h 127.0.0.1 -P 6032 -e \
"SELECT hostgroup, srv_host, srv_port, status, ConnUsed, ConnFree, ConnOK, ConnERR FROM stats_mysql_connection_pool;"

# 4) 检查规则未命中
mysql -u admin -padmin -h 127.0.0.1 -P 6032 -e \
"SELECT * FROM stats_mysql_query_rules;"
  • ConnERR 上升:提示后端不可用或认证失败,需核对 MySQL 用户与网络。
  • status=SHUNNED:后端被隔离,检查心跳与后端状态。

容量与基线设定示例(采样 5 分钟):

# 每30秒采集一次关键指标,持续5分钟
for i in {1..10}; do
  mysql -u admin -padmin -h 127.0.0.1 -P 6032 -e \
  "SELECT NOW(), hostgroup, sum(ConnUsed) AS conn_used, sum(Queries) AS queries
   FROM stats_mysql_connection_pool GROUP BY hostgroup;"
  sleep 30
done

预期效果:形成峰值与均值基线,用于阈值设置与扩容评估。

练习:
1. 安装 ProxySQL 并确认 6032/6033 端口监听。
2. 通过 stats_mysql_connection_pool 输出连接池指标,解释 ConnUsed/ConnFree/ConnOK/ConnERR 含义。
3. 统计 Top10 SQL 指纹,指出 p95 延迟最高的查询并给出优化方向。
4. 模拟后端不可用(暂停 MySQL),观察 statusConnERR 变化并记录日志。