一、Alertmanager简介

Prometheus是一个划分平台,metrics的收集和存储与警报是分开的,警报是由Alertmanager负责,这是监控环境的独立部分。警报的规则是在Prometheus server上进行定义的,这些规则可以触发时间,然后将其传到alertmanager,alertmanager随后决定如何处理各自的警报,处理复制之类的问题,并决定在发送警报时使用什么机制:实时消息、电子邮件或者是其他钉钉、微信等工具。

二、Alertmanager部署

Alertmanager默认监听9093端口,集群接听端口9094。

  1. # 下载
  2. [root@prometheus ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.20.0-rc.0/alertmanager-0.20.0-rc.0.linux-amd64.tar.gz
  3. # 解压
  4. [root@prometheus ~]# tar -zxf alertmanager-0.20.0-rc.0.linux-amd64.tar.gz -C /usr/local/
  5. [root@prometheus ~]# mv /usr/local/alertmanager-0.20.0-rc.0.linux-amd64 /usr/local/alertmanager-0.20.0
  6. [root@prometheus ~]# ln -sv /usr/local/alertmanager-0.20.0 /usr/local/alertmanager
  7. # 运行
  8. [root@prometheus ~]# ln -sv /usr/local/alertmanager/alertmanager /usr/local/bin/
  9. [root@prometheus ~]# alertmanager &
  10. [root@prometheus ~]# netstat -tulnp |grep alert
  11. tcp6 0 0 :::9093 :::* LISTEN 41194/alertmanager
  12. tcp6 0 0 :::9094 :::* LISTEN 41194/alertmanager
  13. udp6 0 0 :::9094 :::* 41194/alertmanager

访问http://:9093即可访问alertmanager的web界面,如下:

三、Alertmanager配置

Alertmanager的配置有两个地方,一个是在Prometheus server端进行配置告警节点,指定匹配告警规则文件路径,以及监控alertmanager本身。另一个直接配置alertmanager自身的配置,在alertmanager.yml进行配置。

  1. [root@prometheus alertmanager]# cat /usr/local/prometheus/prometheus.yml
  2. ...
  3. # Alertmanager configuration
  4. alerting:
  5. alertmanagers:
  6. - static_configs:
  7. - targets:
  8. - 192.168.0.143:9093 #配置alertmanager节点列表
  9. rule_files:
  10. - "rules/*_rules.yml" #指定规则文件
  11. # - "rules/*_alert.yml"
  12. scrape_configs:
  13. ......
  14. - job_name: 'alertmanager' #指定监控任务alertmanager
  15. static_configs:
  16. - targets: ['192.168.0.143:9093']

添加完成后,在prometheus server的web端可以查看到alertmanager的targets列表,如下:

配置完成prometheus.yml后,再来看看默认的alertmanager.yml的介绍,如下:

  1. [root@prometheus alertmanager]# cat alertmanager.yml
  2. global:
  3. resolve_timeout: 5m #处理超时时间,默认为5min
  4. route:
  5. group_by: ['alertname'] # 报警分组依据
  6. group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
  7. group_interval: 10s # 在发送新警报前的等待时间
  8. repeat_interval: 1h # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
  9. receiver: 'web.hook' # 发送警报的接收者的名称,以下receivers name的名称
  10. receivers:
  11. - name: 'web.hook' # 警报
  12. webhook_configs: # webhook配置
  13. - url: 'http://192.168.0.143:5001/'
  14. inhibit_rules: # 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。
  15. - source_match:
  16. severity: 'critical'
  17. target_match:
  18. severity: 'warning'
  19. equal: ['alertname', 'dev', 'instance']
  • global: 全局配置,包括报警解决后的超时时间、SMTP 相关配置、各种渠道通知的 API 地址等等。

  • route: 用来设置报警的分发策略,它是一个树状结构,按照深度优先从左向右的顺序进行匹配。

  • receivers: 配置告警消息接受者信息,例如常用的 email、wechat、slack、webhook 等消息通知方式。

  • inhibit_rules: 抑制规则配置,当存在与另一组匹配的警报(源)时,抑制规则将禁用与一组匹配的警报(目标)。

四、自定义告警规则和发送

在prometheus.yml中创建规则文件,进行监控node02主机的node_exporter是否存活,并发送告警信息如下:

  1. [root@prometheus prometheus]# pwd
  2. /usr/local/prometheus
  3. [root@prometheus prometheus]# mkdir rules
  4. [root@prometheus rules]# vim node_rules.yml
  5. groups:
  6. - name: node-up # 分组名称
  7. rules: # 规则设置
  8. - alert: node-up #告警名称
  9. expr: up{job="node02"} == 0 # 表达式,查询式语句查询up的值是否等于0,如果等于则告警
  10. for: 15s # 告警持续时间
  11. labels:
  12. severity: 1
  13. team: node
  14. annotations: # 注解
  15. summary: "{{ $labels.instance }} 已停止运行超过 15s!"
  16. [root@prometheus rules]# systemctl restart prometheus

设定prometheus.yml中的rules后,再配置alertmanager的告警相关信息,如下:

  1. [root@prometheus alertmanager]# pwd
  2. /usr/local/alertmanager
  3. [root@prometheus alertmanager]# vim alertmanager.yml
  4. global:
  5. resolve_timeout: 5m
  6. smtp_smarthost: 'smtp.qq.com:465'
  7. smtp_from: 'xxxxxxxxx@qq.com'
  8. smtp_auth_username: 'xxxxxxxxx@qq.com'
  9. smtp_auth_password: 'xxxxxxxxx' # 16位qq邮箱授权码作为密码
  10. smtp_require_tls: false
  11. route:
  12. group_by: ['alertname']
  13. group_wait: 10s
  14. group_interval: 10s
  15. repeat_interval: 1h
  16. receiver: 'email' # 选用邮箱告警发送
  17. receivers:
  18. - name: 'email'
  19. email_configs:
  20. - to: 'xxxxxxxxx@qq.com'
  21. inhibit_rules:
  22. - source_match:
  23. severity: 'critical'
  24. target_match:
  25. severity: 'warning'
  26. equal: ['alertname', 'dev', 'instance']

配置完成后,测试一下是否可以正常出现告警信息和邮件的成功发送。

  1. [root@node02 ~]# systemctl start node_exporter

停止node02的exporter后,可以在prometheus server的web界面上可以看到告警:http://<ip>:9090/alerts,如图:

可以看到上面3张图是告警的周期状态,解析如下:

  • 1)inactive:表示当前报警信息即不是firing状态也不是pending状态

  • 2)pending:表示在设置的阈值时间范围内被激活的

  • 3)firing:表示超过设置的阈值时间被激活的

