alertmanager的使用

  • 一、Alertanager的安装
    • 1、下载
    • 2、安装
    • 3、启动
    • 4、alertmanager和prometheus的整合
  • 二、告警分组
    • 1、告警规则
    • 2、alertmanager.yml配置
    • 3、分组相关的alertmanager的配置
    • 4、邮件发送结果
  • 三、告警抑制
    • 1、告警规则
    • 2、alertmanager.yml 配置抑制规则
    • 3、邮件发送结果
  • 四、告警静默
    • 1、配置静默规则
  • 五、告警路由
    • 1、altermanager.yml配置文件的编写
    • 2、路由匹配
  • 六、自定义邮件模板
    • 1、定义告警模板
    • 2、修改alertmanager.yml配置文件
      • 1、加载告警模板的位置
      • 2、接收人使用邮件模板
  • 七、参考链接

一、Alertanager的安装

1、下载

2、安装

# 不同的平台下载不同的安装包
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.darwin-amd64.tar.gz# 解压
tar zxvf alertmanager-0.21.0.darwin-amd64.tar.gz# 重命名
mv alertmanager-0.21.0.darwin-amd64.tar.gz alertmanager

3、启动

# 启动的时候指定配置文件的路径和启动端口
./alertmanager --config.file=alertmanager.yml --web.listen-address=":9093"
# 显示帮助信息
./alertmanager --help

4、alertmanager和prometheus的整合

修改prometheus.yml配置文件

alerting:alertmanagers:- static_configs:- targets:- 127.0.0.1:9082 # 告警管理器的地址

整合参考链接https://prometheus.io/docs/prometheus/latest/configuration/configuration/#alertmanager_config

二、告警分组

分组机制可以将某一类型的告警信息合并成一个大的告警信息,避免发送太多的告警邮件。

**比如:**我们有3台服务器都介入了Prometheus,这3台服务器同时宕机了,那么如果不分组可能会发送3个告警信息,如果分组了,那么会合并成一个大的告警信息。

1、告警规则

监控服务器宕机的时间超过1分钟就发送告警邮件。

groups:
- name: Test-Group-001 # 组的名字,在这个文件中必须要唯一rules:- alert: InstanceDown # 告警的名字,在组中需要唯一expr: up == 0 # 表达式, 执行结果为true: 表示需要告警for: 1m # 超过多少时间才认为需要告警(即up==0需要持续的时间)labels:severity: warning # 定义标签annotations:summary: "服务 {{ $labels.instance }} 下线了"description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 1 minutes."

2、alertmanager.yml配置

global:resolve_timeout: 5m# 整合qq邮件smtp_smarthost: 'smtp.qq.com:465'smtp_from: '1451578387@qq.com'smtp_auth_username: '1451578387@qq.com'smtp_auth_identity: 'xxxxxx'smtp_auth_password: 'xxxxxx'smtp_require_tls: false
# 路由
route:group_by: ['alertname'] # 根据什么分组,此处配置的是根据告警的名字分组,没有指定 group_by 貌似是根据规则文件的 groups[n].name 来分组的。group_wait: 10s # 当产生一个新分组时,告警信息需要等到 group_wait 才可以发送出去。group_interval: 10s # 如果上次告警信息发送成功,此时又来了一个新的告警数据,则需要等待 group_interval 才可以发送出去repeat_interval: 120s # 如果上次告警信息发送成功,且问题没有解决,则等待 repeat_interval 再次发送告警数据receiver: 'email' # 告警的接收者,需要和 receivers[n].name 的值一致。
receivers:
- name: 'email'email_configs:- to: '1451578387@qq.com'

3、分组相关的alertmanager的配置

route:group_by: ['alertname'] group_wait: 10sgroup_interval: 10srepeat_interval: 120s

group_waitgroup_intervalrepeat_interval的解释参考上方的注释。和此链接https://www.robustperception.io/whats-the-difference-between-group_interval-group_wait-and-repeat_interval

4、邮件发送结果

三、告警抑制

指的是当某类告警产生的时候,于此相关的别的告警就不用发送告警信息了。

