NEWS LETTER

Prometheus + AlertManager实现告警推送

Scroll down

告警触发流程

prometheus -> 触发规则(rules) -> 超出持续时间(for) -> alertmanager -> 分组|抑制|静默 -> 媒体类型 ->邮件|钉钉|微信等

正常状态为 Inactive,当触发告警规则后进入 Pending 状态,并等待告警规则设置的 for 值,如果超过设置的 for 值状态未恢复为 Inactive 则转至 Firing,并推送至 alertmanager

Alertmanager 部署

GitHub:https://github.com/prometheus/alertmanager
首先在 GitHub alertmanager Releases 上下载对应系统版本的 alertmanager,这里以alertmanager-0.21.0.linux-amd64.tar.gz为示例进行部署

1
2
3
4
5
6
7
8
9
10
# 下载alertmanager
wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz
# 解压
tar -zxvf alertmanager-0.21.0.linux-amd64.tar.gz
# 重命名文件夹方便输入与记忆
mv alertmanager-0.21.0.linux-amd64.tar.gz alertmanager
# 进入安装目录
cd alertmanager
# 以下为启动命令,可暂时不执行
nohup /root/alertmanager/alertmanager --web.listen-address=:9093 --config.file=/root/alertmanager/alertmanager.yml &

Alertmanager 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
vim alertmanager.yml

# 全局配置
global:
# 该项表示告警标记转为恢复标记后保持多久发送恢复通知,默认为5分钟
resolve_timeout: 10s
# smtp服务器,如果465以及25端口报错可以尝试587端口,25端口需要将tls设置为false
smtp_smarthost: 'smtp.zoho.com.cn:587'
# 邮件来自
smtp_from: 'i@test.com'
# 邮箱账户
smtp_auth_username: 'i@test.com'
# 邮箱密码或授权码
smtp_auth_password: 'passwd'
# 启用TLS/SSL
smtp_require_tls: true
# 定义HTML邮件模板
templates:
- 'template/*.tmpl'
# route用来设置报警的分发策略
route:
group_by: ['alertname']
# 组告警等待时间,告警产生后等待10s,如果有同组告警一起发出
group_wait: 10s
# 两组告警的间隔时间
group_interval: 10s
# 重复告警的间隔时间,减少相同邮件的发送频率
repeat_interval: 1h
# 告警推送渠道
receiver: 'email'
# 告警推送方式与渠道,route->receiver 对应 receivers->name
receivers:
- name: 'email'
email_configs:
# 接收人
- to: 'test@qq.com'
# 设定邮箱的内容模板,不设置则使用默认模板
# html: '{{ template "test.html" . }}'
# 接收邮件的标题
headers: { Subject: " 报警邮件"}
# 告警消除是否通知
send_resolved: true
- name: 'web.hook'
webhook_configs:
- url: 'http://127.0.0.1:5001/'
# 告警抑制规则
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']

完成以上配置后可以启动 alertmanager

1
nohup /root/alertmanager/alertmanager --web.listen-address=:9093 --config.file=/root/alertmanager/alertmanager.yml &

Prometheus 配置

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 在prometheus目录下创建rules目录,目录根据需要自定义
mkdir rules
# 编辑prometheus配置文件
vim prometheus.yml

# Alertmanager配置
alerting:
alertmanagers:
- static_configs:
- targets:
- 192.168.80.104:9093

# 加载告警规则文件
rule_files:
- 'rules/*.yml'

告警规则文件编写

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
cd prometheus/rules
# 创建规则文件node_down.yml

groups:
- name: node_down
rules:
# 告警名称
- alert: 节点离线告警
# 告警的判定条件,参考Prometheus高级查询来设定
expr: probe_success == 0
# for表示告警持续时间,超过这个时间才会发送给alertmanager
for: 10s
# 标签项
labels:
severity: warning
annotations:
# 尽可能把详细告警信息写入summary标签值,因为告警短信/邮件/钉钉发送的内容使用了summary标签中的值
summary: "Instance {{ $labels.instance }} 离线"
# 这是一条告警描述
description: "这是一条告警描述信息"

可使用以下方式对规则文件进行语法检查

1
./promtool check rules rules/node_down.yml

测试邮件推送

  • 告警未触发状态

  • 监控指标

  • Alertmanager 此时未收到告警

  • 此时我们手动断开一个监控点,告警产生

  • 告警邮件产生

  • 告警恢复邮件,需要配置 send_resolved: true

其他文章
目录导航 置顶
  1. 1. 告警触发流程
  2. 2. Alertmanager 部署
  3. 3. Alertmanager 配置
  4. 4. Prometheus 配置
  5. 5. 告警规则文件编写
  6. 6. 测试邮件推送
请输入关键词进行搜索