alertmanager详解
https://blog.csdn.net/u014029783/article/details/80654727
# alertmanager发送告警阶段
在第一个阶段Silence中,Alertmanager会判断当前通知是否匹配到任何的静默规则,如果没有则进入下一个阶段,否则则中断流水线不发送通知。
在第二个阶段Wait中,Alertmanager会根据当前Alertmanager在集群中所在的顺序(index)等待index * 5s的时间。
当前Alertmanager等待阶段结束后,Dedup阶段则会判断当前Alertmanager数据库中该通知是否已经发送,如果已经发送则中断流水线,不发送告警,否则则进入下一阶段Send对外发送告警通知。
告警发送完成后该Alertmanager进入最后一个阶段Gossip,Gossip会通知其他Alertmanager实例当前告警已经发送。其他实例接收到Gossip消息后,则会在自己的数据库中保存该通知已发送的记录。
配置和启动
# --web.external-url 显示配置邮件跳转链接地址
./alertmanager --web.external-url='http://ip:9093/'
# dockerfile: https://hub.docker.com/r/prom/alertmanager/dockerfile
ENTRYPOINT [ "/bin/alertmanager" ] CMD [ "--config.file=/etc/alertmanager/alertmanager.yml", \ "--storage.path=/alertmanager" ] "--web.external-url='http://ip:32093/'" ]
# 检查告警规则
go get github.com/prometheus/prometheus/cmd/promtool
promtool check rules /path/to/example.rules.yml
# 热重启:
curl -XPOST http://ip:9093/-/reload
# curl调试
1、构造post数据
aa='[ { "albels":{ "alertname": "DIST11", "dev":"sdf1", }, "annotations":{ "info": "the disk ad1 is running full" "summary": "please check the instance example1" } } ]'
2、上传数据到alertmanager服务器:curl http://ip:9093/api/v1/alerts -XPOST -d"$aa"
# 发送多个渠道
global: resolve_timeout: 5m route: receiver: 'default-receiver' group_by: - alertname group_wait: 10s group_interval: 10s repeat_interval: 1h routes: - receiver: 'ops-receiver' match: way: ops # grafanad 自定义tag - receiver: 'smn-receiver' match: way: smn # grafanad 自定义tag inhibit_rules: - source_match: severity: critical target_match: severity: warning equal: - alertname - dev - instance receivers: - name: default-receiver webhook_configs: - url: http://ip:5001/test - name: ops-receiver webhook_configs: - url: http://ip:5001/ops - name: smn-receiver webhook_configs: - url: http://ip:5001/smn