**比如:**我们对某台机器的CPU的使用率进行了监控,比如 使用到 80% 和 90% 都进行了监控,那么我们可能想如果CPU使用率达到了90%就不要发送80%的邮件了。

1、告警规则

如果 cpu 在5分钟的使用率超过 80% 则产生告警信息。

如果 cpu 在5分钟的使用率超过 90% 则产生告警信息。

groups:
- name: Cpurules:- alert: Cpu01expr: "(1 - avg(irate(node_cpu_seconds_total{mode='idle'}[5m])) by (instance,job)) * 100 > 80"for: 1mlabels:severity: info # 自定一个一个标签 info 级别annotations:summary: "服务 {{ $labels.instance }} cpu 使用率过高"description: "{{ $labels.instance }} of job {{ $labels.job }} 的 cpu 在过去5分钟内使用过高,cpu 使用率 {{humanize $value}}."- alert: Cpu02expr: "(1 - avg(irate(node_cpu_seconds_total{mode='idle'}[5m])) by (instance,job)) * 100 > 90"for: 1mlabels:severity: warning # 自定一个一个标签 warning 级别annotations:summary: "服务 {{ $labels.instance }} cpu 使用率过高"description: "{{ $labels.instance }} of job {{ $labels.job }} 的 cpu 在过去5分钟内使用过高,cpu 使用率 {{humanize $value}}."

2、alertmanager.yml 配置抑制规则

抑制规则:

​ 如果 告警的名称 alertname = Cpu02 并且 告警级别 severity = warning ,那么抑制住 新的告警信息中 标签为 severity = info 的告警数据。并且源告警和目标告警数据的 instance 标签的值必须相等。

# 抑制规则,减少告警数据
inhibit_rules:
- source_match: # 匹配当前告警规则后,抑制住target_match的告警规则alertname: Cpu02 # 标签的告警名称是 Cpu02severity: warning # 自定义的告警级别是 warningtarget_match: # 被抑制的告警规则severity: info # 抑制住的告警级别equal:- instance # source 和 target 告警数据中,instance的标签对应的值需要相等。

抑制规则配置

3、邮件发送结果

可以看到 只发送了 warning级别的告警,没有发送info级别的告警。

四、告警静默

指的是处于静默期,不发送告警信息。

**比如:**我们系统某段时间进行停机维护,由此可能会产生一堆的告警信息,但是这个时候的告警信息是没有意义的,就可以配置静默规则过滤掉。

1、配置静默规则

需要在 alertmanager 的控制台,或通过 amtool 来操作。

经过上述的配置,就收不到告警信息了。

五、告警路由

1、altermanager.yml配置文件的编写

global:resolve_timeout: 5msmtp_smarthost: 'smtp.qq.com:465'smtp_from: '145xxx8387@qq.com'smtp_auth_username: '1451578387@qq.com'smtp_auth_identity: 'xxxxx'smtp_auth_password: 'xxxxx'smtp_require_tls: false# 根路由,不能存在 match和match_re,任何告警数据没有匹配到路由时,将会由此根路由进行处理。
route:group_by: ['job']group_wait: 10sgroup_interval: 10srepeat_interval: 120sreceiver: 'default-receiver'routes:- match_re:alertname: 'Cpu.*'  # 如果告警的名字是以 Cpu 开头的发给 receiver-01receiver: 'receiver-01'- match:alertname: 'InstanceDown' # 如果告警的名字是 InstanceDown 则发送给 receiver-02receiver: 'receiver-02'group_by: ['instance'] # 根据 instance 标签分组continue: true  # 为true则还需要去匹配子路由。routes:- match:alertname: 'InstanceDown' # 如果告警的名字是 InstanceDown 则还是需要发送给 receiver-03receiver: 'receiver-03'# 定义4个接收人(接收组等等)
receivers:- name: 'default-receiver'email_configs:- to: '145xxx8387@qq.com'send_resolved: true- name: 'receiver-01'email_configs:- to: '2469xxx193@qq.com'send_resolved: true- name: 'receiver-02'email_configs:- to: 'weixin145xxx8387@163.com'send_resolved: true- name: 'receiver-03'email_configs:- to: 'it_xxx_software@163.com'send_resolved: trueinhibit_rules:- source_match:alertname: Cpu02severity: warningtarget_match:severity: infoequal:- instance

