You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Prometheus自身宕机告警并推送至Slack渠道

现有配置问题排查
  • YAML语法错误:match字段下的alertname未做缩进,YAML语法校验会直接失败,Alertmanager无法加载配置
  • 参数重复冲突:顶层路由和子路由重复定义group_wait/group_interval/repeat_interval,会导致路由逻辑异常
  • 接收器配置缺失:slack接收器未配置Slack webhook地址、推送渠道等必填参数,根本无法发送消息
  • 逻辑缺陷:当前配置没有解决Prometheus自身宕机时无法主动上报告警的核心问题,且DeadMansSwitch(看门狗)路由逻辑错误,仅将心跳转发到cloudwatch,没有做心跳超时告警的兜底逻辑
正确实现方案

架构前提

监控Prometheus自身宕机不能依赖被监控的Prometheus实例本身(实例宕机后无法主动采集、推送告警),必须满足以下两个条件之一:

  • 部署一套独立于业务Prometheus的监控链路(独立Prometheus + 独立Alertmanager),专门探测业务Prometheus的存活状态
  • 部署blackbox_exporter做独立黑盒探测,绕过业务Prometheus的采集链路直接探活

第一步:配置Prometheus侧告警规则

在Prometheus加载的规则文件中添加以下两组规则,分别实现看门狗心跳、实例存活检测:

groups:
- name: prometheus_self_monitor
  rules:
  # 看门狗心跳:Prometheus正常运行时会持续触发该告警,用于判断Prometheus是否在线
  - alert: DeadMansSwitch
    expr: vector(1)
    for: 0m
    labels:
      severity: critical
    annotations:
      summary: "Prometheus 运行心跳"
  # 同集群内Prometheus实例存活检测
  - alert: PrometheusDown
    expr: up{job="prometheus"} == 0
    for: 1m
    labels:
      severity: critical
    annotations:
      summary: "Prometheus 实例失联"
      description: "实例 {{ $labels.instance }} 已无法正常采集指标超过1分钟"

规则配置完成后执行promtool check rules 你的规则文件路径校验语法,重载Prometheus配置生效。

第二步:修复Alertmanager配置

替换原有错误配置为以下内容,注意替换Slack相关的自定义参数:

global:
  resolve_timeout: 5m
  # 替换为你自己的Slack Incoming Webhook 地址
  slack_api_url: "https://hooks.slack.com/services/XXX/XXX/XXX"

route:
  receiver: "slack"
  group_by: ['severity', 'alertname']
  group_wait: 30s
  group_interval: 1m
  repeat_interval: 48h
  routes:
  - receiver: "cloudwatch"
    match:
      alertname: DeadMansSwitch
    # 心跳每分钟上报一次到cloudwatch做链路存活性校验
    repeat_interval: 1m

receivers:
- name: "cloudwatch"
  webhook_configs:
  - url: "http://alertmanager-cloudwatch-webhook/webhook"
- name: "slack"
  slack_configs:
  - channel: "#ops-alerts" # 替换为你实际接收告警的Slack频道
    send_resolved: true
    title: "[{{ .Status | toUpper }}] {{ .CommonLabels.alertname }}"
    text: "{{ range .Alerts }}{{ .Annotations.summary }}\n{{ .Annotations.description }}{{ end }}"

配置完成后执行amtool check-config alertmanager.yml校验语法,重载Alertmanager配置生效。

第三步:配置宕机兜底告警(核心)

为了避免Prometheus完全宕机时无法上报告警,需要在独立部署的监控Prometheus上添加以下规则,通过检测Alertmanager收到的心跳判断业务Prometheus是否存活:

- alert: PrometheusDead
  expr: absent(alertmanager_alerts{alertname="DeadMansSwitch", job="alertmanager"} == 1)
  for: 2m
  labels:
    severity: critical
  annotations:
    summary: "Prometheus 已完全宕机"
    description: "连续2分钟未收到Prometheus上报的看门狗心跳,疑似服务完全不可用"

如果没有独立监控链路,也可以部署blackbox_exporter,通过tcp/http探测Prometheus的/-/healthy端点,探测失败超过2分钟触发Slack告警。

验证方法

  1. 执行配置校验命令,确认Prometheus和Alertmanager无配置语法错误
  2. 手动停止Prometheus进程,等待2-3分钟,确认Slack频道收到对应宕机告警
  3. 重启Prometheus进程,确认Slack收到告警恢复通知

内容的提问来源于stack exchange,提问作者Suraj

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.29 18:24:45