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