在 Kubernetes 集群中监控企业微信机器人服务状态,最推荐的做法是结合 Kubernetes 原生探针(Probe)与业务层 HTTP 请求成功率指标。适用场景为部署在 K8s 内的通知告警服务,风险边界在于企业微信 API 的频率限制可能导致误报,需区分网络故障与接口限流。
先说结论:仅监控 Pod 运行状态不足以反映机器人可用性,必须增加对外部 webhook 接口连通性及发送结果的业务监控。
- 适合:基于 HTTP Webhook 推送消息的 K8s 应用服务
- 先准备:Prometheus 监控栈、企业微信 Webhook Key、网络策略配置
- 验收:模拟发送失败场景,确认告警通道能正常触发
命令速用版
快速检查 Pod 状态及网络连通性,可使用以下命令:
kubectl get pods -l app=wecom-robot -n monitoring
curl -v https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=YOUR_KEY若 curl 返回 HTTP 200 且业务码为 0,表示网络与接口基础正常。
为什么会这样
Kubernetes 原生监控只能感知容器进程是否存活,无法感知业务逻辑是否成功。企业微信机器人依赖外部 API 调用,网络波动、Key 失效或接口限流都会导致服务不可用,但 Pod 状态仍显示 Running。
分步处理
第一步:配置存活与就绪探针。在 Deployment YAML 中设置 httpGet 探针,探测应用健康检查接口,避免探测企业微信外部地址以免受外部依赖影响。
第二步:暴露业务指标。在代码中集成 Prometheus Client,记录消息发送请求总数、成功数、失败数及耗时,暴露/metrics 接口。
第三步:配置告警规则。编写 Prometheus Rule,当发送失败率超过阈值或连续多次返回非零业务码时触发告警。
怎么验证是否生效
查看 Prometheus Grafana 面板,确认 wocom_message_send_total 等指标有数据增长。手动构造一次发送失败(如修改 Key 为无效值),观察告警管理器是否在预期时间内收到告警通知。
常见坑
企业微信 Webhook 有频率限制,高频监控探测可能触发限流导致正常业务失败。网络策略需允许 K8s 节点访问外网 443 端口,否则出口流量会被丢弃。
常见问题
监控探针会触发企业微信限流吗?
会。建议探针只检查应用内部健康状态,业务成功率监控通过异步指标采集实现,避免高频同步探测。
Webhook Key 泄露怎么办?
立即在企业微信机器人管理页面重置 Key,并在 K8s 中使用 Secret 对象存储 Key,避免明文写在 Deployment 中。
参考来源
- Kubernetes 官方文档:Configure Liveness, Readiness and Startup Probes (https://kubernetes.io/docs/tasks/configure-pod-container/configure-liveness-readiness-startup-probes/)
- 企业微信官方文档:群机器人 API 说明 (https://developer.work.weixin.qq.com/document/path/91770)