VMalert
使用 vmagent 代替 prometheus 抓取监控指标数据,要想完全替换 prometheus 还有一个非常重要的部分就是报警模块,之前都是在 prometheus 中定义报警规则评估后发送给 alertmanager 的,同样对应到 vm 中也有一个专门来处理报警的模块: vmalert。
# 1 特性
要开始使用 vmalert,需要满足以下条件:
1.报警规则列表:要执行的 PromQL/MetricsQL 表达式
2.数据源地址:可访问的 VictoriaMetrics 实例,用于规则执行
3.通知程序地址:可访问的 Alertmanager 实例,用于处理,汇总警报和发送通知
1
2
3
4
2
3
4
# 2 部署
[root@cce vm]# vim vmalert-cm.yaml
apiVersion: v1
kind: ConfigMap
metadata:
name: vmalert-config
namespace: kube-mon
data:
node.yaml: |
groups:
- name: node
rules:
- alert: NodeDiskUsageHigh
expr: 100 - node_filesystem_free_bytes{fstype=~"xfs|ext4"} / node_filesystem_size_bytes{fstype=~"xfs|ext4"} * 100 > 90
for: 10m
labels:
severity: R1
annotations:
description: "环境:{{$labels.cluster}}/{{ $labels.instance }}: {{ $labels.mountpoint }} 分区使用大于90% (当前值: {{ printf \"%.2f%%\" $value }}) 服
务:{{ $labels.node_name }}"
---------------------------------------------------------------------------------------------------------------
[root@cce vm]# vim vmalert-dep.yaml
---
apiVersion: v1
kind: Service
metadata:
name: vmalert
namespace: kube-vm
labels:
app: vmalert
spec:
ports:
- name: vmalert
port: 8080
targetPort: 8080
type: NodePort
selector:
app: vmalert
---
apiVersion: apps/v1
kind: Deployment
metadata:
name: vmalert
namespace: kube-vm
labels:
app: vmalert
spec:
selector:
matchLabels:
app: vmalert
template:
metadata:
labels:
app: vmalert
spec:
containers:
- name: vmalert
image: victoriametrics/vmalert:v1.77.0
imagePullPolicy: IfNotPresent
args:
- -rule=/etc/ruler/*.yaml
- -datasource.url=http://victoria-metrics.kube-mon.svc.cluster.local:8428 # vm-single
- -notifier.url=http://alertmanager.kube-mon.svc.cluster.local:9093
- -remoteWrite.url=http://victoria-metrics.kube-mon.svc.cluster.local:8428
- -evaluationInterval=15s
- -httpListenAddr=0.0.0.0:8080
# env:
# - name: TZ
# value: Asia/Shanghai # 如果告警模版不高兴转换CST tinme可以加上时区变量获取CST TIME
resources:
limits:
cpu: '2'
memory: 2Gi
requests:
cpu: 100m
memory: 256Mi
ports:
- containerPort: 8080
name: http
volumeMounts:
- mountPath: /etc/ruler/
name: ruler
readOnly: true
volumes:
- configMap:
name: vmalert-config
name: ruler
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
上面的资源清单中将报警规则以 volumes 的形式挂载到了容器中,通过 -rule
指定了规则文件路径,-datasource.url
指定了 vmselect 的路径,-notifier.url
指定了 Alertmanager 的地址,其中 -evaluationInterval
参数用来指定评估的频率的,由于我们这里添加了记录规则,所以还需要通过 -remoteWrite.url
指定一个远程写入的地址.
部署成功后,如果有报警规则达到了阈值就会触发报警,可以通过 Alertmanager 页面查看触发的报警规则.
# 3 同样 vmalert 也提供了一个简单的页面,可以查看所有的 Groups
上次更新: 2025/04/25, 03:40:17