看懂响应时间、cpu使用率、连接数、错误率、健康检查成功率这5个指标才算真正监控负载均衡;需分层采集响应时间,区分健康检查失败类型,对比并发连接与新建连接,用原生导出器采集业务维度指标,阈值应基于业务压测动态校准。

看懂这5个指标,才算真正在监控负载均衡
负载均衡不是“配完就完事”的组件,它的健康状态必须靠实时、可归因的指标来验证。只看“是否在线”等于没监控——真正要盯的是:响应时间、CPU使用率、连接数、错误率和健康检查成功率。其中最容易被忽略的是响应时间与健康检查成功率的联动:比如某台后端延迟飙升到2s,但健康检查仍用500ms超时,结果它还在转发流量,直接拖垮整体SLA。
-
响应时间建议分层采集:LB自身处理耗时(TTFB)、后端平均响应时间、P95/P99分位值;阈值按业务容忍设定,如电商下单链路建议P95 ≤ 800ms,超限立即告警 -
健康检查成功率不能只设“低于90%告警”——要区分失败类型:是TCP连不上(网络/防火墙问题),还是http返回5xx(应用崩溃),或是超时(后端过载)。不同原因触发不同处置流程 -
连接数需对比“并发连接数”和“每秒新建连接数(CPS)”:前者压爆内存,后者可能预示SYN Flood攻击或客户端异常重连
prometheus+grafana怎么配才不漏关键数据
用Prometheus监控负载均衡,核心不是“能采到”,而是“采得对”。很多团队照搬NodeExporter模板,结果只拿到CPU和内存,漏掉最关键的业务维度指标——比如按域名、路径、后端分组的QPS和错误码分布。
- 务必启用LB原生指标导出:nginx Plus用
nginxplus_exporter,HAProxy配stats socket+haproxy_exporter,云厂商ELB/A10等优先走其OpenTelemetry或云监控API,别硬扒日志 - Grafana仪表盘必须包含“偏差热力图”:例如用
sum by (backend) (rate(http_requests_total[5m]))除以总流量,可视化各后端实际分配比例,比单纯看“是否在线”更能暴露权重配置错误或自动剔除失效 - 避免常见陷阱:未配置
scrape_timeout和scrape_interval匹配——若健康检查间隔是3s,而Prometheus每15s拉一次,就可能错过瞬时故障
阈值不是写死的数字,而是要动态校准的业务契约
把“CPU > 80%告警”直接套在负载均衡器上,大概率会误报。LB的CPU瓶颈往往出现在ssl卸载、正则匹配或WAF规则执行阶段,和普通Web服务器的负载特征完全不同。阈值必须基于真实压测和历史毛刺来反推。
- 业务基准法:取过去30天峰值QPS的120%作为吞吐量警戒线,而不是服务器规格的70%利用率——LB的价值是支撑业务,不是填满CPU
- 冗余必须显性化:比如健康检查失败率阈值设为90%,但背后要配套“连续3次失败才隔离”,避免偶发抖动引发雪崩式摘除
- 每月必做压力测试:用
stress-ng --net 2 --timeout 60s或wrk -t4 -c1000 -d30s https://vip/health验证LB在连接突增下的行为,观察连接数增长斜率与错误率拐点
告警不是通知,是带上下文的行动指令
收到“健康检查失败”告警却不知道该查哪台后端、哪个端口、什么错误码,等于没告警。真正的可操作告警必须自带定位线索和初步处置建议。
- 告警消息里强制嵌入标签:比如
alert: BackendUnhealthy附带labels{backend="api-v2", port="8080", error_code="503", region="shanghai"} - 一级告警(如健康检查成功率remove_backend,或向Consul发送
service: deregister,同时钉钉消息里带一键跳转Kibana日志链接 - 拒绝模糊描述:“连接数高”要拆解成“ESTABLISHED连接数突增”还是“TIME_WAIT堆积”,前者查后端是否挂了,后者可能是客户端未正确复用连接
真实环境里最常被低估的,是健康检查策略与业务SLA的咬合度——比如一个依赖数据库的API,健康检查只ping端口,根本发现不了DB连接池已耗尽。这类隐性故障,必须靠带业务语义的主动探测(如GET /health?require=db)才能兜住。