服务器半夜宕机无人知,根源常在于Alertmanager未成功推送告警至企业微信。需确保可信IP、api_secret及请求体格式正确,注意corp_id为12位字符串、to_party填部门ID、模板文件独立且UTF-8编码。排错应查看/status页面确认告警路由,值班场景推荐使用自建应用实现分级推送。
服务器半夜宕机没人知道——这种场景在运维圈里太常见了。问题的根源往往不是监控没配,而是告警链路断在了最后一步:alertmanager 没能把消息推送到企业微信。要么是连不上,要么是连上了但模板写错了,再不然就是 corp_id 权限没开对。
需要明确一点:Prometheus 本身不负责发通知,它的定位是“发现异常”。真正把告警推到微信里的,是 alertmanager。而企业微信这一端,接收消息必须满足三个硬条件:可信 IP 得对、api_secret 要正确、请求体格式必须符合企业微信 webhook 规范。任何一个环节出问题,告警就到不了你的手机。
长期稳定更新的攒劲资源: >>>点此立即查看<<<
不少配置看起来跑通了,但消息就是收不到。问题基本都出在这三个细节上:
corp_id 必须是「我的企业」页面底部显示的那串 12 位字符串(比如 wwa9fa8a0ab8180c78),不是企业名称,也不是域名,别搞混。to_party 填的是部门 ID(数字),不是部门名称。填错了,消息会静默失败,alertmanager 日志里只显示 status=400,不告诉你具体哪里不对。alertmanager 所在服务器的公网出口 IP。注意,是公网 IP,不是内网 IP。加错了,请求直接被拦截,连日志都不会留下。alertmanager.yml 里的 message: '{{ template "wechat.tmpl" . }}' 不是直接写死的字符串,而是引用外部模板文件。这个 wechat.tmpl 得单独存在,而且路径必须和 alertmanager 启动时 --config.file 指定的相对路径一致。
常见的几个坑:
alertmanager.yml 的 message 字段里,导致解析失败。alertmanager 启动时会报 parse error。{{ .Labels.instance }} 这类变量,但实际告警根本没带 instance 标签(比如规则里没加 by (instance)),渲染出来为空,企业微信直接拒收。访问 http://alertmanager-host:9093/status,重点看三块:
prometheus 根本没把告警发过来。这时候去检查 prometheus.yml 里的 alerting.alertmanagers.targets,看地址和端口是不是写对了(端口默认是 9093,不是 9090)。starts at 为未来时间,或者匹配了所有 alertname 但忘记关闭。wechat——如果显示的是 none,说明路由匹配失败了。回去检查 alertmanager.yml 里的 route.receiver 和 receivers.name 是否完全一致(大小写敏感)。别用群机器人(就是那种 webhook URL 形式的)。它不支持 to_party、agent_id 等字段,只能往固定群里丢消息,没法按部门或人员做分级告警。值班场景下,必须走「自建应用」的方式,原因很简单:
to_party 或 touser)。msgtype: news),能直接展示指标趋势图的链接。另外提一嘴:自建应用的 api_secret 每次重置都会失效。改完之后务必同步更新 alertmanager.yml 并执行 reload,否则前面做的所有配置都白搭。
侠游戏发布此文仅为了传递信息,不代表侠游戏网站认同其观点或证实其描述