[关闭]
@zhangyy 2020-09-16T11:05:20.000000Z 字数 2972 阅读 146

Prometheus监控实战(三)

Prometheus系列



一:Alertmanager使用

  1. Prometheus发出告警时分为两部分。首先,Prometheus按告警规则(rule_files配置块)向
  2. Alertmanager发送告警(即告警规则是在Prometheus上定义的)。然后,由Alertmanager
  3. 来管理这些告警,包括去重(Deduplicating)、分组(Grouping)、静音(silencing)、抑制
  4. (inhibition)、聚合(aggregation ),最终将面要发出的告警通过电子邮件、webhook等方式
  5. 将告警通知路由(route)给对应的联系人。
  6. 分组:就是将具有相同性质的告警先分类,然后当作单个通知发送出来。比如AB两台主机
  7. 的磁盘(CPU/内存)使用率都在告警,则磁盘的告警就可以合并在一个通知中发送出来。可以想
  8. 像某个服务部署了100个节点,在一次升版后因为bug,日志中均报同样一类错误,如果不合
  9. 并这类通知,那就是告警风暴。
  10. 抑制:就是某些告警触发后,则抑制(禁止)另一些告警。比如收到一条告警提示集群故障无
  11. 法访问,那么在该集群上的所有其他警告应该被抑制。
  12. 静音(默):将某些在预期内的告警设置为静默(即不发送告警)。静默是基于配置匹配规则。
  13. Alertmanager会检查从Prometheus推送过来的告警事件,看这些告警事件是否与配置的静
  14. 默规则能匹配上,如果匹配则不发送任何通知。配置静默方法是在AlertmanagerWeb界面
  15. 中,也可以使用amtool工具。
  16. 总之:Alertmanager制定这一系列规则目的只有一个,就是提高告警质量。
  17. 配置Alertmanager来做告警通知主要分三个步骤:

二:Alermanager 的安装

  1. tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz
  2. mv alertmanager-0.21.0.linux-amd64 /usr/local/alertmanager
  3. vim /usr/local/alertmanager/alertmanager.yml

  1. global:
  2. resolve_timeout: 5m
  3. smtp_smarthost: 'smtp.163.com:25'
  4. smtp_from: 'flyfish_2012@163.com'
  5. smtp_auth_username: 'flyfish_2012@163.com'
  6. smtp_auth_password: '123.com'
  7. smtp_require_tls: false
  8. route:
  9. group_by: ['alertname']
  10. group_wait: 10s
  11. group_interval: 10s
  12. repeat_interval: 10m
  13. receiver: 'email'
  14. receivers:
  15. - name: 'email'
  16. email_configs:
  17. - to: '644767953@qq.com'
  18. inhibit_rules:
  19. - source_match:
  20. severity: 'critical'
  21. target_match:
  22. severity: 'warning'
  23. equal: ['alertname', 'dev', 'instance']

  1. ./amtool check-config alertmanager.yml

image_1eia9a9oi1oih1rdmr751aeb1mss9.png-56kB

  1. alertmanager配置简要说明:
  2. global:全局配置,主要配置告警方式,如邮件、webhook等。
  3. routePrometheus的告警先是到达alertmanager的根路由(route),alertmanager的根路
  4. 由不能包含任何匹配项,因为根路由是所有告警的入口点。另外,根路由需要配置一个接收器
  5. (receiver),用来处理那些没有匹配到任何子路由的告警(如果没有配置子路由,则全部由根
  6. 路由发送告警),即缺省接收器。告警进入到根route后开始遍历子route节点,如果匹配到,
  7. 则将告警发送到该子route定义的receiver中,然后就停止匹配了。因为在routecontinue
  8. 认为false,如果continuetrue,则告警会继续进行后续子route匹配。如果当前告警仍匹配
  9. 不到任何的子route,则该告警将从其上一级(匹配)route或者根route发出(按最后匹配到的
  10. 规则发出邮件)。
  11. group_by:用于分组聚合,对告警通知按标签(label)进行分组,将具有相同标签或相同告警
  12. 名称(alertname)的告警通知聚合在一个组,然后作为一个通知发送。如果想完全禁用聚合,
  13. 可以设置为group_by: [...]
  14. group_wait: 当一个新的告警组被创建时,需要等待'group_wait'后才发送初始通知。这样可
  15. 以确保在发送等待前能聚合更多具有相同标签的告警,最后合并为一个通知发送。
  16. group_interval: 当第一次告警通知发出后,在新的评估周期内又收到了该分组最新的告警,
  17. 则需等待'group_interval'时间后,开始发送为该组触发的新告警,可以简单理解为,group
  18. 就相当于一个通道(channel)。
  19. repeat_interval: 告警通知成功发送后,若问题一直未恢复,需再次重复发送的间隔。
  20. 查看你的告警路由树,将alertmanager.yml配置文件复制到对话框,然后点击"Draw
  21. Routing Tree"
  22. https://www.prometheus.io/webtools/alerting/routing-tree-editor/

  1. vim /usr/lib/systemd/system/alertmanager.service
  2. -----
  3. [Unit]
  4. Description=alertmanager
  5. [Service]
  6. 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
  7. Restart=on-failure
  8. [Install]
  9. WantedBy=multi-user.target
  10. ----
  11. chmod +x /usr/lib/systemd/system/alertmanager.service

  1. service alertmanager start
  2. chkconfig alertmanager on
  3. netstat -nultp |grep 9093

image_1eia9l5bh17703mp1oj7tin1odam.png-199.8kB

---

  1. 修改prometheus的配置,关联Alertmanager服务,同时添加对alertmanager的监控
  2. rule_files:
  3. - "first_rules.yml"
  4. - "second_rules.yml"
  5. .......
  6. - job_name: 'alertmanager'
  7. static_configs:
  8. - targets: ['node04.flyfish:9093']
  9. labels:
  10. app: node04

image_1eiaacc521l8nnn21itr371139813.png-66.1kB


添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注