告警介绍

如下所示,通过在Prometheus中定义AlertRule(告警规则),Prometheus会周期性的对告警规则进行计算,如果满足告警触发条件就会向Alertmanager发送告警信息,以邮件等方式通知运维人员。

Alertmanager可以对这些告警信息进行进一步的处理,比如当接收到大量重复告警时能够消除重复的告警信息,同时对告警信息进行分组并且路由到正确的通知方。

告警规则rules

举个告警规则配置的例子,在目录/etc/prometheus/rules/下创建告警规则文件test-alert.rules内容如下:

groups:
- name: examplerules:# Alert for any instance that is unreachable for >5 minutes.- alert: InstanceDownexpr: up == 0for: 5mlabels:severity: pageannotations:summary: "Instance {{ $labels.instance }} down"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."# Alert for any instance that has a median request latency >1s.- alert: APIHighRequestLatencyexpr: api_http_request_latencies_second{quantile="0.5"} > 1for: 10mannotations:summary: "High request latency on {{ $labels.instance }}"description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

修改Prometheus配置文件prometheus.yml,添加以下配置:

rule_files:- /etc/prometheus/rules/*.rules

重启Prometheus后访问Prometheus UI:http://127.0.0.1:9090/rules可以查看当前以加载的规则文件。
对于上述例子,可以手动停止node exporter来模拟up == 0时的告警。

在告警规则文件中,我们可以将一组相关的规则(rules)设置定义在一个group下。一条告警规则(rules)主要由以下几部分组成:

  • alert:告警规则的名称。
  • expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
  • for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为PENDING,等待期后为FIRING
  • labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
  • annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。

Prometheus支持模板化label和annotations的中标签的值。
通过$labels.<labelname>变量可以访问当前告警实例中指定标签的值。$value则可以获取当前PromQL表达式计算的样本值。

安装Alertmanager

下载地址:https://prometheus.io/download/

tar -xvf alertmanager-0.16.2.linux-amd64.tar.gz
./alertmanager

编辑Prometheus配置文件prometheus.yml,并添加以下内容:

alerting:alertmanagers:- static_configs:targets: ['localhost:9093']

Alertmanager启动后可以通过9093端口访问UI。

配置Alertmanager

Alertmanager主要负责对Prometheus产生的告警进行统一处理,Alertmanager解压后会包含一个默认的alertmanager.yml配置文件,内容如下所示:

global:resolve_timeout: 5mroute:group_by: ['alertname']group_wait: 10sgroup_interval: 10srepeat_interval: 1hreceiver: 'web.hook'
receivers:
- name: 'web.hook'webhook_configs:- url: 'http://127.0.0.1:5001/'
inhibit_rules:- source_match:severity: 'critical'target_match:severity: 'warning'equal: ['alertname', 'dev', 'instance']

在Alertmanager配置中一般会包含以下几个主要部分:

  • 全局配置(global):用于定义一些全局的公共参数,如resolve_timeout,该参数定义了当Alertmanager持续多长时间未接收到告警后标记告警状态为resolved(已解决);
  • 模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等;
  • 告警路由(route):主要定义了告警的路由匹配规则,以及Alertmanager需要将匹配到的告警发送给哪一个receiver,;
  • 接收人(receivers):接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用;
  • 抑制规则(inhibit_rules):可以避免当某种问题告警产生之后用户接收到大量由此问题导致的一系列的其它告警通知。合理设置抑制规则可以减少垃圾告警的产生。

路由route

在上述例子中,我们只定义了一个路由,那就意味着所有由Prometheus产生的告警在发送到Alertmanager之后都会通过名为web.hook的receiver接收。实际上,对于不同级别的告警,会有不同的处理方式,因此在route中,我们还可以定义更多的子Route。
每一个告警都会从配置文件中顶级的route进入路由树,需要注意的是顶级的route必须匹配所有告警(即不能有任何的匹配设置match和match_re),默认情况下,告警进入到顶级route后会遍历所有的子节点,直到找到最深的匹配route,并将告警发送到该route定义的receiver中。但如果route中设置continue的值为false,那么告警在匹配到第一个子节点之后就直接停止。如果continue为true,报警则会继续进行后续子节点的匹配。如果当前告警匹配不到任何的子节点,那该告警将会基于当前路由节点的接收器配置方式进行处理。
其中告警的匹配有两种方式可以选择。一种方式基于字符串验证,通过设置match规则判断当前告警中是否存在标签labelname并且其值等于labelvalue。第二种方式则基于正则表达式,通过设置match_re验证当前告警标签的值是否满足正则表达式的内容。
如下例子:

route:receiver: 'default-receiver'group_wait: 30sgroup_interval: 5mrepeat_interval: 4hgroup_by: [cluster, alertname]routes:- receiver: 'database-pager'group_wait: 10smatch_re:service: mysql|cassandra- receiver: 'frontend-pager'group_by: [product, environment]match:team: frontend

分组group

Alertmanager可以对告警通知进行分组,将多条告警合合并为一个通知。这里我们可以使用group_by来定义分组规则。基于告警中包含的标签,如果满足group_by中定义标签名称,那么这些告警将会合并为一个通知发送给接收器。
有的时候为了能够一次性收集和发送更多的相关信息时,可以通过group_wait参数设置等待时间,如果在等待时间内当前group接收到了新的告警,这些告警将会合并为一个通知向receiver发送。
group_interval配置,则用于定义相同的Gourp之间发送告警通知的时间间隔。

邮件通知

集成163邮箱通知的配置例子如下:

global:smtp_smarthost: 'smtp.163.com:25'  #163服务器smtp_from: 'XXX@163.com'        #发邮件的邮箱smtp_auth_username: 'XXX@163.com'  #发邮件的邮箱用户名,也就是你的邮箱smtp_auth_password: 'XXX'        #发邮件的邮箱密码route:group_by: ['alertname']repeat_interval: 1hreceiver: live-monitoringreceivers:
- name: 'live-monitoring'email_configs:- to: 'czh1226@qq.com'        #收邮件的邮箱

参考学习资料:https://yunlzheng.gitbook.io/prometheus-book/

prometheus学习3:告警Alertmanager相关推荐

  1. prometheus 结合cAdvisor、AlertManager、node-exporter、 监控容器并实现邮箱告警

    prometheus 结合cAdvisor.AlertManager.node-exporter. 监控容器并实现邮箱告警 prometheus 监控容器 rometheus是一款面向云原生应用程序的 ...

  2. prometheus监控预警之AlertManager邮箱报警

    Alertmanager 主要用于接收 Prometheus 发送的告警信息,它支持丰富的告警通知渠道,例如邮件.微信.钉钉.Slack 等常用沟通工具,而且很容易做到告警信息进行去重,降噪,分组等, ...

  3. Prometheus+Grafana监控告警配置

    文章目录 Prometheus介绍 Prometheus及其组件安装 Prometheus安装 PromQL介绍 mysqld_exporter组件安装 node_exporter组件安装 alert ...

  4. Prometheus和Grafana告警服务创建与对接腾讯云短信告警平台(prometheus_alert)

    前言 在一个监控系统中,如果说数据链路是她的骨架,那么告警通知服务就是他的灵魂!所有的监控服务都是为了能够及时通知出来,减少人工查询状态,及时发现问题,避免不必要的大规模故障,为企业政府省钱,和保证安 ...

  5. Prometheus学习系列(四十)之报警模板参考

    Prometheus创建并向Alertmanager发送警报,然后Alertmanager根据标签向不同的接收者发送通知. 接收器可以是众多集成中的一种,包括:Slack,PagerDuty,电子邮件 ...

  6. Prometheus 学习之——本地存储 TSDB

    Prometheus 学习之--本地存储 TSDB 文章目录 Prometheus 学习之--本地存储 TSDB 前言 一.TSDB 核心概念 二.详细介绍 1.block 1)chunks 2)in ...

  7. Prometheus学习笔记(三)Alertmanager报警模块集成钉钉/企业微信机器人

    文章目录 一.简介 二.安装Alertmanager 三.报警规则 四.通知规则 4.1 钉钉告警 4.2 企业微信告警 一.简介 Alertmanager是Prometheus的一个报警通知组件,需 ...

  8. Prometheus配置和使用Alertmanager发送告警至企业微信

    注:本文基于CentOS 7.4编写 1.准备工作 1.1 创建应用 注册企业微信,这个不细说.注册完成后,点击应用管理->应用->创建应用 1.2 获取应用ID和秘钥 按照要求创建应用后 ...

  9. Prometheus监控以及告警配置

    Prometheus监控 Prometheus简介 Prometheus是一套开源的系统监控报警框架.Prometheus作为新一代的云原生监控系统,相比传统监控监控系统(Nagios或者Zabbix ...

最新文章

  1. 2021高校毕业生薪酬Top100出炉!清华指数TOP,薪酬却排名第二
  2. 腾讯云推出竞价实例 云服务器开销最高下降90%
  3. nyoj298_点的变换_错误
  4. 2022-01-04
  5. win10动态壁纸怎么设置_想把我的女朋友设置为动态壁纸:看过来,教你啊
  6. Android拍照流程
  7. 746. 使用最小花费爬楼梯 golang 动态规划
  8. nginx 部署_部署 hexo 到 nginx
  9. 一直认为in,exists 不走索引,被同事鄙视了……
  10. WebSecurityConfigurerAdapter详解
  11. 基金大跌,基民上闲鱼“卖货回血”了!支付宝深夜发文!真的没人买基了?...
  12. 将数据追加到html 表格中,【HTML】使用Jquery实现将输入数据添加至表格中
  13. python sqlite3加密_sqlite3加密
  14. Postman设置请求cookie
  15. Windows 10注册表损坏该如何修复?
  16. java输入小写字母_java中怎么实现从对话框输入一个大写字母将其转化为小写字母输出?...
  17. 如何去掉华三交换日志中机烦人的 STP_NOTIFIED_TC
  18. Manjaro蓝牙连接问题
  19. Visual Assist X助手的一些使用技巧和快捷键
  20. 小功能⭐️Unity中利用材质自发光实现物体闪烁效果

热门文章

  1. pv java_网站流量UV是什么意思?什么是流量UV/PV/IP
  2. ecshop去所有版本+模板堂标记
  3. 移动端触摸事件(touchstart,touchend,touchmove)的使用!
  4. 夫妻离婚时哪些是夫妻的共同债务
  5. python3爬虫----人人贷散标用户信息爬取
  6. TCP/IP详解 (12)广播和多播
  7. 基于maven, 你的第一个SpringBoot应用的HelloWorld程序(写的步骤)
  8. mapabc高德地图显示多个点,并且每个marker点可以响应鼠标点击事件,处理跳转页面
  9. Go语言自学系列 | golang切片的初始化
  10. 25-文件与目录总结