![a85e8abfb4f4b006dadc6387ec077ca2.png](https://i-blog.csdnimg.cn/blog_migrate/f4222db65b2fbdd9ac53763a90ca7c2f.png)
一、上篇文章相关的配置是没有实现邮件通知的版本 以下配置是实现了邮件通知的版本
1、将所有配置由tmp目录迁移到etc目录 原因docker每次启动tmp目录内容都会被清空 所以在tmp目录中的配置不会生效
2、prometheus启动命令修改为
docker run -d -p 9090:9090
-v /etc/prometheus/prometheus.yml:/etc/prometheus/prometheus.yml
-v /etc/prometheus/prometheus_rules.yml:/etc/prometheus/prometheus_rules.yml
-v /etc/prometheus/alertmanager/alertmanager_rules.yml:/etc/prometheus/alertmanager/alertmanager_rules.yml
prom/prometheus
alertmanager_rules.yml和prometheus_rules.yml配置文件在prometheus.yml中被引用
如果本地配置文件路径不对(:之前的路径)docker启动报错
如果docker中路径不对 则docker服务启动不起来
3、/etc/prometheus/prometheus_rules.yml 最新配置
(base) mengfaniaodeMBP:prometheus mengfanxiao$ cat prometheus_rules.yml
groups:
- name: example #报警规则的名字
rules:
# Alert for any instance that is unreachable for >5 minutes.
- alert: InstanceDown #检测job的状态,持续1分钟metrices不能访问会发给altermanager进行报警
expr: up == 0
for: 20s #持续时间
labels:
serverity: page
annotations:
summary: "Instance {{ $labels.instance }} down"
description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 20s."
#- alert: AlertProblem
# expr: "test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} - test_tomcat{exported_instance="uat",exported_job="uat-app-status",host="test",instance="uat",job="uat-apps-status"} offset 1w > 5" # 这个意思是监控该表达式查询出来的值与一周前的值进行比较,大于5且持续10m钟就发送给altermanager进行报警
# for: 1m #持续时间
# labels:
# serverity: warning
# annotations:
# summary: "{{ $labels.type }}趋势增高"
# description: "机器:{{ $labels.host }} tomcat_id:{{ $labels.id }} 类型:{{ $labels.type }} 与一周前的差值大于5,当前的差值为:{{ $value }}" #自定义的报警内容
4、/etc/prometheus/alertmanager/alertmanager_rules.yml 最新配置
(base) mengfaniaodeMBP:alertmanager mengfanxiao$ cat alertmanager_rules.yml
groups:
- name: test-rules
rules:
- alert: InstanceDown # 告警名称
expr: up == 0 # 告警的判定条件,参考Prometheus高级查询来设定
for: 10s # 满足告警条件持续时间多久后,才会发送告警
labels: #标签项
team: node
annotations: # 解析项,详细解释告警信息
summary: "{{$labels.instance}}: has been down"
description: "{{$labels.instance}}: job {{$labels.job}} has been down for more than 10s"
#value: {{$value}}
5、alertmanager启动命令修改为
docker run -d -p 9093:9093 -v /etc/prometheus/alertmanager/alertmanager.yml:/etc/alertmanager/alertmanager.yml
-v /etc/prometheus/alertmanager/template/test.tmpl:/etc/alertmanager/html/template/test.tmpl
--name alertmanager http://docker.io/prom/alertmanager:latest
6、alertmanager.yml 最新配置
(base) mengfaniaodeMBP:alertmanager mengfanxiao$ cat alertmanager.yml
# 全局配置项
global:
resolve_timeout: 5m #处理超时时间,默认为5min
smtp_smarthost: 'smtp.qq.com:465' # 邮箱smtp服务器代理
smtp_from: '15561699@qq.com' # 发送邮箱名称
smtp_auth_username: '155669@qq.com' # 邮箱名称
smtp_auth_password: 'qhnoixxzdca' # 邮箱密码或授权码
wechat_api_url: 'https://qyapi.weixin.qq.com/cgi-bin/' # 企业微信地址
#require_tls: 'false'
smtp_require_tls: false
# 定义模板信心
templates:
- '/etc/alertmanager/html/template/*.tmpl'
# 定义路由树信息
route:
group_by: ['alertname'] # 报警分组依据
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间
repeat_interval: 1m # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'email' # 发送警报的接收者的名称,以下receivers name的名称
# 定义警报接收者信息
receivers:
- name: 'email' # 警报
email_configs: # 邮箱配置
- to: '3065708685@qq.com' # 接收警报的email配置
html: '{{ template "test.tmpl" . }}' # 设定邮箱的内容模板
headers: { Subject: "[WARN] 报警邮件"} # 接收邮件的标题
send_resolved: true
# 第三方开发配置
#webhook_configs: # webhook配置
#- url: 'http://127.0.0.1:5001'
#send_resolved: true
#wechat_configs: # 企业微信报警配置
#- send_resolved: true
#to_party: '1' # 接收组的id
#agent_id: '1000002' # (企业微信-->自定应用-->AgentId)
#corp_id: '******' # 企业信息(我的企业-->CorpId[在底部])
#api_secret: '******' # 企业微信(企业微信-->自定应用-->Secret)
#message: '{{ template "test_wechat.html" . }}' # 发送消息模板的设定
# 一个inhibition规则是在与另一组匹配器匹配的警报存在的条件下,使匹配一组匹配器的警报失效的规则。两个警报必须具有一组相同的标签。
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']
7、模版文件
(base) mengfaniaodeMBP:template mengfanxiao$ cat test.tmpl
{{ define "test.tmpl" }}
<table border="1">
<tr>
<td>报警项</td>
<td>实例</td>
<td>报警内容</td>
<td>开始时间</td>
</tr>
{{ range $i, $alert := .Alerts }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Labels "instance" }}</td>
<td>{{ index $alert.Annotations "description" }}</td>
<td>{{ $alert.StartsAt }}</td>
</tr>
{{ end }}
</table>
{{ end }}
二、针对以上配置有几点需要说明下
1、receivers html 中的模版名称为 模版文件中 define定义的名称
2、邮件发送邮箱配置
a、开启发送邮箱的smtp服务
![6834e94b2603ac0f546dc1e514b8fb43.png](https://i-blog.csdnimg.cn/blog_migrate/c637d30610d3420ec634879b66b9fcb9.png)
b、生成授权码
![9df5dadf5deb4498e31156df2e2ed2ee.png](https://i-blog.csdnimg.cn/blog_migrate/b36a8eb0216b10d149fda1bd5d98f47d.png)
三、触发告警演示效果
1)正常效果
a、2个数据源正常运行
![a59aad239f16aea2e512de24bbd142c7.png](https://i-blog.csdnimg.cn/blog_migrate/d51deede32f58219ed7d15523c5939ed.png)
![78ad000484c6a525256b9d79f61e475b.png](https://i-blog.csdnimg.cn/blog_migrate/0763c55b368d4e00e258e2187af46abf.png)
b、告警规则触发状态
![40c6ea94b19d0648338c92d8068504e5.png](https://i-blog.csdnimg.cn/blog_migrate/d9219769edbaef783e64416b7c914988.png)
c、alertmanager未收到告警页面
![da01ffdcea6ec26206dc3fc2e6500937.png](https://i-blog.csdnimg.cn/blog_migrate/7871fbe53b51e3fcda93e3b78b682eb4.png)
2)停止node数据源
![433ea83ee5b439b1748a92dc1fab7aee.png](https://i-blog.csdnimg.cn/blog_migrate/7b9cb2ae4f0d7e78df1ceec01c7a8275.png)
![de61373dc735403203dfe1ee4e1396f3.png](https://i-blog.csdnimg.cn/blog_migrate/272fbaf6fc1da1c72914b2931f7f2af2.png)
![031298b3a5edad552d094e1b4d27659f.png](https://i-blog.csdnimg.cn/blog_migrate/ba65ac7464baa3c8209b9d537659a6e9.png)
其中一个10s的告警规则触发了
![6dd30d2e4c7e5f6b5abce5219fe60b7d.png](https://i-blog.csdnimg.cn/blog_migrate/1209e7d2eaf6c54ef43697fd12f7247d.png)
另外一个20的告警规则触发了
![5367d4855c1cb2066b54467e60dd39b6.png](https://i-blog.csdnimg.cn/blog_migrate/cf37a72988f4609d916993e3d47d1adb.png)
现在状态由inactive->pendding 未激活状态转为等待发射状态
5分钟之后发射了
![ff97b997411330c4ffd6c38cb45ec369.png](https://i-blog.csdnimg.cn/blog_migrate/7c54b38212df0bf0c339d4c92bc793ec.png)
alertmanager也收到了告警通知
![ad8871605346becb0e55db98c4e0a06f.png](https://i-blog.csdnimg.cn/blog_migrate/6e41aa7b56a3f67f24685ec05c3f447c.png)
报警邮件
![c9d8f176eae49a68ee80677d984c3623.png](https://i-blog.csdnimg.cn/blog_migrate/2ff41687b52c2a8e34a7c7765a4c9c82.png)
4:32发送第一封告警通知 持续10s prometheus没有收到node的数据
![f420198532f5f6f7df37f82d8ef1e66d.png](https://i-blog.csdnimg.cn/blog_migrate/726de29decb0abaaae09640c4994545b.png)
4:37发送第N封告警通知 持续10s和20s的都没有收到node数据
3)重启启动node
![245cbfcd0329e75d717cfe6bb18e6c38.png](https://i-blog.csdnimg.cn/blog_migrate/e1f871ad0615f928d9b00b9edea80859.png)
![674686962949e885b0f9d6d1da5ba150.png](https://i-blog.csdnimg.cn/blog_migrate/199298d3f8d299667aaee591a2e1c500.png)
之前的触发告警记录也都没有了
![2cdc03049e5c99e389e8f053108a8cf2.png](https://i-blog.csdnimg.cn/blog_migrate/cb173d313e5393f1dc746a907b26f8db.png)
![1c049b5c636c6644ad9e8cf3759cc0f9.png](https://i-blog.csdnimg.cn/blog_migrate/d2697d6ce7ff55718b7a2813c4e2fdbd.png)
![6d4c3ef78da298c29fbe2618ffa0a901.png](https://i-blog.csdnimg.cn/blog_migrate/027b563d0b3b8b359e43d255ebb2cca2.png)
4:37发送最后一封告警通知 20s规则的告警 此时10s的那个已经检测到node已经启动了 持续20s的那个还没有检测
10的那个先检测 先通知alertmanger ,altermanager先将10s的那个剔除 此时只通知20s的那个
等20s的那个检测到了 那么也就不会再发送邮件了