AlertManager无法发送通知时,如何获取该异常的告警通知?
解决AlertManager自身异常时无法接收告警的方案
针对你遇到的问题——AlertManager自身无法发送通知时,对应的告警规则触发后无法送达,这里提供几个实用的解决思路:
1. 让Prometheus绕过AlertManager,直接发送AlertManager相关告警
核心思路是:给AlertManager专属的告警规则配置独立的通知通道,不经过主AlertManager转发,直接由Prometheus对接外部通知服务。
具体步骤:
- 步骤1:创建独立的通知接收端
用AWS Lambda搭建一个简单的webhook端点,接收Prometheus的告警请求后,直接调用AWS SNS的PublishAPI发送通知。Lambda的核心逻辑可简化为:解析Prometheus的webhook JSON payload,提取告警信息,调用SNS SDK发布消息。 - 步骤2:修改Prometheus配置
在Prometheus的alerting配置块中,新增一个receiver指向上述Lambda的webhook地址:
这样,当AlertManager相关的告警触发时,Prometheus会直接把告警发送到Lambda,再由Lambda转发到SNS,完全绕过主AlertManager。alerting: receivers: - name: 'default' # 原有的主AlertManager receiver配置 - name: 'direct-sns-receiver' webhook_configs: - url: 'https://<lambda-api-gateway-url>/alert' route: group_by: ['alertname'] receiver: 'default' routes: - match: alertname: 'AlertmanagerClusterFailedToSendAlerts' receiver: 'direct-sns-receiver' - match: alertname: 'AlertmanagerDown' receiver: 'direct-sns-receiver' # 可添加更多AlertManager相关的告警规则匹配
2. 用Kubernetes原生监控+外部告警通道
利用Kubernetes的探针和监控能力,监控AlertManager的Pod状态,再通过独立通道发送告警。
具体步骤:
- 步骤1:给AlertManager配置探针
确保AlertManager的Deployment中配置了liveness和readiness探针,比如:livenessProbe: httpGet: path: /-/healthy port: web initialDelaySeconds: 30 periodSeconds: 10 readinessProbe: httpGet: path: /-/ready port: web initialDelaySeconds: 30 periodSeconds: 10 - 步骤2:通过kube-state-metrics采集Pod状态
确保集群中部署了kube-state-metrics,它会暴露kube_pod_status_ready等指标。 - 步骤3:创建Pod异常告警规则
在Prometheus Rules中添加如下规则:
同样,把这个告警规则的接收端配置成步骤1中的groups: - name: alertmanager-status rules: - alert: AlertManagerPodNotReady expr: kube_pod_status_ready{pod=~"alertmanager-.*", namespace="<your-namespace>", condition="true"} == 0 for: 1m labels: severity: critical annotations: summary: "AlertManager Pod {{ $labels.pod }} 未就绪" description: "AlertManager Pod {{ $labels.pod }} 在过去1分钟内处于未就绪状态"direct-sns-receiver,绕过主AlertManager。
3. 用AWS CloudWatch实现完全独立的监控告警
直接利用AWS的原生服务监控AlertManager,完全脱离自己部署的Prometheus/AlertManager体系,确保告警通道的独立性。
具体步骤:
- 步骤1:采集AlertManager指标到CloudWatch
通过CloudWatch Agent或者EKS的CloudWatch Container Insights,采集AlertManager的Pod状态、CPU/内存使用率,以及AlertManager暴露的metrics(比如alertmanager_notifications_failed_total)。 - 步骤2:在CloudWatch中配置告警规则
创建两个关键告警:- 当AlertManager的Pod状态为
NotReady持续1分钟时触发告警 - 当
alertmanager_notifications_failed_total指标在5分钟内上升超过0时触发告警
- 当AlertManager的Pod状态为
- 步骤3:绑定SNS主题
将CloudWatch告警的通知目标设置为你的SNS主题,这样当AlertManager出现异常时,CloudWatch会直接发送告警到SNS,不受自身AlertManager的影响。
内容的提问来源于stack exchange,提问作者Djoby
相关产品推荐
相关产品推荐

