nginx告警需经exporter暴露指标、prometheus抓取并触发规则、alertmanager配置企业微信凭证与模板后推送。关键在四步闭环:指标采集→规则定义→alertmanager配置→模板渲染,缺一不可。

Prometheus 本身不发告警,Nginx 的监控指标需先由 exporter 暴露,再经 Prometheus 抓取、规则触发,最终交由 Alertmanager 统一推送——企业微信只是 Alertmanager 的一个通知通道,关键在 Alertmanager 配置正确、凭证有效、模板可用。
一、让 Nginx 指标可被 Prometheus 抓取
必须先有指标,才能告警。Nginx 原生不输出 Prometheus 格式数据,需借助以下任一方式:
-
推荐方案:部署
nginx-prometheus-exporter(如官方镜像nginx/nginx-prometheus-exporter),监听 Nginx 的 stub_status 或 access_log,暴露/metrics接口 -
高阶方案:使用 OpenResty +
lua-resty-prometheus,在请求处理链中实时埋点,支持按upstream、status、path等维度打标 -
轻量方案:启用 Nginx 的
stub_status,配合node_exporter的 textfile collector 定期解析,仅适合基础连接数/请求数监控
确认 Prometheus 能抓到指标后,例如:nginx_http_requests_total{job="nginx", status="502", upstream="auth-svc"},才算打通第一步。
二、在 Prometheus 中定义异常流量告警规则
告警逻辑写在 rule_files(如 rules/nginx_alerts.yml)中,示例规则:
- 5xx 错误率突增:当 5 分钟内
rate(nginx_http_requests_total{status=~"5.."}[5m]) / rate(nginx_http_requests_total[5m]) > 0.05且持续 2 分钟,触发NginxHighErrorRate告警 - 响应延迟超标:当
histogram_quantile(0.95, rate(nginx_http_request_duration_seconds_bucket[5m])) > 1.0,标记为NginxHighLatency - 上游不可达:当
count by (upstream) (nginx_http_upstream_server_state{state="down"}) > 0,触发NginxUpstreamDown
每条规则应带 labels(如 severity: "critical"、service: "payment-api")和 annotations(如 summary: "上游 {{ $labels.upstream }} 返回大量 502"),这些字段后续会传入企业微信模板。
支持AI生成符合公众号规范的图文,推送至草稿箱;兼容其他技能生成的图文/图片。通过向导扫码授权,支持多账号;无需暴露Secret密钥或配置IP白名单。
三、Alertmanager 对接企业微信的实操配置
核心是四类凭证齐全 + alertmanager.yml 配置无误:
-
企业ID:企业微信【我的企业】→底部查看,形如
wwxxxxxxx -
部门ID:【通讯录】新建专用部门(如“SRE-Alerts”),点击该部门即显示数字 ID(如
123) -
AgentId 与 Secret:【应用管理】→【创建应用】→填名称(如“Prometheus-Alert”)→创建后在详情页获取,
Secret仅首次可见
在 alertmanager.yml 中配置:
-
global 区块声明基础参数:
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/'wechat_api_corp_id: '你的企业ID'wechat_api_secret: '你的Secret' -
receivers 定义微信接收器:
- name: 'wechat'wechat_configs:- send_resolved: trueto_party: '123'agent_id: '1000002'message: '{{ template "wechat.default.message" . }}' -
route 确保告警路由到该 receiver:
route:receiver: 'wechat'group_by: ['alertname', 'severity', 'upstream']
四、编写清晰可用的企业微信告警模板
模板文件(如 /etc/alertmanager/templates/wechat.tmpl)需区分故障与恢复,并包含可行动信息:
- 用
{{if gt (len .Alerts.Firing) 0}}渲染故障消息,展示alertname、severity、upstream、status、summary和StartsAt - 用
{{if gt (len .Alerts.Resolved) 0}}渲染恢复消息,补充EndsAt时间 - 关键字段建议保留:
{{ .Labels.upstream }}、{{ .Labels.instance }}、{{ .Annotations.summary }}、{{ .Annotations.description }} - 避免模板语法错误,保存后重启 Alertmanager 并用
curl -X POST http://localhost:9093/-/reload热加载
配置完成后,手动触发一条测试告警(如修改规则阈值),观察企业微信是否收到结构化消息——域名、上游、错误率、时间戳都清晰可读,就说明集成成功。










