Prometheus集成¶
Prometheus是由SoundCloud开发的开源监控报警系统和时序列数据库(TSDB)。Prometheus使用Go语言开发,是Google BorgMon监控系统的开源版本。
Prometheus集成CA¶
睿象云Cloud Alert提供2种方式,实现与Prometheus的对接:
- Webhook方式;
- 兼容PagerDuty方式。
Webhook方式¶
-
集成原理:将 Prometheus 告警信息通过 webhook 方式通知 Cloud Alert,然后 Cloud Alert 将收到的告警信息分派给合适的人,并且实现电话、短信、微信、邮件等多种告警方式通知到成员。
-
配置过程
-
创建应用
在CA界面创建Prometheus应用,并获取 appkey 和 回调 URL 。
-
修改 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
-
重新启动
alertmanager
模块,并加载该配置文件。
-
兼容 PagerDuty 方式¶
-
集成原理:Cloud Alert 提供兼容 PagerDuty 的接口集成方式,然后 Cloud Alert 将收到的告警信息分派给合适的人。
-
配置过程
-
创建应用
在CA界面创建Prometheus应用,并获取 appkey
-
支持alertmanager 0.10及以上版本,在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/v2'
-
设置应用 key,在对应的 receivers 设置,由于 alertmanager 默认的是 team-X-mails,可以在此基础上修改
receivers: - name: 'team-X-mails' pagerduty_configs: - routing_key: {appKey} url: 'http://api.aiops.com/alert/api/event/pagerduty/v2'
-
重启 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方式集成¶
排查步骤:
-
请确认配置内容中 url 正确,请直接复制应用配置页面内容。修改 alertmanager 模块的配置文件,通过 webhook 方式通知 Cloud Alert,编辑告警的配置文件,新增以下内容。
-
请确认是否启动 alertmanager 模块,并加载该配置文件。
-
请确认网络是否正常,能否 ping 通 api.aiops.com。
-
请确认您在 Prometheus 上配置的规则是否正确,是否能够匹配到
team-X-pager
。
兼容 PagerDuty 方式集成¶
Prometheus 的告警消息顺序为:Prometheus -> Alertmanager -> Cloud Alert。所以我们需要通过排查是否是以上三个环节出现问题。
排查步骤:
-
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"
-
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 并不会一直触发外送消息,有一个积累的过程。特别是老告警,是不会推送的。所以建议通过制造新的测试告警
-
制造新的测试告警
在 Prometheus 中设置新的告警(以前没有发生过),如果告警已经发生过,则需要修改告警规则,包括名称,条件都可以。
在 Prometheus 中
Alerts
查看新告警之后通过 Alertmanager 界面上看有没有新告警,注意可以通过 receiver 过滤对应的接收者,如果配置了
team-X-mails
,那么别的告警是不会推送给 Cloud Alert 的。 -
未集成CA前的历史告警的恢复消息 Cloud Alert 不会处理
Cloud Alert 处理告警的顺序是,trigger(active)-> resolve(resolved)。如果是 resolve 事件先过来,那么该事件会被忽略掉。
Prometheus与CA告警级别映射关系¶
睿象云 | promethus(severity) |
---|---|
致命 | critical |
严重 | error |
警告 | warn |
提醒 | |
通知 | info |
Prometheus与CA字段映射关系¶
prometheus
prometheus | CA 显示字段 |
---|---|
labels | alertname |
事件ID (eventId) | MD5(labels) |
以上是Prometheus告警配置中集成的步骤。