部署pushgatway

Prometheus自定义监控组件pushgateway
1.下载pushgateway

1
[root@elk02:0 ~]# wget https://github.com/prometheus/pushgateway/releases/download/v1.9.0/pushgateway-1.9.0.linux-amd64.tar.gz

2.解压软件包

1
[root@elk02:0 ~]# tar xf pushgateway-1.9.0.linux-amd64.tar.gz -C /softwares/

3.运行pushgateway组件

1
2
[root@elk02:0 ~]# cd /softwares/pushgateway-1.9.0.linux-amd64/
[root@elk02:0 ~]# ./pushgateway --web.listen-address=:9091 --web.telemetry-path="/metrics"

4.访问pushgetway组件的WebUI

1
http://10.0.0.212:9091

5.推送测试数据到pushgateway组件

1
[root@elk211 ~]# echo "student_online 75" | curl --data-binary @-  http://10.0.0.212:9091/metrics/job/student/instance/10.0.0.211

6.再次访问pushgetway组件的WebUI

1
http://10.0.0.92:9091/#

image-20241124112052347

7.修改Prometheus的配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
[root@elk02 ~]# vim /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml 
...
- job_name: "pushgateway"
# 用于解决标签的冲突问题,有效值为: true和false,默认值为false
# 当设置为true时,将保留抓取的标签以忽略服务器自身的标签。说白了会覆盖原有标签。
# 当设置为false时,则不会覆盖原有标签,而是在标点前加了一个"exported_"前缀。
honor_labels: true
static_configs:
- targets:
- "10.0.0.212:9091"

#检查Prometheus语法是否有误
[root@elk01:0 ~]# /softwares/prometheus-2.53.2.linux-amd64/promtool check config /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml

#Prometheus热加载
[root@elk01:0 ~]# curl -X POST http://10.0.0.211:9090/-/reload

#浏览器访问
http://10.0.0.211:9090/targets?search=

Alertmanager环境部署

1.altermanager概述
用于prometheus server的告警功能的组件,目前支持多种告警媒介,包括但不限于邮件告警,钉钉告警,企业微信告警等。

2.部署alermanager组件

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
1.下载软件包
[root@elk02:1 ~]# wget https://github.com/prometheus/alertmanager/releases/download/v0.27.0/alertmanager-0.27.0.linux-amd64.tar.gz

2. 解压软件包
[root@elk02:1 ~]# tar xf alertmanager-0.27.0.linux-amd64.tar.gz -C /softwares/


3.修改alermanager的配置文件
[root@elk02:1 ~]# vim /softwares/alertmanager-0.27.0.linux-amd64/alertmanager.yml
global:
resolve_timeout: 5m
smtp_from: '1968554226@qq.com'
smtp_smarthost: 'smtp.qq.com:465'
smtp_auth_username: '1968554226@qq.com'
smtp_auth_password: 'xwghtaasufprewcb'
smtp_require_tls: false
smtp_hello: 'qq.com'
route:
group_by: ['alertname']
group_wait: 5s
group_interval: 5s
repeat_interval: 30s
receiver: 'email'
receivers:
- name: 'email'
email_configs:
- to: '3078155561@qq.com'
send_resolved: true
inhibit_rules:
- source_match:
severity: 'critical'
target_match:
severity: 'warning'
equal: ['alertname', 'dev', 'instance']


4.启动alermanager
[root@elk02:1 ~]# cd /softwares/alertmanager-0.27.0.linux-amd64/
[root@elk02:1 alertmanager-0.27.0.linux-amd64]# ./alertmanager

5.访问webui
http://10.0.0.212:9093/#/status

3.修改Prometheus配置文件

1
2
3
4
5
6
7
8
9
10
11
12
[root@elk01:0 ~]# vim /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml 
···
# Alertmanager configuration
alerting:
alertmanagers:
- static_configs:
- targets:
- 10.0.0.212:9093

# Load rules once and periodically evaluate them according to the global 'evaluation_interval'.
rule_files:
- "/softwares/prometheus-2.53.2.linux-amd64/status-rules.yaml"

4.修改告警规则

1
2
3
4
5
6
7
8
9
10
11
12
13
cat > /softwares/prometheus-2.53.2.linux-amd64/status-rules.yaml << EOF
groups:
- name: service_status
rules:
- alert: 10.0.0.213:9100节点挂掉啦
expr: up{instance="10.0.0.213:9100"} == 0
for: 15s
labels:
service: node_exporter
porter: 9100
annotations:
summary: "{{ $labels.instance }} 已停止运行超过 15s!"
EOF

