跳转至

Prometheus集成

Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。


Prometheus集成CA

CA提供2种方式,实现与Prometheus的对接:

  1. Webhook方式;
  2. 兼容PagerDuty方式。

Webhook方式

  • 集成原理:将 Prometheus 告警信息通过 webhook 方式通知 Cloud Alert,然后 Cloud Alert 将收到的告警信息分派给合适的人,并且实现电话、短信、微信、邮件等多种告警方式通知到成员。

  • 配置过程

    1. 创建应用

      在CA界面创建Prometheus应用,并获取 appkey 回调 URL

    2. 修改 Prometheus 中 alertmanager 模块的配置文件,通过 webhook 方式通知 Cloud Alert,编辑告警的配置文件,新增以下内容。

      receivers:
      - name: 'team-X-pager'
        webhook_configs:
        - url: 'http://api.aiops.com/alert/api/event/prometheus/--'  --处填入您新建应用时生成的appkey 
          send_resolved: true
      
    3. 重新启动 alertmanager 模块,并加载该配置文件。


兼容 PagerDuty 方式

  • 集成原理:Cloud Alert 提供兼容 PagerDuty 的接口集成方式,然后 Cloud Alert 将收到的告警信息分派给合适的人。

  • 配置过程

    1. 创建应用

      在CA界面创建Prometheus应用,并获取 appkey

    2. 在 alertmanager 的配置文件 *.yml 中将默认的 PagerDuty 接口地址更改为 Cloud Alert 兼容接口地址

      global:
      # The smarthost and SMTP sender used for mail notifications.
      # Alternative host for Hipchat.
      hipchat_url: 'https://hipchat.foobar.org/'
      pagerduty_url: 'http://api.aiops.com/alert/api/event/pagerduty'
      
    3. 设置应用 key,在对应的 receivers 设置,由于 alertmanager 默认的是 team-X-mails,可以在此基础上修改

      receivers:
      - name: 'team-X-mails'
        pagerduty_configs:
        - service_key: '--'  --处填入您新建应用时生成的appkey 
        email_configs:
        - to: 'team-X+alerts@example.org'
      
    4. 重启 alertmanager

      建议开启 alertmanager 的日志 –log.level=debug,观察发送消息。

      ./alertmanager -config.file=simple.yml -web.external-
      url=http://your.domain.com:9093/ -log.level=debug
      

      当出现 flushing、notify 等信息时,说明 alertmanager 成功触发消息。

      DEBU[0372] flushing
      [go_memstats_alloc_bytes_gt[3399c28][resolved]]
      aggrGroup={}:{alertname="go_memstats_alloc_bytes_gt"}
      source="dispatch.go:428"
      DEBU[0372] notifying PagerDuty
      

集成后收不到告警排错方法

根据集成方式不同,排错方法也不同:

webhook方式集成

排查步骤:

  1. 请确认配置内容中 url 正确,请直接复制应用配置页面内容。修改 alertmanager 模块的配置文件,通过 webhook 方式通知 Cloud Alert,编辑告警的配置文件,新增以下内容。

  2. 请确认是否启动 alertmanager 模块,并加载该配置文件。

  3. 请确认网络是否正常,能否 ping 通 api.aiops.com。

  4. 请确认您在 Prometheus 上配置的规则是否正确,是否能够匹配到 team-X-pager


兼容 PagerDuty 方式集成

Prometheus 的告警消息顺序为:Prometheus -> Alertmanager -> Cloud Alert。所以我们需要通过排查是否是以上三个环节出现问题。

排查步骤:

  1. Prometheus 是否启用告警推送至 Alertmanager

    需要启动 Prometheus 时,加入 alertmananger.url 参数,例如:

    ./prometheus    -config.file=prometheus.yml 
    alertmanager.url=http://your.alertmanager.domain.com:9093
    web.external-url=http://your.prometheus.domain.com:9090/ 
    log.level=debug
    

    如果 Prometheus 连接不上 Alertmanager,那么就会报错:

    ERRO[0651]    Error    sending    alerts:     Post 
    http://localhost:9093/api/v1/alerts:  dial tcp 127.0.0.1:9093: 
    getsockopt:   connection   refused  
    alertmanager="http://localhost:9093/api/v1/alerts"  count=1 
    source="notifier.go:379"
    
  2. Alertmanager 是否接收到告警信息

    修改配置后需要重启,建议启动 debug 模式 -log.level=debug

    ./alertmanager   -config.file=simple.yml   -web.external
    url=http://your.alertmanager.com:9093/ -log.level=debug
    

    当出现 flushing、notify 等信息时,说明 alertmanager 成功触发消息。

    DEBU[1032] Received alert
    alert=go_memstats_frees_total_gt[fd66490][active] 
    component=dispatcher source="dispatch.go:186"
    DEBU[1032] Received alert
    alert=go_memstats_alloc_bytes_gt[3399c28][active] 
    component=dispatcher source="dispatch.go:186"
    DEBU[1032] flushing [go_memstats_alloc_bytes_gt[3399c28][active]]  
    aggrGroup={}:{alertname="go_memstats_alloc_bytes_gt"} 
    source="dispatch.go:428"
    DEBU[1032] notifying PagerDuty
    eventType=trigger 
    incident="{}:{alertname="go_memstats_alloc_bytes_gt"}" 
    source="impl.go:466"
    

    提示

    Alertmanager 并不会一直触发外送消息,有一个积累的过程。特别是老告警,是不会推送的。所以建议通过制造新的测试告警

  3. 制造新的测试告警

    在 Prometheus 中设置新的告警(以前没有发生过),如果告警已经发生过,则需要修改告警规则,包括名称,条件都可以。

    在 Prometheus 中 Alerts 查看新告警

    之后通过 Alertmanager 界面上看有没有新告警,注意可以通过 receiver 过滤对应的接收者,如果配置了 team-X-mails,那么别的告警是不会推送给 Cloud Alert 的。

  4. 未集成CA前的历史告警的恢复消息 Cloud Alert 不会处理

    Cloud Alert 处理告警的顺序是,trigger(active)-> resolve(resolved)。如果是 resolve 事件先过来,那么该事件会被忽略掉。


Prometheus与CA告警级别映射关系

Prometheus 级别状态 参数值 Cloud Alert 级别状态
critical&error 3 严重
warn 2 警告
info&email 1 提醒

prometheus与CA字段映射关系

prometheus

prometheus prometheus 字段 CA 显示字段
labels alertname