alertmanager的使用

网友投稿 403 2022-09-26

alertmanager的使用

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 解压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 # 告警管理器的地址

整合参考链接​​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_wait​​​、​​group_interval​​​和​​repeat_interval​​的解释参考上方的注释。和此链接使用到 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 来操作。

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

五、告警路由

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: trueinhibit_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 ​​查看告警树。

2、路由匹配

告警数据 从​​最顶级的route​​​进入路由树,根路由需要匹配所有的告警数据,不可以设置​​match​​​和​​match_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 }}
实例名: {{ .Labels.instance }}
摘要: {{ .Annotations.summary }}
详情: {{ .Annotations.description }}
级别: {{ .Labels.severity }}
开始时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{{ end }}{{ end -}}{{- if gt (len .Alerts.Resolved) 0 -}}{{ range.Alerts }}Resolved-告警恢复了。
告警名称: {{ .Labels.alertname }}
实例名: {{ .Labels.instance }}
摘要: {{ .Annotations.summary }}
详情: {{ .Annotations.description }}
级别: {{ .Labels.severity }}
开始时间: {{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
恢复时间: {{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
{{ end }}{{ end -}}{{- end }}

2、修改alertmanager.yml配置文件

1、加载告警模板的位置

global: resolve_timeout: 5mtemplates:- '/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、​​查看告警树​​

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Spring父子上下文的使用案例
下一篇:营销案例精选:只做内容营销,没有用!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~