要实现nginx集群错误率实时告警,需先用promql聚合计算带cluster标签的5xx错误率:(sum by (cluster)(rate(nginx_http_requests_total{code=~"5.."}[5m]))) / (sum by (cluster)(rate(nginx_http_requests_total[5m])));再在grafana中设静态阈值线(如1%),并配置prometheus告警规则联动alertmanager发送通知。

要让 Grafana 展示 Nginx 集群整体错误率的实时告警阈值线,关键不是“画一条线”,而是把错误率指标算准、打上集群维度标签、在 Grafana 图表中叠加阈值,并联动 Alertmanager 触发真实告警。
计算带集群标签的整体 5xx 错误率
错误率不能只看单台 Nginx,必须聚合整个集群。推荐用 Prometheus 的 PromQL 表达式:
-
分子:所有节点 5xx 请求总数 →
sum by (cluster) (rate(nginx_http_requests_total{code=~"5.."}[5m])) -
分母:所有节点总请求数 →
sum by (cluster) (rate(nginx_http_requests_total[5m])) -
错误率:两者相除 →
(sum by (cluster) (rate(nginx_http_requests_total{code=~"5.."}[5m]))) / (sum by (cluster) (rate(nginx_http_requests_total[5m])))
前提是采集时已通过 relabel_configs 或 exporter 启动参数为每台 Nginx 注入 cluster="prod-web" 这类统一标签,否则无法跨实例聚合。
在 Grafana 图表中添加静态阈值线
进入面板编辑模式,在「Panel options」→「Thresholds」里设置:
- 阈值类型选 Static
- 填入业务可接受的错误率上限,例如
0.01(即 1%) - 颜色设为红色,触发条件为 Greater than
这条线会固定显示在图表 Y 轴对应位置,随时间推移实时对比实际错误率曲线,视觉上一目了然。
配置真正生效的告警规则
仅图表标线不触发通知。需在 Prometheus 的 alert.rules 中定义规则,并由 Alertmanager 推送:
- 表达式:
(sum by (cluster) (rate(nginx_http_requests_total{code=~"5.."}[5m]))) / (sum by (cluster) (rate(nginx_http_requests_total[5m]))) > 0.01 -
for: 3m—— 持续超阈值 3 分钟才告警,避免毛刺误报 - 附加标签:
severity: "warning"或"critical",便于分级处理
告警触发后,Grafana 的「Alerts」页面会显示状态,同时可通过邮件、企业微信或 PagerDuty 接收通知。
补充:避免常见偏差
直接用 stub_status 只能拿到全局请求计数,无法区分 5xx;务必使用 nginx-prometheus-exporter 或 nginx-module-vts,它们能按 code 维度暴露状态码明细。若日志中 5xx 来自上游服务(如后端返回 502),VTS 也能统计到,确保错误归因准确。