告警结果:

​ 1、告警名称中存在 Cpu 的发送给 receiver-01(2469xxx193@qq.com)

​ 2、告警名称是 InstanceDown 的需要发送给 receiver-02 和 receiver-03(weixin145xxx8387@163.com和it_xxx_software@163.com)

​ 3、需要注意一下路由中的 continue参数,为 true,则需要在继续匹配子路由,为false:不在匹配它下方的子路由了。

当告警信息没有匹配到任务路由时,则由根路由(route)进行处理。

访问url https://www.prometheus.io/webtools/alerting/routing-tree-editor/ 查看告警树。

2、路由匹配

告警数据 从最顶级的route进入路由树,根路由需要匹配所有的告警数据,不可以设置matchmatch_re

每个路由下,有自己的子路由。**比如:**某个告警,如果级别普通,则通知给用户A,如果过段时间还未恢复,变y严重了,则需要通知给张三和李四,那么可以通过子路由实现。

默认情况下,告警从 根路由 进入之后,会遍历它下方的所有的子路由,

​ 如果 route 中的 continue = false,那么在匹配到第一个符合的路由之后就停止匹配了。

​ 如果 continue = true那么会继续进行匹配。

​ 如果所有的都没有匹配到,那么走 根路由。

六、自定义邮件模板

1、定义告警模板