当状态变成了firing的时候,我们邮箱就会收到响应的告警邮件,如下:

响应的邮箱授权码如何操作,请参考链接:http://service.mail.qq.com/cgi-bin/help?subtype=1&&id=28&&no=1001256

五、自定义告警模板

上面已经实现了告警规则触发,告警邮件的发送,但是官方的告警模板实在吝啬难懂,为此,我们也可以进行自定义告警模板,实现最直观的告警信息。在alertmanager目录下创建template目录,增加邮件模板,然后修改alertmanager的配置。

  1. # 创建模板文件
  2. [root@prometheus alertmanager]# mkdir template
  3. [root@prometheus template]# vim email.tmpl
  4. {{ define "email.html" }}
  5. {{ range .Alerts }}
  6. <pre>
  7. ========start==========
  8. 告警程序: prometheus_alert
  9. 告警级别: {{ .Labels.severity }}
  10. 告警类型: {{ .Labels.alertname }}
  11. 故障主机: {{ .Labels.instance }}
  12. 告警主题: {{ .Annotations.summary }}
  13. 告警详情: {{ .Annotations.description }}
  14. 触发时间: {{ .StartsAt.Format "2019-12-14 16:01:01" }}
  15. ========end==========
  16. </pre>
  17. {{ end }}
  18. {{ end }}
  19. # 修改alertmanager.yml配置
  20. [root@prometheus alertmanager]# cat alertmanager.yml
  21. global:
  22. resolve_timeout: 5m
  23. smtp_smarthost: 'smtp.qq.com:465'
  24. smtp_from: 'xxxxxxxxx@qq.com'
  25. smtp_auth_username: 'xxxxxxxxx@qq.com'
  26. smtp_auth_password: 'xxxxxxxxxxxxxx'
  27. smtp_require_tls: false
  28. templates: # 指定邮件模板的路径,可以使用相对路径,template/*.tmpl的方式
  29. - '/usr/local/alertmanager/template/email.tmpl'
  30. route:
  31. group_by: ['alertname']
  32. group_wait: 10s
  33. group_interval: 10s
  34. repeat_interval: 1h
  35. receiver: 'email'
  36. receivers:
  37. - name: 'email'
  38. email_configs:
  39. - send_resolved: true
  40. to: 'xxxxxxxxx@qq.com'
  41. html: '{{ template "email.html" . }}' # 指定使用模板,如果不指定,还是会加载默认的模板的
  42. headers: { Subject: "[WARN]Prometheus告警邮件" } # 配置邮件主题
  43. inhibit_rules:
  44. - source_match:
  45. severity: 'critical'
  46. target_match:
  47. severity: 'warning'
  48. equal: ['alertname', 'dev', 'instance']
  49. # 重启alertmanager
  50. root@prometheus template]# ps -ef |grep alert
  51. root 49465 49165 0 16:03 pts/3 00:00:01 alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml
  52. [root@prometheus template]# kill 49465
  53. [root@prometheus template]# alertmanager --config.file=/usr/local/alertmanager/alertmanager.yml &
  54. [1] 49554
  55. # 测试故障告警
  56. [root@node02 ~]# systemctl stop node_exporter

经过一小段时间后,邮箱会收到告警邮件,是不是好看多了,如图:

