13.9.2 关键运行指标与统计页面
关键运行指标应覆盖吞吐、延迟、错误与资源四类,并区分前端/后端维度:请求速率、会话与连接数、队列长度、响应时间分位、HTTP状态码分布、重试与失败、后端健康状态、内存与进程数、文件描述符使用率等。采集需包含趋势与瞬时值,便于定位峰值与抖动。
原理草图(统计页与指标流向):
一、启用统计页面(示例配置)
# /etc/haproxy/haproxy.cfg
global
log 127.0.0.1 local0
maxconn 20000
stats socket /run/haproxy/admin.sock mode 660 level admin
user haproxy
group haproxy
defaults
mode http
log global
option httplog
timeout connect 5s
timeout client 30s
timeout server 30s
frontend fe_web
bind *:80
default_backend be_app
backend be_app
balance roundrobin
server app1 10.0.0.11:8080 check
server app2 10.0.0.12:8080 check
listen stats
bind *:8404
stats enable
stats uri /stats
stats refresh 10s
stats auth admin:Str0ngPass
stats show-legends
重载并验证:
haproxy -c -f /etc/haproxy/haproxy.cfg
systemctl reload haproxy
curl -u admin:Str0ngPass http://127.0.0.1:8404/stats
预期效果:返回包含 FRONTEND/BACKEND/Server 的统计表格,字段包含状态、会话数、队列长度、响应码计数等。
二、关键字段解读(从统计页/CSV)
可导出 CSV 便于脚本处理:
curl -u admin:Str0ngPass "http://127.0.0.1:8404/stats;csv" | head -n 5
常用字段含义:
- status:UP/DOWN/MAINT
- scur / smax:当前/最大会话数
- qcur:队列长度(>0 表示排队)
- rate / rate_max:请求速率/峰值
- hrsp_5xx:5xx 数量
- qtime, ctime, rtime, ttime:排队/连接/响应/总耗时
三、阈值与告警建议(示例策略)
- 后端 status=DOWN 或健康检查连续失败
- qcur 持续增长(排队)
- hrsp_5xx 占比上升
- scur 接近 maxconn
- ttime 或 rtime 明显升高
四、排错示例(统计页访问与指标异常)
1)统计页无法访问
ss -lntp | grep 8404
# 若无监听,检查配置是否加载
haproxy -c -f /etc/haproxy/haproxy.cfg
journalctl -u haproxy -n 50
2)后端频繁 DOWN
# 验证后端端口连通性
nc -vz 10.0.0.11 8080
# 查看健康检查失败原因
grep -i "health check" /var/log/haproxy.log
3)队列长度飙升
# 检查前端连接是否接近上限
grep -n "maxconn" /etc/haproxy/haproxy.cfg
# 查看系统 fd 与进程资源
ulimit -n
ps -o pid,cmd,pmem,pcpu -C haproxy
五、练习(动手验证)
1)将 maxconn 设置为较小值(如 200),压测并观察 scur/smax 变化。
2)临时下线一个后端 app1,观察 status 与 hrsp_5xx 变化。
3)导出 CSV 并用 awk 统计 5xx 比例:
curl -u admin:Str0ngPass "http://127.0.0.1:8404/stats;csv" \
| awk -F, '$1=="be_app" && $2=="BACKEND"{print "5xx:",$14,"total:",$5}'