AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户。
在prometheus中的角色:
对于告警,最简单的原则是来一次告警就发一次,这样会有大量重复且不必要的告警,漏掉重要的告警。
场景:
- 正在发布,有服务的重启,不想在这段时间进行告警
- 有些告警是由另一个告警引起,只想对最高级的错误进行告警
- 类型相同的错误归集到一起告警
- 一个类型的告警不重复发送,隔一段时间
- 不同的告警发给不同的人
缺点:无法动态配置
告警过程:
Prometheus->PromQL触发阈值->超出持续时间->alertmanager->分组|抑制|静默|route->媒体类型->邮件|钉钉|微信|web_hook等
特性:
- 分组:类型相同的告警会被合并为一个通知。避免一次性加收大量通知。
- 抑制:当警报发出后,停止重复发送由此警报引发的其他警报。可以消除冗余告警。
- 静默:是一种简单的特定时间静音的机制。例如:服务器要升级维护可以先设置这个时间段告警静默。
目的:避免重复告警而漏掉重要的报警,也避免漏报。
自定义规则文件,由prometheus定时扫描,包括:
- expr: PromQL
- for: 1m # 告警持续时间,超过这个时间才会发送给alertmanager
- labels:自定义标签,发往alertmanager
Prometheus可查看规则的触发状态:inactive(正常),pending(规则触发但还未发往alertmanager),firing(已发往alertmanager,告警持续了for时间)
配置:
- 全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容;
- 模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等;
- 告警路由(route):根据标签匹配,确定当前告警应该如何处理;
- 接收人(receivers):接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用;
- 抑制规则(inhibit_rules):合理设置抑制规则可以减少垃圾告警的产生group_by: ['alertname'] # 采用哪个标签来作为分组依据
重要的参数:
- group_wait: 10s # 分组报警等待时间,聚合相同组的报警
- group_interval: 10s # 发送组告警间隔时间(组不同,如CPU_DOWN和MEMOPRY_OUT,发送的间隔时间为group_interval)
- repeat_interval: 1h # 重复告警发送间隔时间(相同组,如CPU_DOWN重复发的化,需要等repeat_interval的时间)
在项目中的使用:
- Alertmanager通过web_hook方式告警,配置basic auth
- 提供短信告警接口,并校验basic auth
告警规则在prometheus中设置,可在rules画面中查看:
这里在rules中通过label配置告警人的联系方式,方便告警接口使用进行告警
alertmanager画面可查看当前有哪些被触发,可对告警组进行静默
可查看告警方式配置,这里采用web_hook的方式
也可以自己写http请求发送至alertmanager,帮助我们更合理地告警,不必捆绑prometheus。后续计划使用flink对网关交易进行监控,如果有异常交易,发送http请求至alertmanager,由alertmanager决定是否告警及何时告警。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。