Prometheus学习笔记(6)Alertmanager告警的更多相关文章

  1. Prometheus学习笔记(7)PromQL玩法入门

    目录 1.什么是PromQL??? 2.如何查询??? 1.什么是PromQL??? PromQL是Prometheus内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持. ...

  2. Prometheus学习笔记(5)Grafana可视化展示

    目录 一.Grafana安装和启动 二.配置数据源 三.配置dashboard 四.配置grafana告警 一.Grafana安装和启动 Grafana支持查询Prometheus.从Grafana ...

  3. Prometheus学习笔记(1)Prometheus架构简介

    Prometheus简介和架构 Prometheus 是由 SoundCloud 开源监控告警解决方案.架构图如下: 如上图,Prometheus主要由以下部分组成: Prometheus Serve ...

  4. Prometheus学习笔记(3)什么是node_exporter???

    目录 Node_exporter安装配置启动 Node_exporter安装配置启动 node_exporter安装在被监控端,安装方式也比较简单,直接下载解压安装即可,默认启动后监听9100端口. ...

  5. Prometheus学习笔记之教程推荐

    最近学习K8S和基于容器的监控,发现了如下的教程质量不错,记录下来以备参考 K8S最佳实战(包括了K8S的Prometheus监控和EFK日志搜集) https://jimmysong.io/kube ...

  6. Prometheus学习笔记(4)什么是pushgateway???

    目录 一.pushgateway介绍 二.pushgateway的安装运行和配置 三.自定义脚本发送pushgateway 四.使用pushgateway的优缺点 一.pushgateway介绍 pu ...

  7. Prometheus学习笔记(2)Prometheus部署

    目录 Prometheus的安装配置启动 Prometheus的安装配置启动 1.Prometheus二进制安装 Prometheus下载链接:https://prometheus.io/downlo ...

  8. 【Prometheus学习笔记】主机监控 -node_exporter

    Exporter for machine metrics prometheus/node_exporter 安装 Prometheus sudo tar -zxvf prometheus-*.tar. ...

  9. Prometheus监控学习笔记之全面学习Prometheus

    0x00 概述 Prometheus是继Kubernetes后第2个正式加入CNCF基金会的项目,容器和云原生领域事实的监控标准解决方案.在这次分享将从Prometheus的基础说起,学习和了解Pro ...

随机推荐

  1. 第10组 Beta冲刺(3/4)

    队名:凹凸曼 组长博客 作业博客 组员实践情况 童景霖 过去两天完成了哪些任务 文字/口头描述 继续学习Android studio和Java 制作剩余界面前端 展示GitHub当日代码/文档签入记录 ...

  2. Computer-Hunters——凡事预则立

    Computer-Hunters--凡事预则立 冲刺时间安排 时间 前端计划完成工作 11.6 完成用户注册登录界面,个人信息界面,以及热点资讯界面 11.7-11.8 匹配界面,电脑猎场界面 11. ...

  3. jQuery前端生成二维码

    引用: <script src="assets/js/jquery.qrcode.min.js" charset="UTF-8"></scri ...

  4. Alpha冲刺(8/10)——2019.4.30

    作业描述 课程 软件工程1916|W(福州大学) 团队名称 修!咻咻! 作业要求 项目Alpha冲刺(团队) 团队目标 切实可行的计算机协会维修预约平台 开发工具 Eclipse 团队信息 队员学号 ...

  5. eclipse.ini相关问题

    一般新装的eclipse,在eclipse.ini文件中,有设置默认的内存信息,如果你要开发一个大的项目或者导入大的项目,那么,eclipse就会时不时报出这样的错误:An internal erro ...

  6. HTTP漫谈

    一.说明 1.1 当前背景说明 很多web的书包括web安全的书都会有一章介绍http协议,我就总恶意揣测作者是在凑字数,一般都直接跳过去. 相比TCP/IP这种各字段基于数值代号的协议,http这种 ...

  7. [转帖]Druid介绍及入门

    Druid介绍及入门 2018-09-19 19:38:36 拿着核武器的程序员 阅读数 22552更多 分类专栏: Druid   版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议 ...

  8. [转帖]linux find -regex 使用正则表达式

    linux find -regex 使用正则表达式 https://www.cnblogs.com/jiangzhaowei/p/5451173.html find之强大毋庸置疑,此处只是带领大家一窥 ...

  9. 【c++primer练习】 typedef与指针、常量和类型别名

    # c++primer 61页 typedef char* ptr ; cstr 是一个指向 char 的常量指针, 一种错误的理解是将语句等同于const char* ptr cstr; 但 ptr ...

  10. 如何在ppt全屏演示时仍然显示任务栏?

    相信做过ppt演讲的人会有这样的体会:有的时候希望全屏ppt时不要直接霸占全部的屏幕,至少希望能够看到任务栏,这样就可以仍然方便切换程序. 如何实现呢? 很简单,看下图吧:) https://www. ...