[转帖]alertmanager的使用

alertmanager,使用 · 浏览次数 : 0

小编点评

**自定义邮件模板** ```html {{ define "email.template.tmpl" }} {{ range.Alerts }} {{ 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>恢复时间: {{ (.EndsAt.Add 28800e9).Format \"2006-01-02 15:04:05\" }}<br>++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++<br>{{ end }}{{ end -}}{{- end }}2,修改alertmanager.yml配置文件1,加载告警模板的位置global: resolve_timeout: 5mtemplates:- '/Users/huan/soft/prometheus/alertmanager-0.21.0/templates/*.tmpl'配置&templates options2,接收人使用邮件模板receivers: - name: 'default-receiver' email_configs: - to: 'it_xxx_software@163.com' send_resolved: true html: '{{template "email.template.tmpl" . }}'注意:html: '{{template "email.template.tmpl" . }} 中的 template 中的值为 {{ define "email.template.tmpl" }} 中的值。 {{ end }}{{ end -}}{{- end }} {{ end }} {{ template }} {{ end }} {{ end }} {{ end }} {{ end }} ``` **参考链接** 1. prometheus-alert 2. alertmanager 3. alertmanager和prometheus整合参考链接 4.分组告警中 group_wait、group_interval和repeat_interval的解释 5.抑制规则配置 6.告警解决后包含旧的值 7. https://aleiwu.com/post/prometheus-alert-why/8

正文

https://www.jianshu.com/p/654d59325550

 

一、Alertanager的安装

1、下载

 
下载altermanager

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: 10s
  group_interval: 10s
  repeat_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: Cpu
  rules:
    - alert: Cpu01
      expr: "(1 - avg(irate(node_cpu_seconds_total{mode='idle'}[5m])) by (instance,job)) * 100 > 80"
      for: 1m
      labels:
        severity: info # 自定一个一个标签 info 级别
      annotations:
        summary: "服务 {{ $labels.instance }} cpu 使用率过高"
        description: "{{ $labels.instance }} of job {{ $labels.job }} 的 cpu 在过去5分钟内使用过高,cpu 使用率 {{humanize $value}}."
    - alert: Cpu02
      expr: "(1 - avg(irate(node_cpu_seconds_total{mode='idle'}[5m])) by (instance,job)) * 100 > 90"
      for: 1m
      labels:
        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 # 标签的告警名称是 Cpu02
    severity: warning # 自定义的告警级别是 warning
  target_match: # 被抑制的告警规则
    severity: info # 抑制住的告警级别
  equal:
  - instance # source 和 target 告警数据中,instance的标签对应的值需要相等。

抑制规则配置

3、邮件发送结果

 
邮件发送结果

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

四、告警静默

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

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

1、配置静默规则

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

 
点击 New Silence 按钮
 
创建静默规则

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

五、告警路由

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

global:
  resolve_timeout: 5m
  smtp_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: 10s
  group_interval: 10s
  repeat_interval: 120s
  receiver: 'default-receiver'
  routes:
  - match_re:
      alertname: 'Cpu.*'  # 如果告警的名字是以 Cpu 开头的发给 receiver-01
    receiver: 'receiver-01'
  - match:
      alertname: 'InstanceDown' # 如果告警的名字是 InstanceDown 则发送给 receiver-02
    receiver: 'receiver-02'
    group_by: ['instance'] # 根据 instance 标签分组
    continue: true  # 为true则还需要去匹配子路由。
    routes:
    - match:
        alertname: 'InstanceDown' # 如果告警的名字是 InstanceDown 则还是需要发送给 receiver-03
      receiver: '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: true

inhibit_rules:
  - source_match:
      alertname: Cpu02
      severity: warning
    target_match:
      severity: info
    equal:
      - 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: true
        html: '{{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、查看告警树

 
最后编辑于 :2021.03.11 21:47:04

与[转帖]alertmanager的使用相似的内容:

[转帖]alertmanager的使用

https://www.jianshu.com/p/654d59325550 一、Alertanager的安装 1、下载 下载altermanager 2、安装 # 不同的平台下载不同的安装包 wget https://github.com/prometheus/alertmanager/relea

[转帖]Promethues + Grafana + AlertManager使用总结

Prometheus是一个开源监控报警系统和时序列数据库,通常会使用Grafana来美化数据展示。 1|01. 监控系统基础架 1|11.1核心组件 Prometheus Server, 主要用于抓取数据和存储时序数据,另外还提供查询和 Alert Rule 配置管理。 exporters ,数据采

[转帖]简单聊聊运维监控的其他用途

https://www.cnblogs.com/charlieroro/p/16434344.html 说到监控,一般都会聊到这三个基本维度:metrics、log和tracing,以及这几种常用的工具:Prometheus+grafana+alertmanager、ELK、jaeger。 监控通常

[转帖]AlertManager 配置邮箱告警

http://www.mydlq.club/article/126/ 2022-12-02 13:17:00KUBERNETESPROMETHEUSALERTMANAGER 文章目录 一、邮箱告警说明 二、创建邮箱模板文件 三、AlertManager 添加邮箱告警配置 3.1 AlertManag

[转帖]Alertmanager 部署配置

https://www.cnblogs.com/winstom/p/11940570.html 目录 前言 源码安装 配置 启动 配置prometheus监控Alertmanager 修改prometheus配置 重新加载配置文件 配置测试告警 修改prometheus配置 重新加载配置文件 测试触

[转帖]部署Alertmanager

https://flashcat.cloud/docs/content/flashcat-monitor/prometheus/alert/manager-install/ Alertmanager和Prometheus Server一样均采用Golang实现,并且没有第三方依赖。一般来说我们可以通

[转帖]验证Prometheus alertmanager邮件发送

https://www.cnblogs.com/charlieroro/p/11009493.html 新环境上配置alertmanager时出现了“Client was not authenticated to send anonymous mail during MAIL FROM”错误,但老环

[转帖]

Linux ubuntu20.04 网络配置(图文教程) 因为我是刚装好的最小系统,所以很多东西都没有,在开始配置之前需要做下准备 环境准备 系统:ubuntu20.04网卡:双网卡 网卡一:供连接互联网使用网卡二:供连接内网使用(看情况,如果一张网卡足够,没必要做第二张网卡) 工具: net-to

[转帖]

https://cloud.tencent.com/developer/article/2168105?areaSource=104001.13&traceId=zcVNsKTUApF9rNJSkcCbB 前言 Redis作为高性能的内存数据库,在大数据量的情况下也会遇到性能瓶颈,日常开发中只有时刻

[转帖]ISV 、OSV、 SIG 概念

ISV 、OSV、 SIG 概念 2022-10-14 12:29530原创大杂烩 本文链接:https://www.cndba.cn/dave/article/108699 1. ISV: Independent Software Vendors “独立软件开发商”,特指专门从事软件的开发、生产、