一、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: 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 来操作。

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

五、告警路由

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、查看告警树

alertmanager的使用的更多相关文章

  1. Alertmanager 集群

    Alertmanager 集群搭建 环境准备:2台主机 (centos 7) 192.168.31.151 192.168.31.144 1.安装部署 192.168.31.151 cd /usr/l ...

  2. prometheus + grafana + node_exporter + alertmanager 的安装部署与邮件报警 (一)

    大家一定要先看详细的理论教程,再开始搭建,这样报错后才容易找到突破口 参考文档 https://www.cnblogs.com/afterdawn/p/9020129.html https://www ...

  3. prometheus告警插件-alertmanager

    prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警.AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户. pr ...

  4. Alertmanager 安装(k8s报警)

    一.下载Alertmanager https://prometheus.io/download/ wget https://github.com/prometheus/alertmanager/rel ...

  5. Prometheus+AlertManager实现邮件报警

    AlertManager下载 https://prometheus.io/download/ 解压 添加配置文件test.yml,配置收发邮件邮箱 参考配置: global: smtp_smartho ...

  6. istio prometheus预警Prometheus AlertManager

    1.安装alertmanager kubectl create -f 以下文件 alertmanager-templates.yaml.configmap.yaml.deployment.yaml.s ...

  7. 容器监控告警方案(cAdvisor + nodeExporter + alertmanager + prometheus +grafana)

    一.prometheus基本架构 Prometheus 是一套开源的系统监控报警框架.它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 ...

  8. [k8s]prometheus+alertmanager二进制安装实现简单邮件告警

    本次任务是用alertmanaer发一个报警邮件 本次环境采用二进制普罗组件 本次准备监控一个节点的内存,当使用率大于2%时候(测试),发邮件报警. k8s集群使用普罗官方文档 环境准备 下载二进制h ...

  9. prometheus,alertmanager 报警配置详解

    vim prometheus.yml global: scrape_interval: 15s external_labels: monitor: 'codelab-monitor' scrape_c ...

  10. 【阿圆实验】Alertmanager HA 高可用配置

    注意:没有使用supervisor进程管理器的,只参考配置,忽略和supervisor相关命令.并且alertmanager的版本不得低于0.15.2,低版本alert不支持集群配置. 一.alert ...

随机推荐

  1. JUnit5快速入门指南-2

    重复测试中容易产生的问题 //结果类 private static int result = 0; public static int count(int x) throws InterruptedE ...

  2. 经典多级时间轮定时器(C语言版)

    经典多级时间轮定时器(C语言版) 文章目录 经典多级时间轮定时器(C语言版) 1. 序言 2. 多级时间轮实现框架 2.1 多级时间轮对象 2.2 时间轮对象 2.3 定时任务对象 2.4 双向链表 ...

  3. rootfs -根文件系统制作

    目录 目录 目录 概述 概念 根文件系统是什么 根文件系统中有什么 根文件系统的形式 Busybox 简介 什么是 linuxrc VFS 简介 Busybox 工具 Busybox 目录结构 Men ...

  4. 计算机网络-HTTP篇

    目录 计算机网络-HTTP篇 HTTP的一些问题 HTTP 基本概念 常见状态码 常见字段 Get 与 Post HTTP 特性 HTTP(1.1) HTTP/1.1 HTTPS 与 HTTP HTT ...

  5. Map集和

    目录 Map 特点 继承树 常用方法 entrySet 方法 HashMap 特点 HashMap 的重要常量 存储结构 jdk1.8 总结 面试题 HashMap存储自定义类型键值 LinkedHa ...

  6. PHP密码散列算法的学习

    不知道大家有没有看过 Laravel 的源码.在 Laravel 源码中,对于用户密码的加密,使用的是 password_hash() 这个函数.这个函数是属于 PHP 密码散列算法扩展中所包含的函数 ...

  7. PHP中命名空间是怎样的存在?(二)

    今天带来的依然是命名空间相关的内容,本身命名空间就是PHP中非常重要的一个特性.所以关于它的各种操作和使用还是非常复杂的,光使用方式就有很多种,我们一个一个的来看. 子命名空间 命名空间本身就像目录一 ...

  8. SpringBoot 如何进行对象复制,老鸟们都这么玩的!

    大家好,我是飘渺. 今天带来SpringBoot老鸟系列的第四篇,来聊聊在日常开发中如何优雅的实现对象复制. 首先我们看看为什么需要对象复制? 为什么需要对象复制 如上,是我们平时开发中最常见的三层M ...

  9. localStorage util

    // localStorage util var db ={ set : function(key, obj){ localStorage.setItem(key, JSON.stringify(ob ...

  10. phpstorm 配置Psr4 风格代码

    http://www.cnblogs.com/xp796/p/6441700.html