cat email.template.tmpl
{{ define "email.template.tmpl" }}
{{- if gt (len .Alerts.Firing) 0 -}}{{ range.Alerts }}
告警名称: {{ .Labels.alertname }} <br>
实例名: {{ .Labels.instance }}  <br>
摘要:  {{ .Annotations.summary }} <br>
详情:  {{ .Annotations.description }} <br>
级别:  {{ .Labels.severity }}  <br>
开始时间:  {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>
{{ end }}{{ end -}}
{{- if gt (len .Alerts.Resolved) 0 -}}{{ range.Alerts }}
Resolved-告警恢复了。<br>
告警名称: {{ .Labels.alertname }} <br>
实例名: {{ .Labels.instance }}  <br>
摘要:  {{ .Annotations.summary }} <br>
详情:  {{ .Annotations.description }} <br>
级别:  {{ .Labels.severity }}  <br>
开始时间:  {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
恢复时间:  {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}<br>
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>
{{ end }}{{ end -}}
{{- end }}

2、修改alertmanager.yml配置文件

1、加载告警模板的位置

global:resolve_timeout: 5m
templates:
- '/Users/huan/soft/prometheus/alertmanager-0.21.0/templates/*.tmpl'

配置 templates选项

2、接收人使用邮件模板

receivers:- name: 'default-receiver'email_configs:- to: 'it_xxx_software@163.com'send_resolved: truehtml: '{{template "email.template.tmpl" . }}'

注意:

html: '{{template "email.template.tmpl" . }}' 中的 template 中的值为 {{ define “email.template.tmpl” }} 中的值。

七、参考链接

1、下载alertmanager

2、alertmanager的官方文档

3、alertmanager和prometheus整合参考链接

4、分组告警中 group_wait、group_interval和repeat_interval的解释

5、抑制规则配置

6、告警解决后包含旧的值

7、https://aleiwu.com/post/prometheus-alert-why/

8、查看告警树

alertmanager的使用相关推荐

  1. 教你如何在 AlertManager 报警通知中展示监控图表

    今天换了另外一种方式来实现,直接去绘制渲染报警图表,然后上传到对象存储中保存起来,在钉钉中就可以直接展示了.Promoter 就是这个方案的一个实现. 之前用 Python 实现了一个非常简陋的 Al ...

  2. (四) prometheus + grafana + alertmanager 配置Kafka监控

    安装请看https://blog.51cto.com/liuqs/2027365 ,最好是对应的版本组件,否则可能会有差别. (一)prometheus + grafana + alertmanage ...

  3. Prometheus AlertManager 微信报警配置

    Prometheus AlertManager 微信报警配置 alertmanager支持email,webhook等报警源支持,看到可以支持微信报警信息推送觉得有意思把玩一下,alertmanage ...

  4. Istio on ACK集成生态(2): 扩展AlertManager集成钉钉助力可观测性监控能力

    阿里云容器服务Kubernetes(简称ACK)支持一键部署Istio,可以参考文档在ACK上部署使用Isito.Istio on ACK提供了丰富的监控能力,为网格中的服务收集遥测数据,其中Mixe ...

  5. 【Alertmanager】腾讯企业邮箱配置

    SMTP 腾讯企业邮箱配置,需要注意的地方 端口使用587 而不是 465 . 587:STARTTLS协议的属于TLS通讯协议 只是他是在STARTTLS命令执行后才对之后的原文进行保护. 465: ...

  6. 【prometheus】alertmanager 配置文件示例

    global:# The smarthost and SMTP sender used for mail notifications. 用于邮件通知的智能主机和SMTP发件人.smtp_smartho ...

  7. 5.prometheus告警插件-alertmanager、自定义webhook案例编写

    5.prometheus告警插件-alertmanager 参考文章: https://www.bookstack.cn/read/prometheus-book/alert-install-aler ...

  8. prometheus+consul服务发现+alertmanager配置

    以下为prometheus.yml文件的配置 alerting:alertmanagers:- static_configs:- targets:- 10.11.62.26:9093 rule_fil ...

  9. 使用alertmanager对监控对象进行报警(微信)三

    上篇主要讲了alertmanager组件使用邮件对监控对象进行报警,本文讲解下使用企业微信进行报警,前提环境依赖上文配置. 前提:注册企业微信,添加一个报警的应用,并获取相关信息 agent_id和a ...

  10. alertmanager 告警恢复_Prometheus配置企业微信告警

    kubernetes operator安装的,如果不会可看上一篇文章 前提:创建企业微信,创建应用 然后配置altermanager.yaml global:resolve_timeout: 5m r ...

最新文章

  1. Java实现HTTP文件下载(转)
  2. css3树形图,CSS3 树形堆栈
  3. python全栈开发基础【第二十三篇】线程
  4. Docker之Dockerfile 指令详解
  5. 在SAE搭建Python+Django+MySQL(基于Windows)
  6. css 设置背景图一半_CSS背景图设置
  7. CPU和微架构的概念
  8. 系统架构设计师考试大纲
  9. 【机器视觉】 import算子
  10. HDFS的API操作-获取文件列表信息
  11. Watch online
  12. PyTorch 1.0 中文官方教程:Torchvision 模型微调
  13. 朱恒志20135314实验2 实验报告
  14. 从键盘录入10个整数,统计有多少个奇数,Java基础轻松实现
  15. 高数笔记(二十一):幂级数,函数展开成幂级数,傅里叶级数
  16. sendmail 邮件服务器 套件,SENDMAIL邮件服务器的安装与设置
  17. 计算机上图片打不开,电脑上打不开jpg格式的图片是怎么回事?
  18. WebSphere如何重启服务
  19. python中如何将矩阵中的元素赋值为两倍_python给矩阵内元素赋值
  20. 网贷黑名单查询,通过身份证号,或者手机号查询自己的网贷情况。

热门文章

  1. gdal查看图像信息
  2. 看不懂掐死我系列之支持向量机(SVM)从原理到python代码实现
  3. PHP中的单引号和双引号的区别
  4. python求偏度系数_python模拟概率论中偏度和峰度计算
  5. docker:dockerfile构建镜像
  6. Android 系统的分区和文件系统(1)- Android 系统源码结构分析
  7. upload(1~10)
  8. 金庸小说《碧血剑》仍然存在的一处Bug
  9. (enjoyment,basketball)随便说说我们的NBA
  10. 中国统计年鉴1981-2021年