alertmanager的使用
一、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_wait
、group_interval
和repeat_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
进入路由树,根路由需要匹配所有的告警数据,不可以设置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 }} <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” }} 中的值。
七、参考链接
3、alertmanager和prometheus整合参考链接
4、分组告警中 group_wait、group_interval和repeat_interval的解释
5、抑制规则配置
7、https://aleiwu.com/post/prometheus-alert-why/
8、查看告警树
alertmanager的使用的更多相关文章
- Alertmanager 集群
Alertmanager 集群搭建 环境准备:2台主机 (centos 7) 192.168.31.151 192.168.31.144 1.安装部署 192.168.31.151 cd /usr/l ...
- prometheus + grafana + node_exporter + alertmanager 的安装部署与邮件报警 (一)
大家一定要先看详细的理论教程,再开始搭建,这样报错后才容易找到突破口 参考文档 https://www.cnblogs.com/afterdawn/p/9020129.html https://www ...
- prometheus告警插件-alertmanager
prometheus本身不支持告警功能,主要通过插件alertmanage来实现告警.AlertManager用于接收Prometheus发送的告警并对于告警进行一系列的处理后发送给指定的用户. pr ...
- Alertmanager 安装(k8s报警)
一.下载Alertmanager https://prometheus.io/download/ wget https://github.com/prometheus/alertmanager/rel ...
- Prometheus+AlertManager实现邮件报警
AlertManager下载 https://prometheus.io/download/ 解压 添加配置文件test.yml,配置收发邮件邮箱 参考配置: global: smtp_smartho ...
- istio prometheus预警Prometheus AlertManager
1.安装alertmanager kubectl create -f 以下文件 alertmanager-templates.yaml.configmap.yaml.deployment.yaml.s ...
- 容器监控告警方案(cAdvisor + nodeExporter + alertmanager + prometheus +grafana)
一.prometheus基本架构 Prometheus 是一套开源的系统监控报警框架.它启发于 Google 的 borgmon 监控系统,由工作在 SoundCloud 的 google 前员工在 ...
- [k8s]prometheus+alertmanager二进制安装实现简单邮件告警
本次任务是用alertmanaer发一个报警邮件 本次环境采用二进制普罗组件 本次准备监控一个节点的内存,当使用率大于2%时候(测试),发邮件报警. k8s集群使用普罗官方文档 环境准备 下载二进制h ...
- prometheus,alertmanager 报警配置详解
vim prometheus.yml global: scrape_interval: 15s external_labels: monitor: 'codelab-monitor' scrape_c ...
- 【阿圆实验】Alertmanager HA 高可用配置
注意:没有使用supervisor进程管理器的,只参考配置,忽略和supervisor相关命令.并且alertmanager的版本不得低于0.15.2,低版本alert不支持集群配置. 一.alert ...
随机推荐
- XXE从0到1
XXE从0到1 1. XXE概述 XXE(XML External Entity Injection)即XML外部实体注入.漏洞是在对不安全的外部实体数据进行处理时引发的安全问题. 下面我们主要介绍P ...
- 记录一次sql注入绕过
目标:http://www.xxxxx.net/temp.asp?ID=10359 通过 and 1=1 and 1=2 测试发现存在拦截 首先想到 and 空格 = 可能存在触发规则 一般遇到这种情 ...
- 小狐狸钱包怎么使用?MetaMask(小狐狸) 使用教程 - 如何添加BSC链、Heco链
MetaMask介绍 MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的以太坊钱包,只需要在谷歌浏览器添加对应的扩展程序即可使用. 1.Download & Install: 官 ...
- 1.docker概述及其历史
一. 为什么会出现docker? 不用说, 肯定是时代进步的产物. 那么, 他为什么能火? 一定是解决了痛点问题. docker也不是一下子就火起来了, 他的火也是有一个过程的, 我们先来看看为什么会 ...
- golang指针接收者和值接收者方法调用笔记
初学go时很多同学会把 值接收者 和 指针接收者 的方法相互调用搞混淆,好多同学都只记得指针类型可以调用值接收者方法和指针接收者方法,而值类型只能调用值接收者方法,其实不然,在某些情况下,值类型也是可 ...
- composer 包 slim使用案例,一个简单的路由解决方案
nginx配置文件修改 location / { try_files $uri /index.php$is_args$args; } 设置好nginx伪静态,把所有的请求方式都转向到index.php ...
- 使用manacher算法解决最长回文子串问题
要解决的问题 求一个字符串最长回文子串是什么.且时间复杂度 O(N) 具体描述可参考: LeetCode_5_最长回文子串 LintCode_200_最长回文子串 暴力解法 以每个字符为中心向左右两边 ...
- Jmeter系列(36)- Access Log Sampler
简介 Access Log Sampler 是个非常有用的工具,可以收集和分析真实用户操作的数据,并可用于流量分析.常见的就是我们的nginx的access.log 日志 使用 access.log ...
- Jmeter系列(9)- Linux环境安装之安装JDK
step-1下载安装包 下载Linux环境下的jdk1.8,请去(官网)中下载jdk的安装文件:或者评论区留言 step-2解压到/usr/local目录 mkdir /usr/local/java ...
- 华为云计算IE面试笔记-FusionCompute虚拟机热迁移定义,应用场景,迁移要求,迁移过程
*热迁移传送了什么数据?保存在哪? 虚拟机的内存.虚拟机描述信息(配置和设备信息).虚拟机的状态 虚拟机的配置和设备信息:操作系统(类别.版本号).引导方式(VM通过硬盘.光盘.U盘.网络启动)和引导 ...