本文介绍如何将开源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 ]
  • 支持match和match_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中获取的路由规则,然后单击保存
    等待一段时间后,即可查看已导入的通知策略。