5.重新加载Prometheus配置

1
2
3
4
5
#检查Prometheus语法是否有误
[root@elk01:0 ~]# /softwares/prometheus-2.53.2.linux-amd64/promtool check config /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml

#Prometheus热加载
[root@elk01:0 ~]# curl -X POST http://10.0.0.211:9090/-/reload

image-20241127094655913

6.验证告警

1
2
3
4
停止elk3的node_exporter服务
[root@elk03:0 ~]# systemctl stop node-exporter.service

问题未修复没间隔30s发一次邮件(自己可设置)

image-20241127095054688

告警邮件

image-20241127095509855

修改告警模板

1. 告警模板介绍
默认的告警信息界面有些简单,可以借助告警的模板信息,对告警信息进行丰富,需要借助于Alertmanager的模板功能来实现。

告警模板的使用流程如下:
- 分析关键信息
- 定制模板内容
- Alertmanager加载模板文件
- 告警信息使用模板内容属性

模板文件使用标准Go模板语法,并暴露一些包含时间标签和值的变量。

1
2
标签引用: {{ $label.<label_name> }}
指标样本值引用: {{ $value }}

为了显式效果,需要了解一些html相关技术,参考链接:
https://www.w3school.com.cn/html/index.asp

2.自定义模板

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
创建一个模板目录
[root@elk02:0 ~]# mkdir /softwares/alertmanager-0.27.0.linux-amd64/tmpl
[root@elk02:0 tmpl]# cat email.tmpl
{{ define "alert.html" }}
<h1 style='color: red;'>服务异常告警</h1>
<table border="1">
<tr>
<th>报警项</th>
<th>实例</th>
<th>报警阀值</th>
<th>开始时间</th>
</tr>
{{ range $i, $alert := .Alerts }}
<tr>
<td>{{ index $alert.Labels "alertname" }}</td>
<td>{{ index $alert.Labels "instance" }}</td>
<td>{{ index $alert.Annotations "value" }}</td>
<td>{{ $alert.StartsAt }}</td>
</tr>
{{ end }}
</table>
{{ end }}

3.alertmanager引用自定义模板文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[root@elk02:0 temp]# vim /softwares/alertmanager-0.27.0.linux-amd64/alertmanager.yml 
#加载模板
templates:
- './tmpl/*.tmpl'
···
receivers:
- name: 'email'
email_configs:
- to: '3078155561@qq.com'
send_resolved: true
# 添加此行,定制邮件的标题,对于"{{}}"属性用于加载其他信息,需要使用单引号括住。
headers: { Subject: "[WARN] 报警邮件" }
# 添加此行,调用模板显式邮件正文,对于"{}"不需要使用单引号,否则服务启动不成功。
html: '{{ template "alert.html" . }}'
#alter.html是模板里定义的的define,.代表的是加载

4.altermanager语法检查

1
2
3
4
5
6
7
8
9
10
11
12
13
14
[root@elk02:0 alertmanager-0.27.0.linux-amd64]# pwd
/softwares/alertmanager-0.27.0.linux-amd64
[root@elk02:0 alertmanager-0.27.0.linux-amd64]# ./amtool check-config ./alertmanager.yml
Checking './alertmanager.yml' SUCCESS
Found:
- global config
- route
- 1 inhibit rules
- 1 receivers
- 1 templates
SUCCESS


#altermanager自带的语法检查

5.重新启动altermanager

上面我们定制邮件内容中包含阈值的部分,而我们在规则中并没有指定,所以prometheus需要修改以下规则文件。

6.修改规则文件

1
2
3
4
5
[root@elk01:1 ~]# vim /softwares/prometheus-2.53.2.linux-amd64/status-rules.yaml 
···
annotations:
summary: "{{ .instance }} 已停止运行超过 15s!"
value: "{{ $value }}"

7.检查Prometheus配置文件

1
2
3
4
5
#检查Prometheus语法是否有误
[root@elk01:0 ~]# /softwares/prometheus-2.53.2.linux-amd64/promtool check config /softwares/prometheus-2.53.2.linux-amd64/prometheus.yml

#Prometheus热加载
[root@elk01:0 ~]# curl -X POST http://10.0.0.211:9090/-/reload

访问prometheus的WebUI

1
10.0.0.91:9090/rules

image-20241127104621570

8.验证测试

停掉exporter服务

image-20241127110010277

依据模板可以将告警和恢复模板分开,使用不同模板通知

推荐阅读:
https://prometheus.io/docs/alerting/latest/configuration/