alerting-irm

alerting-irm

热门

端到端配置 Grafana Alerting、事件响应管理(IRM)和 SLO——配置 Grafana 管理和数据源管理的告警规则、联系点(Slack/PagerDuty/email/webhook)、带层级匹配器的通知策略、静默、静音时段、值班排班和升级链、事件管理集成,以及带多窗口燃烧率告警的 SLO。在配置告警、调试通知路由、设置值班轮换、声明或管理事件、定义 SLO、通过 YAML 或 API 配置告警、为通知策略选择匹配器、构建 PagerDuty/Slack webhook 接收器,或排查告警未触发的原因时使用——即使用户说“有错误就呼我”、“当 X 发生时提醒我”、“将此路由到平台团队”或“设置 SLO”而未明确提及 Alerting 或 IRM。

205Star
17Fork
更新于 2026/7/30
SKILL.md
readonly只读
name
alerting-irm
description

端到端配置 Grafana Alerting、事件响应管理(IRM)和 SLO——配置 Grafana 管理和数据源管理的告警规则、联系点(Slack/PagerDuty/email/webhook)、带层级匹配器的通知策略、静默、静音时段、值班排班和升级链、事件管理集成,以及带多窗口燃烧率告警的 SLO。在配置告警、调试通知路由、设置值班轮换、声明或管理事件、定义 SLO、通过 YAML 或 API 配置告警、为通知策略选择匹配器、构建 PagerDuty/Slack webhook 接收器,或排查告警未触发的原因时使用——即使用户说“有错误就呼我”、“当 X 发生时提醒我”、“将此路由到平台团队”或“设置 SLO”而未明确提及 Alerting 或 IRM。

Grafana Alerting 与 IRM

文档https://grafana.com/docs/grafana/latest/alerting.md

常见工作流

端到端配置新告警

  1. 创建联系点(通知发送到哪里):

    curl -X POST https://grafana.example.com/api/v1/provisioning/contact-points \
      -H 'Authorization: Bearer <token>' -H 'Content-Type: application/json' \
      -d @contact-points.json
    

    验证:

    curl https://grafana.example.com/api/v1/provisioning/contact-points \
      -H 'Authorization: Bearer <token>' | jq '.[].name'
    
  2. 添加通知策略(哪些告警发送到哪里)——匹配器模式见下文 § 通知策略

  3. 编写告警规则——选择类型:

  4. 上线前验证路由

    # 从规则 UI 强制触发测试告警,然后检查 Alertmanager 的视图
    curl https://grafana.example.com/api/alertmanager/grafana/api/v2/alerts \
      -H 'Authorization: Bearer <token>' | jq '.[] | {alertname: .labels.alertname, receiver: .receivers}'
    

    应出现预期的接收器。如果出现错误的接收器,请重新检查策略的匹配器。

将告警路由到 IRM / 值班

  1. 在 IRM 中,创建类型为“Grafana Alerting webhook”的集成 → 复制集成 URL
  2. 在 Grafana Alerting 中添加指向该 URL 的 webhook 联系点(完整 YAML 见 references/irm.md § 路由
  3. 添加通知策略匹配器,将正确的严重级别路由到新的联系点
  4. 验证:触发测试告警;应在约 30 秒内出现在 IRM 中。完整调试过程见 references/irm.md § 验证 IRM 集成

定义 SLO

  1. 通过 UI 或 API 创建 SLO → Grafana 自动生成记录规则、仪表板和燃烧率告警(生成的 YAML 见 references/slo.md
  2. 使用多窗口燃烧率告警,而不是单窗口——原因见 references/slo.md § 多窗口燃烧率告警,单窗口会因噪声触发
  3. 使用 references/slo.md § 验证 SLO 配置 中的 4 步模式进行验证

联系点(YAML 配置)

# provisioning/alerting/contact_points.yaml
apiVersion: 1
contactPoints:
  - orgId: 1
    name: pagerduty-critical
    receivers:
      - uid: pd-receiver
        type: pagerduty
        settings:
          integrationKey: YOUR_PAGERDUTY_KEY
          severity: critical

  - orgId: 1
    name: slack-alerts
    receivers:
      - uid: slack-receiver
        type: slack
        settings:
          url: https://hooks.slack.com/services/YOUR/WEBHOOK/URL
          channel: '#alerts'

有关 email、webhook、Teams、Telegram、OnCall 和其他接收器类型,请参见 references/alerting.md § 联系点接收器类型

通知策略

带标签匹配器的层级路由树:

# provisioning/alerting/notification_policies.yaml
apiVersion: 1
policies:
  - orgId: 1
    receiver: default-receiver
    group_by: ['alertname', 'cluster', 'service']
    group_wait: 30s
    group_interval: 5m
    repeat_interval: 12h
    routes:
      # 严重告警 → PagerDuty
      - receiver: pagerduty-critical
        matchers:
          - severity = critical
        group_wait: 10s
        repeat_interval: 4h

      # 平台团队 → Slack,但严重时呼叫人
      - receiver: slack-alerts
        matchers:
          - team = platform
        routes:
          - receiver: pagerduty-critical
            matchers:
              - severity = critical

      # 其他所有 → email
      - receiver: email-alerts
        matchers:
          - severity =~ "warning|info"

静默

抑制匹配告警的通知而不停止评估:

curl -X POST https://grafana.example.com/api/alertmanager/grafana/api/v2/silences \
  -H 'Authorization: Bearer <token>' \
  -H 'Content-Type: application/json' \
  -d '{
    "matchers": [
      {"name": "alertname", "value": "HighErrorRate", "isRegex": false},
      {"name": "env", "value": "staging", "isRegex": false}
    ],
    "startsAt": "2024-01-01T00:00:00Z",
    "endsAt": "2024-01-01T02:00:00Z",
    "comment": "维护窗口",
    "createdBy": "admin"
  }'

# 验证已创建
curl https://grafana.example.com/api/alertmanager/grafana/api/v2/silences \
  -H 'Authorization: Bearer <token>' | jq '.[] | select(.status.state == "active")'

告警规则状态

状态 描述
正常 条件未满足
待处理 条件已满足,等待 for 持续时间
触发中 条件满足完整 for 持续时间
无数据 查询返回无数据
错误 查询/评估错误
恢复中 曾触发,条件不再满足

配置目录结构

provisioning/alerting/
├── alert_rules.yaml          # 告警和记录规则
├── contact_points.yaml       # 通知目的地
├── notification_policies.yaml  # 路由树
├── templates.yaml            # 消息模板
└── mute_timings.yaml         # 周期性静音窗口

API 配置(保持 UI 可编辑)

添加 X-Disable-Provenance: true 以在 API 配置后保持资源在 UI 中可编辑:

curl -X PUT https://grafana.example.com/api/v1/provisioning/policies \
  -H 'Authorization: Bearer <token>' \
  -H 'X-Disable-Provenance: true' \
  -H 'Content-Type: application/json' \
  -d @policy.json

curl -X POST https://grafana.example.com/api/v1/provisioning/alert-rules \
  -H 'Authorization: Bearer <token>' \
  -H 'X-Disable-Provenance: true' \
  -H 'Content-Type: application/json' \
  -d @rule.json

参考

  • references/alerting.md — 完整告警规则 YAML(Grafana 管理 / Prometheus / Loki)+ 通知模板
  • references/slo.md — 生成的 SLO 记录规则 + 多窗口燃烧率告警模式 + 验证步骤
  • references/irm.md — IRM 功能、集成源、Alerting → IRM 路由 + 验证 + 常见故障模式