本文介紹如何將開源Alertmanager路由規則導入為ARMS告警管理的通知策略。

背景信息

開源Alertmanager作為一款優秀的告警通知組件,在Prometheus開源監控解決方案中是必不可失的一環。它靈活的路由、靜默、分組能力可以更合理地發送告警通知。但開源Alertmanager同時也存在一些缺陷。例如默認缺少短信、電話的通知能力;缺少告警處理能力,不能閉環告警;缺少和云的打通能力,難以構建統一告警平臺,只能作為告警中轉站。

ARMS告警管理作為統一告警平臺,能夠在覆蓋Alertmanager各種能力的同時,接入更多的告警,統一維護。同時ARMS告警管理生長在云上,和云上的各類系統天然打通,非常適合構建統一告警中心。本文主要介紹如何快速將配置在Alertmanager的路由、分組、靜默等規則同步到ARMS告警管理中。

實體映射關系說明

  • 路由(route) 映射為通知策略(link)。
  • match映射為分派條件中的等于條件。
  • match_re映射為分派條件中的正則匹配條件。
  • group_by映射為分組條件,子路由如果沒有分組條件,則繼承父路由的分組條件。

限制說明

  • 無法同步聯系人Receivers,郵件、Webhook、釘釘、PagerDuty等配置無法同步。
  • 開源Alertmanager的路由規則是樹狀結構的,ARMS告警管理僅支持一級路由。
  • 開源Alertmanager支持continue字段,ARMS告警管理中continue默認為true,且不可修改。
    # 開源配置示例:
    # The root node of the routing tree.
    route:
    # Whether an alert should continue matching subsequent sibling nodes.
    [ continue: <boolean> | default = false ]
  • 支持matchmatch_re,不支持matchers。
    # A set of equality matchers an alert has to fulfill to match the node.
    match:
      [ <labelname>: <labelvalue>, ... ]
    
    # A set of regex-matchers an alert has to fulfill to match the node.
    match_re:
      [ <labelname>: <regex>, ... ]
    # 不支持matchers
    # A list of matchers that an alert has to fulfill to match the node.
    matchers:
      [ - <matcher> ... ]
  • 根路由不能導入為通知策略。
  • 由于路由沒有名稱,在導入ARMS告警管理后會隨機生成通知策略的名稱。
  • 不支持抑制策略導入inhibit_rules。
  • 導入后生成的通知策略不支持修改分派條件。
  • 導入是不冪等的,重復導入會導致生成多條通知策略。

操作步驟

  1. 獲取開源Alertmanager配置。
    示例如下:
    global:
      smtp_smarthost: 'localhost:25'
      smtp_from: 'alertmanager@example.org'
      smtp_auth_username: 'alertmanager'
      smtp_auth_password: 'password'
    
    templates:
    - '/etc/alertmanager/template/*.tmpl'
    
    # The root route on which each incoming alert enters.
    route:
      group_by: ['alertname', 'cluster', 'service']
      group_wait: 30s
      group_interval: 5m
      repeat_interval: 3h
      receiver: team-X-mails
      routes:
      - match_re:
          service: "foo1|foo2|baz"
        receiver: team-X-mails
        routes:
        - match:
            severity: "critical"
          receiver: team-X-pager
      - match:
          service: "files"
        receiver: team-Y-mails
        routes:
        - match:
            severity: "critical"
          receiver: team-Y-pager
      - match:
          service: "database"
        receiver: team-DB-pager
        group_by: [alertname, cluster, database]
        routes:
        - match:
            owner: "team-X"
          receiver: team-X-pager
          continue: true
        - match:
            owner: "team-Y"
          receiver: team-Y-pager
    
    inhibit_rules:
    - source_matchers: [ severity="critical" ]
      target_matchers: [ severity="warning" ]
      equal: [ alertname, cluster, service ]
    
    
    receivers:
    - name: 'team-X-mails'
      email_configs:
      - to: 'team-X+alerts@example.org'
    
    - name: 'team-X-pager'
      email_configs:
      - to: 'team-X+alerts-critical@example.org'
      pagerduty_configs:
      - service_key: <team-X-key>
    
    - name: 'team-Y-mails'
      email_configs:
      - to: 'team-Y+alerts@example.org'
    
    - name: 'team-Y-pager'
      pagerduty_configs:
      - service_key: <team-Y-key>
    
    - name: 'team-DB-pager'
      pagerduty_configs:
      - service_key: <team-DB-key>
  2. ARMS控制臺告警管理 > 通知策略頁面的通知策略列表區域,單擊導入
  3. 通知策略導入對話框中粘貼步驟1中獲取的路由規則,然后單擊保存
    等待一段時間后,即可查看已導入的通知策略。