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),观察 status 与 ConnERR 变化并记录日志。