Skip to content

Alertmanager 告警管理

Alertmanager 是 Prometheus 生态的告警管理组件,负责接收 Prometheus Server 推送的告警,并完成去重、分组、路由,最终通过邮件、Webhook 等渠道通知到人。它不产生告警(告警规则在 Prometheus 侧定义),只负责告警的「分发与收敛」。

一句话定位:Prometheus 负责「发现异常」,Alertmanager 负责「把异常正确地告诉对的人」。三者分工:Prometheus 采集与告警判断,Alertmanager 收敛与通知,Grafana 可视化。

一、核心概念

概念说明
Grouping(分组)把同一时间触发的同类告警合并为一条通知,避免告警风暴
Inhibition(抑制)某告警触发时抑制关联告警(如主机宕机时抑制该主机上的服务告警)
Silences(静默)在指定时间窗口内忽略匹配的告警(如计划内维护)
Routing(路由)按标签把告警分发到不同接收者(如按 severity 分渠道)

完整告警链路:

Prometheus 评估告警规则 → 推送 Alertmanager → 分组/抑制/静默 → 路由 → 邮件/Webhook/企业微信

二、Docker 安装

方式一:docker run

先准备配置文件 alertmanager.yml(见下文),再运行:

bash
docker run -d \
  --name alertmanager \
  -p 9093:9093 \
  -v "$(pwd)/alertmanager.yml:/etc/alertmanager/alertmanager.yml" \
  prom/alertmanager:latest

方式二:docker-compose(推荐)

yaml
version: '3.8'

services:
  alertmanager:
    image: prom/alertmanager:latest
    container_name: alertmanager
    ports:
      - "9093:9093"
    volumes:
      - ./alertmanager.yml:/etc/alertmanager/alertmanager.yml
    command:
      - '--config.file=/etc/alertmanager/alertmanager.yml'
    restart: unless-stopped

启动后访问 http://localhost:9093 可进入 Alertmanager 的 Web UI(查看告警、创建静默)。

三、配置 Prometheus 对接

在 Prometheus 的 prometheus.yml 中声明告警管理器地址与告警规则文件:

yaml
alerting:
  alertmanagers:
    - static_configs:
        - targets: ["alertmanager:9093"]   # 容器网络内用服务名

rule_files:
  - "/etc/prometheus/rules/*.yml"          # 告警规则目录

四、配置文件 alertmanager.yml

一个含邮件与 Webhook 两个接收器的基础配置:

yaml
global:
  resolve_timeout: 5m              # 告警恢复后的等待时间

route:
  group_by: ['alertname', 'cluster']  # 按哪些标签分组
  group_wait: 30s                     # 首次告警等待时间(收集同类告警)
  group_interval: 5m                  # 组内后续告警发送间隔
  repeat_interval: 4h                 # 未恢复告警的重复通知间隔
  receiver: 'default'                 # 默认接收器

receivers:
  - name: 'default'
    email_configs:
      - to: 'admin@example.com'
        from: 'alertmanager@example.com'
        smarthost: 'smtp.example.com:587'
        auth_username: 'alertmanager@example.com'
        auth_password: 'password'
    webhook_configs:
      - url: 'http://webhook.example.com/alert'

关键字段:

  • route:定义路由树,可用 routes: 子路由按标签匹配分流。
  • receivers:通知接收器,支持 email_configswebhook_configsslack_configspagerduty_configs 等。

五、告警规则(Prometheus 侧)

告警规则写在 Prometheus 的 rule_files 目录,例如主机宕机告警 node-alerts.yml

yaml
groups:
  - name: node-alerts
    rules:
      - alert: InstanceDown
        expr: up == 0
        for: 1m
        labels:
          severity: critical
        annotations:
          summary: "实例 {{ $labels.instance }} 宕机"
          description: "实例 {{ $labels.instance }} 已停止上报超过 1 分钟"

字段说明:

  • expr:PromQL 表达式,为真则告警。
  • for:持续时长,避免瞬时抖动误报。
  • labels:附加标签,可用于路由与抑制。
  • annotations:告警描述,支持 Go 模板变量(如 {{ $labels.instance }})。

六、通知渠道

1. 原生渠道

Alertmanager 原生支持邮件、Slack、PagerDuty、Webhook 等,直接在 receivers 中配置即可。

2. 钉钉 / 企业微信

Alertmanager 不原生支持钉钉/企业微信,需通过 Webhook 中转。常见做法是部署 prometheus-webhook-dingtalk 中转服务,再在 receivers 中配置 webhook_configs 指向它:

yaml
receivers:
  - name: 'dingtalk'
    webhook_configs:
      - url: 'http://dingtalk-webhook:8060/dingtalk/webhook1/send'

七、注意事项

  1. 分组是防告警风暴的关键:合理设置 group_bygroup_interval,避免一次故障刷屏。
  2. 抑制降噪:配置 inhibit_rules,让「主机宕机」抑制「该主机上的服务异常」等派生告警。
  3. 静默用于计划维护:Web UI 的 Silence 页面可临时屏蔽维护窗口内的告警。
  4. 配置热加载:修改 alertmanager.yml 后执行 docker exec alertmanager kill -HUP 1 重载。

参考资料