@zhangyy
2020-09-16T03:05:20.000000Z
字数 2972
阅读 362
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.gzmv alertmanager-0.21.0.linux-amd64 /usr/local/alertmanagervim /usr/local/alertmanager/alertmanager.yml
global:resolve_timeout: 5msmtp_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: falseroute:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 10mreceiver: '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配置文件复制到对话框,然后点击"DrawRouting 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=120hRestart=on-failure[Install]WantedBy=multi-user.target----chmod +x /usr/lib/systemd/system/alertmanager.service
service alertmanager startchkconfig alertmanager onnetstat -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

