alerting-irm

alerting-irm

熱門

端對端設定 Grafana Alerting、Incident Response Management (IRM) 與 SLO — 佈建 Grafana 管理與資料來源管理的警示規則、聯絡點(Slack/PagerDuty/email/webhook)、含階層式比對器的通知原則、靜音、靜音時段、on-call 排班與升級鏈、事件管理整合,以及含多視窗燃盡率警示的 SLO。用於設定警示、除錯通知路由、設定 on-call 輪值、宣告或管理事件、定義 SLO、透過 YAML 或 API 佈建警示、為通知原則挑選比對器、建立 PagerDuty/Slack webhook 接收器,或疑難排解警示未觸發的原因 — 即使使用者只說「錯誤時 page 我」、「X 發生時警示我」、「將此路由到平台團隊」或「設定 SLO」,而未明確提及 Alerting 或 IRM。

205星標
17分支
更新於 2026/7/30
SKILL.md
唯讀
名稱
alerting-irm
描述

端對端設定 Grafana Alerting、Incident Response Management (IRM) 與 SLO — 佈建 Grafana 管理與資料來源管理的警示規則、聯絡點(Slack/PagerDuty/email/webhook)、含階層式比對器的通知原則、靜音、靜音時段、on-call 排班與升級鏈、事件管理整合,以及含多視窗燃盡率警示的 SLO。用於設定警示、除錯通知路由、設定 on-call 輪值、宣告或管理事件、定義 SLO、透過 YAML 或 API 佈建警示、為通知原則挑選比對器、建立 PagerDuty/Slack webhook 接收器,或疑難排解警示未觸發的原因 — 即使使用者只說「錯誤時 page 我」、「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 / on-call

  1. 在 IRM 中,建立類型為「Grafana Alerting webhook」的整合 → 複製整合 URL
  2. 在 Grafana Alerting 中新增指向該 URL 的 webhook 聯絡點(完整 YAML 請參閱 references/irm.md § Routing
  3. 新增通知原則比對器,將正確的嚴重度路由到新的聯絡點
  4. 驗證:觸發測試警示;應在約 30 秒內出現在 IRM 中。完整除錯程序請參閱 references/irm.md § Verifying the IRM integration

定義 SLO

  1. 透過 UI 或 API 建立 SLO → Grafana 自動產生記錄規則、儀表板與燃盡率警示(產生的 YAML 位於 references/slo.md
  2. 使用多視窗燃盡率警示,而非單一視窗 — 為何單一視窗會因雜訊而觸發,請參閱 references/slo.md § Multi-window burn-rate alerts
  3. 使用 references/slo.md § Validating SLO config 中的 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 § Contact point receiver types

通知原則

含標籤比對器的階層式路由樹:

# 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,但嚴重時 page
      - 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")'

警示規則狀態

狀態 說明
Normal 條件未符合
Pending 條件符合,等待 for 持續時間
Firing 條件符合完整 for 持續時間
NoData 查詢未回傳資料
Error 查詢/評估錯誤
Recovering 原本觸發中,條件已不再符合

佈建目錄結構

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 路由 + 驗證 + 常見失敗模式