prometheus alertmanager 监控系统部署
需求
公司原本使用的监控系统为open-falcon,但是由于后期要使用k8s及容器,所以经运维团队讨论将监控系统改为prometheus,在此记录下二进制方式部署过程。
版本
服务名 | 版本 | 下载地址 |
---|---|---|
prometheus | 2.20.1 | 下载页面 |
alertmanager | 0.21.0 | 下载页面 |
node_exporter | 1.0.1 | 下载页面 |
prometheus 安装
- 1.下载安装
1 | wget https://github.com/prometheus/prometheus/releases/download/v2.20.1/prometheus-2.20.1.linux-amd64.tar.gz |
- 2.prometheus配置修改
1 | cat prometheus.yml |
- 3.服务启动
1 | 封装下centos7下service配置 |
注:
–web.enable-lifecycle: 启用prometheus通过HTTP请求,shutdown或reload的功能。 例如reload:curl http://127.0.0.1:9090/-/reload
将配置中的目录创建好,并修改对应权限
1 | mkdir /xdfapp/data/prometheus-tsdb |
启动服务,并添加自启动1
2
3 systemctl daemon-reload
systemctl start prometheus
systemctl enable prometheus
prometheus基本部署完成,可以访问试一下
alertmanager 安装
- 1.下载安装
1 | wget https://github.com/prometheus/alertmanager/releases/download/v0.21.0/alertmanager-0.21.0.linux-amd64.tar.gz |
- 2.配置修改
主配置文件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 cat /xdfapp/server/alertmanager/alertmanager.yml
global:
resolve_timeout: 5m #处理超时时间,默认为5min,告警事件在这个时间内没有解决就会告警
smtp_smarthost: 'smtp.exmail.qq.com:587' # 邮箱smtp服务器代理
smtp_from: 'xxxxx' # 发送邮箱名称
smtp_auth_username: 'xxxxx@xxx' # 邮箱名称
smtp_auth_password: 'xxxx' # 邮箱密码或授权码
通知模板路径
templates:
- '/xdfapp/server/alertmanager/config/*.html'
定义路由树信息
route:
group_by: [node] # 报警分组依据,即匹配prometheus中的rules配置。
group_wait: 10s # 最初即第一次等待多久时间发送一组警报的通知
group_interval: 10s # 在发送新警报前的等待时间,与group中的resolve_timeout一致
repeat_interval: 8h # 发送重复警报的周期 对于email配置中,此项不可以设置过低,否则将会由于邮件发送太多频繁,被smtp服务器拒绝
receiver: 'default-receiver' # 发送警报的接收者的名称,以下receivers name的名称,总路由一般都是指向默认接收者
以下为子路由
routes:
- receiver: 'online'
group_by: ['online']
continue: true # 此处如果为false那么匹配到此路由后,后面的子路由不在匹配
group_wait: 10s
repeat_interval: 8h
match_re:
alertGroup: online # 匹配labels,match_re正则匹配, “|” 可匹配多个条件 match匹配字符串
- receiver: 'qa'
group_by: ['qa']
match_re:
alertGroup: qa # 匹配labels,match_re正则匹配, “|” 可匹配多个条件 match匹配字符串
- receiver: 'other'
group_by: ['other']
match_re:
alertGroup: other
定义告警接收者信息
receivers:
- name: 'default-receiver' # 警报
email_configs: # 邮箱配置
- to: 'xxx@xxx.cn' # 接收警报的email配置
html: '{{ template "alert-table.html" . }}' # 设定邮箱的内容模板
headers: { Subject: "[{{ .Status }}] Prometheus报警邮件"} # 接收邮件的标题
send_resolved: true # 恢复告警通知,默认不会发送
邮件告警模板,告警模板可根据实际情况调整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# cat /xdfapp/server/alertmanager/config/alert-table.html
{{ define "alert-table.html" }}
{{ if eq .Status "firing" }}
告警总数:{{ .Alerts.Firing | len }} 条,其中告警状态为firing为异常状态,resolved为恢复告警
<table border="1">
<tr>
<td>报警项</td>
<td>实例</td>
<td>告警状态</td>
<td>报警内容</td>
<td>开始时间</td>
</tr>
{{ range $i, $alert := .Alerts.Firing }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Annotations "summary" }}</td>
<td>{{ .Status }}</td>
<td>{{ index $alert.Annotations "description" }}</td>
<td>{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</td>
</tr>
{{ end }}
</table>
{{ end }}
{{ if eq .Status "resolved" }}
恢复告警共:{{ .Alerts.Resolved | len }}条
<table border="1">
<tr>
<td>恢复项</td>
<td>实例</td>
<td>告警状态</td>
<td>恢复内容</td>
<td>开始时间</td>
<td>恢复时间</td>
</tr>
{{ range $i, $alert := .Alerts.Resolved }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Annotations "summary" }}</td>
<td>{{ .Status }}</td>
<td>{{ index $alert.Annotations "description" }}</td>
<td>{{ (.StartsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</td>
<td>{{ (.EndsAt.Add 28800e9).Format "2006-01-02 15:04:05" }}</td>
</tr>
{{ end }}
</table>
{{ end }}
{{ end }}
- 3.服务启动
封装下centos7的service配置1
2
3
4
5
6
7
8
9
10
11
12
13 cat /usr/lib/systemd/system/alertmanager.service
[Unit]
Description=alertmanager
After=network.target
[Service]
ExecStart=/xdfapp/server/alertmanager/alertmanager \
--config.file=/xdfapp/server/alertmanager/alertmanager.yml \
--storage.path=/xdfapp/data/alertmanager \
--web.external-url=http://alert.xxx.cn # 此处写域名或ip:port
User=web
[Install]
WantedBy=multi-user.target
将以上配置中的目录创建好
1 | mkdir /xdfapp/data/alertmanager |
启动服务,并添加自启动1
2
3 systemctl daemon-reload
systemctl start alertmanager
systemctl enable alertmanager
alertmanager 已经基本配置完成~
node_exporter 安装
node_export是prometheus官方提供的主机基础监控agent,例如磁盘,cpu,内存等一些基础监控,更多官网推荐的export:点击跳转
1.下载安装
1
2
3wget https://github.com/prometheus/node_exporter/releases/download/v1.0.1/node_exporter-1.0.1.linux-amd64.tar.gz
tar zxvf node_exporter-1.0.1.linux-amd64.tar.gz
mv node_exporter-1.0.1.linux-amd64 /xdfapp/monitor/node_exporter2.配置启动
1 | cat /usr/lib/systemd/system/node_exporter.service |
1 | systemctl start node_exporter.service |
cat >> /xdfapp/server/prometheus/config/host/online.yaml <<EOF
- labels:
service: op-prometheus-4
environment: online
targets:- 10.10.9.4:9100
EOF1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20> 配置中的labels可以以key:value的方式自定义,方便通过labels实现不同的路由告警规则
访问prometheus的targets页面,应该可以看到我们新添加的主机(不太方便贴图,就不贴图了。。) http://10.10.9.4:9090/targets#job-online%20node
- 2.添加告警规则
> prometheus
```shell
# cat > /xdfapp/server/prometheus/config/alert <<EOF
groups:
- name: node
rules:
- alert: "node_exproter未启动"
expr: up{environment="online"} == 0
for: 5m
labels:
severity: critical
annotations:
summary: "{{.instance}}"
description: "请检查{{ .instance }}服务器是否宕机."
EOF
- 10.10.9.4:9100
重启加载下配置1
curl -d POST 127.0.0.1:9090/-/reload
将node_export停止,然后访问prometheus的alerts页面,应该可以看到有告警提示,prometheus发现告警会有三个状态:pending > inactive > firing ,当告警处于firing状态,应该已经将警告通知到alertmanager,并由alertmanager通知到用户了
查收下邮件,如果收到告警邮件则部署成功。
参考文档
这个文档非常详细:https://www.prometheus.wang/
本文作者 : WGY
原文链接 : http://geeklive.cn/2019/06/05/prometheus/undefined/prometheus/
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!