Prometheus邮件报警配置
文章发布较早,内容可能过时,阅读注意甄别。
# 1、安装配置 Alertmanager
$ tar xf alertmanager-0.15.2.linux-amd64.tar.gz -C /usr/local/
$ mv alertmanager-0.15.2.linux-amd64/ alertmanager
1
2
2
# 2,创建启动文件
$ vim /usr/lib/systemd/system/alertmanager.service
添加如下内容:
[Unit]
Description=alertmanager
Documentation=https://github.com/prometheus/alertmanager
After=network.target
[Service]
Type=simple
User=prometheus
ExecStart=/usr/local/alertmanager/alertmanager --config.file=/usr/local/alertmanager/alert-test.yml
Restart=on-failure
[Install]
WantedBy=multi-user.target
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
Alertmanager 安装目录下默认有 alertmanager.yml 配置文件,可以创建新的配置文件,在启动时指定即可。
$ cd /usr/local/alertmanager
$ vim alert-test.yml
global:
smtp_smarthost: 'smtp.163.com:25'
smtp_from: 'Linuxlql@163.com'
smtp_auth_username: 'Linuxlql@163.com'
smtp_auth_password: '123546' # 这里是邮箱的授权密码,不是登录密码
smtp_require_tls: false
templates:
- '/alertmanager/template/*.tmpl'
route:
group_by: ['alertname', 'cluster', 'service']
group_wait: 30s
group_interval: 5m
repeat_interval: 10m
receiver: default-receiver
receivers:
- name: 'default-receiver'
email_configs:
- to: 'liqilong@edspay.com'
html: ''
headers: { Subject: "[WARN] 报警邮件 test" }
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
邮箱一开始使用的是公司的邮箱,结果在后边验证的时候,总是会报错level=error ts=2019-01-26T06:21:59.062483579Z caller=notify.go:332 component=dispatcher msg="Error on notify" err="*smtp.plainAuth failed: unencrypted connection"
,也在这里 (opens new window)看了一些人踩坑的报告,试验了 25、465、587 端口,发现均无效果,最后改成 163 邮箱,直接就生效了。
- smtp_smarthost:是用于发送邮件的邮箱的 SMTP 服务器地址 + 端口;
- smtp_auth_password:是发送邮箱的授权码而不是登录密码;
- smtp_require_tls:不设置的话默认为 true,当为 true 时会有 starttls 错误,为了简单这里设置为 false;
- templates:指出邮件的模板路径;
- receivers 下 html 指出邮件内容模板名,这里模板名为 “alert.html”,在模板路径中的某个文件中定义。
- headers:为邮件标题;
# 3,配置告警规则。
配置 rule.yml。
$ cd /usr/local/prometheus
$ vim rule.yml
groups:
- name: alert-rules.yml
rules:
- alert: InstanceStatus # alert 名字
expr: up{job="linux-node01"} == 0 # 判断条件
for: 10s # 条件保持 10s 才会发出 alter
labels: # 设置 alert 的标签
severity: "critical"
annotations: # alert 的其他标签,但不用于标识 alert
description: 服务器 已当机超过 20s
summary: 服务器 运行状态
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
在 prometheus.yml 中指定 rule.yml 的路径
$ cat prometheus.yml
# my global config
global:
scrape_interval: 15s # Set the scrape interval to every 15 seconds. Default is every 1 minute.
evaluation_interval: 15s # Evaluate rules every 15 seconds. The default is every 1 minute.
# scrape_timeout is set to the global default (10s).
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- localhost:9093 # 这里修改为 localhost
# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
# - "first_rules.yml"
# - "second_rules.yml"
- "/usr/local/prometheus/rule.yml"
# A scrape configuration containing exactly one endpoint to scrape:
# Here it's Prometheus itself.
scrape_configs:
# The job name is added as a label `job=<job_name>` to any timeseries scraped from this config.
- job_name: 'prometheus'
# metrics_path defaults to '/metrics'
# scheme defaults to 'http'.
static_configs:
- targets: ['localhost:9090','localhost:9100']
- job_name: '111.4'
scrape_interval: 5s
static_configs:
- targets: ['192.168.111.4:9100']
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
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
重启 Prometheus 服务:
$ chown -R prometheus.prometheus /usr/local/prometheus/rule.yml
$ systemctl restart prometheus
1
2
2
# 4,编写邮件模板
注意:文件后缀为 tmpl
$ mkdir -pv /alertmanager/template/
$ vim /alertmanager/template/alert.tmpl
<table>
<tr><td>报警名</td><td>开始时间</td></tr>
<tr><td></td><td></td></tr>
</table>
1
2
3
4
5
6
2
3
4
5
6
# 5,启动 Alertmanager
$ chown -R prometheus.prometheus /usr/local/alertmanager
$ systemctl daemon-reload
$ systemctl start alertmanager.service
$ systemctl status alertmanager.service
$ ss -tnl|grep 9093
1
2
3
4
5
2
3
4
5
# 6,验证效果。
此时到管理界面可以看到如下信息:
然后停止 111.4 节点上的 node_exporter 服务,然后再看效果。
$ systemctl stop node_exporter.service
1
接着邮箱应该会收到邮件:
上次更新: 2024/11/19, 23:11:42