![91b520050328e8a29f046b63b76deb8f.png](https://i-blog.csdnimg.cn/blog_migrate/cbd8997be9cbefcd1b690df5fb7c9c0d.jpeg)
![75cda5cdd28fc87c95ccc6fc99fc896b.png](https://i-blog.csdnimg.cn/blog_migrate/82bed5851fe618c57d8ec29972a06dff.jpeg)
1. 告警方式
1.1. Prometheus 告警介绍
与Zabbix告警不同,Prometheus将告警分为两个部分:Prometheus 和 Alertmanager。其中Prometheus配置告警触发规则,对指标进行监控和计算,将再将告警信息发送到Alertmanager中。Alertmanager对告警进行管理,比如合并抑制等操作。
![97271bf8fc5819e01ae8a7a43791dd78.png](https://i-blog.csdnimg.cn/blog_migrate/f309c5a3316247280edf03c6a8d94353.png)
1.2. AlertManager介绍
Alertmanager处理由客户端应用程序(例如Prometheus服务器)发送的警报。它负责将重复数据删除,分组和路由到正确的接收者,通知方式有电子邮件、短信、微信等。它还负责沉默和禁止警报。Altermanager有以下几个功能点
- 分组
当机房网络故障时,或者机房断电时,会突然有大量相同的告警出现,此时就需要对告警进行分组聚合,整合成少量告警发出。每个告警信息中会列出受影响的服务或者机器。
- 抑制(Inhibition)
当集群故障时,会引发一系列告警,此时只需要通知集群故障,其它因为集群故障引起的告警应该被抑制,避免干扰判断。
- 静默(Silences)
当集群升级、服务更新的过程中,大概率导致告警。因此在升级期间,对这些告警进行静默,不再发送相关告警。
2. 告警相关配置
2.1. altermanager配置文件
2.1.1. 全局配置
# global 指定了默认的接收者配置项
global:
# 默认smtp 配置项,如果recivers中没有配置则采用全局配置项
[ smtp_from: <tmpl_string> ]
[ smtp_smarthost: <string> ]
[ smtp_hello: <string> | default = "localhost" ]
[ smtp_auth_username: <string> ]
[ smtp_auth_password: <secret> ]
[ smtp_auth_identity: <string> ]
[ smtp_auth_secret: <secret> ]
[ smtp_require_tls: <bool> | default = true ]
# 企业微信告警配置
[ wechat_api_url: <string> | default = "https://qyapi.weixin.qq.com/cgi-bin/" ]
[ wechat_api_secret: <secret> ]
[ wechat_api_corp_id: <string> ]
# 默认http客户端配置,不推荐配置。参考官方文档: https://prometheus.io/docs/alerting/latest/clients/
[ http_config: <http_config> ]
# 如果警报不包含EndsAt,则ResolveTimeout是Alertmanager使用的默认值,经过此时间后,如果尚未更新,则可以将警报声明为已解决。
# 这对Prometheus的警报没有影响,因为它们始终包含EndsAt。
[ resolve_timeout: <duration> | default = 5m ]
# 定义通知模板,最好一个列表元素可以使用Linux通配符,如 *.tmpl
templates:
[ - <filepath> ... ]
# 定义路由
route: <route>
# 定义通知的接收者
receivers:
- <receiver> ...
# 告警抑制规则
inhibit_rules:
[ - <inhibit_rule> ... ]
2.1.2. 路由配置
每个警报都会在已配置的顶级路由处进入路由树,该路由树必须与所有警报匹配(即没有任何已配置的匹配器)。然后遍历子节点。如果将continue设置为false,它将在第一个匹配的子项之后停止。如果在匹配的节点上true为true,则警报将继续与后续的同级进行匹配。如果警报与节点的任何子节点都不匹配(不匹配的子节点或不存在子节点),则根据当前节点的配置参数来处理警报。
# 告警接收者
[ receiver: <string> ]
# 告警根据标签进行分组,相同标签的作为一组进行聚合,发送单条告警信息。特殊值 '...' 表示告警不聚合
[ group_by: '[' <labelname>, ... ']' ]
# 告警是否匹后续的同级节点,如果为true还会继续进行规则匹配,否则匹配成功就截止
[ continue: <boolean> | default = false ]
# 报警必须匹配到labelname,否则无法匹配到该组路由,一般用于发送给不同联系人时使用
match:
[ <labelname>: <labelvalue>, ... ]
match_re:
[ <labelname>: <regex>, ... ]
# 第一次发送当前group报警等待的时间,目的是实现同组告警的聚合
[ group_wait: <duration> | default = 30s ]
# 当上一次group告警发送成功后,改组又出现新的告警,那么等待多久再发送,一般设置为5分钟或者更久
[ group_interval: <duration> | default = 5m ]
# 已经发送成功的告警