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
- ttimertime 明显升高

四、排错示例(统计页访问与指标异常)
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,观察 statushrsp_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}'