@zhangyy
2020-09-16T11:05:20.000000Z
字数 2972
阅读 144
Prometheus系列
Prometheus发出告警时分为两部分。首先,Prometheus按告警规则(rule_files配置块)向
Alertmanager发送告警(即告警规则是在Prometheus上定义的)。然后,由Alertmanager
来管理这些告警,包括去重(Deduplicating)、分组(Grouping)、静音(silencing)、抑制
(inhibition)、聚合(aggregation ),最终将面要发出的告警通过电子邮件、webhook等方式
将告警通知路由(route)给对应的联系人。
分组:就是将具有相同性质的告警先分类,然后当作单个通知发送出来。比如A和B两台主机
的磁盘(CPU/内存)使用率都在告警,则磁盘的告警就可以合并在一个通知中发送出来。可以想
像某个服务部署了100个节点,在一次升版后因为bug,日志中均报同样一类错误,如果不合
并这类通知,那就是告警风暴。
抑制:就是某些告警触发后,则抑制(禁止)另一些告警。比如收到一条告警提示集群故障无
法访问,那么在该集群上的所有其他警告应该被抑制。
静音(默):将某些在预期内的告警设置为静默(即不发送告警)。静默是基于配置匹配规则。
Alertmanager会检查从Prometheus推送过来的告警事件,看这些告警事件是否与配置的静
默规则能匹配上,如果匹配则不发送任何通知。配置静默方法是在Alertmanager的Web界面
中,也可以使用amtool工具。
总之:Alertmanager制定这一系列规则目的只有一个,就是提高告警质量。
配置Alertmanager来做告警通知主要分三个步骤:
tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz
mv alertmanager-0.21.0.linux-amd64 /usr/local/alertmanager
vim /usr/local/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m
smtp_smarthost: 'smtp.163.com:25'
smtp_from: 'flyfish_2012@163.com'
smtp_auth_username: 'flyfish_2012@163.com'
smtp_auth_password: '123.com'
smtp_require_tls: false
route:
group_by: ['alertname']
group_wait: 10s
group_interval: 10s
repeat_interval: 10m
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '644767953@qq.com'
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
./amtool check-config alertmanager.yml
alertmanager配置简要说明:
global:全局配置,主要配置告警方式,如邮件、webhook等。
route:Prometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路
由不能包含任何匹配项,因为根路由是所有告警的入口点。另外,根路由需要配置一个接收器
(receiver),用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根
路由发送告警),即缺省接收器。告警进入到根route后开始遍历子route节点,如果匹配到,
则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在route中continue默
认为false,如果continue为true,则告警会继续进行后续子route匹配。如果当前告警仍匹配
不到任何的子route,则该告警将从其上一级(匹配)route或者根route发出(按最后匹配到的
规则发出邮件)。
group_by:用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警
名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,
可以设置为group_by: [...]
group_wait: 当一个新的告警组被创建时,需要等待'group_wait'后才发送初始通知。这样可
以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。
group_interval: 当第一次告警通知发出后,在新的评估周期内又收到了该分组最新的告警,
则需等待'group_interval'时间后,开始发送为该组触发的新告警,可以简单理解为,group
就相当于一个通道(channel)。
repeat_interval: 告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。
查看你的告警路由树,将alertmanager.yml配置文件复制到对话框,然后点击"Draw
Routing Tree"
https://www.prometheus.io/webtools/alerting/routing-tree-editor/
vim /usr/lib/systemd/system/alertmanager.service
-----
[Unit]
Description=alertmanager
[Service]
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml --storage.path=/usr/local/alertmanager/data --web.listen-address=:9093 --data.retention=120h
Restart=on-failure
[Install]
WantedBy=multi-user.target
----
chmod +x /usr/lib/systemd/system/alertmanager.service
service alertmanager start
chkconfig alertmanager on
netstat -nultp |grep 9093
修改prometheus的配置,关联Alertmanager服务,同时添加对alertmanager的监控
rule_files:
- "first_rules.yml"
- "second_rules.yml"
.......
- job_name: 'alertmanager'
static_configs:
- targets: ['node04.flyfish:9093']
labels:
app: node04