prometheus告警配置
prometheus告警配置
prometheus告警流程示意图
相关文件
prometheus.yml
文件中有如下配置
rule_files:
- /etc/config/recording_rules.yml
- /etc/config/alerting_rules.yml
- /etc/config/rules
- /etc/config/alerts
文件 | 说明 |
---|---|
/etc/config/recording_rules.yml | 定义预先计算常用的或计算密集型的 PromQL 表达式,并将结果存储为新的时间序列,目的是提高查询性能并简化复杂查询的使用 |
/etc/config/alerting_rules.yml | 告警规则文件,定义触发告警的条件 |
/etc/config/rules | 将被删除,可查看 官方文档说明 |
/etc/config/alerts | 将被删除,可查看 官方文档说明 |
配置prometheus告警规则
在 alerting_rules.yml
文件中新增告警规则
说明
在prometheus pod的yaml文件中,/etc/config
目录是以名为 prometheus-server
的configmap挂载的
spec
......
volumeMounts:
- mountPath: /etc/config
name: config-volume
readOnly: true
......
volumes:
- configMap:
defaultMode: 420 # 表示文件权限为 rw-r-----
name: prometheus-server
name: config-volume
因此需要编辑 cm prometheus-server
的 data
字段下的 alerting_rules.yml
groups:
- name: node-memory-alerts
rules:
- alert: 内存使用率过高
expr: avg by (node, instance) (100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))) > 80
for: 2m
labels:
severity: warning
annotations:
summary: "节点 {{ $labels.node }} 内存使用率过高"
description: "节点 {{ $labels.node }}(实例 {{ $labels.instance | reReplaceAll \":.*\" \"\" }})的内存使用率当前为 {{ printf \"%.2f\" $value }}%,已超过 20%,持续时间超过 2 分钟。"
编辑完成后查看
$ kubectl get cm prometheus-server -o yaml
apiVersion: v1
data:
alerting_rules.yml: |
groups:
- name: node-memory-alerts
rules:
- alert: 内存使用率过高
expr: avg by (node, instance) (100 * (1 - (node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes))) > 80
for: 2m
labels:
severity: warning
annotations:
summary: "节点 {{ $labels.node }} 内存使用率过高"
description: "节点 {{ $labels.node }}(实例 {{ $labels.instance | reReplaceAll \":.*\" \"\" }})的内存使用率当前为 {{ printf \"%.2f\" $value }}%,已超过 20%,持续时间超过 2 分钟。"
......
字段说明
字段 | 说明 |
---|---|
groups | 告警规则组的列表 |
name | 规则组的名称,此处为 node-memory-alerts |
rules | 具体的告警规则列表 |
alert | 告警名称,此处为 内存使用率过高 |
expr | PromQL 表达式,计算内存使用率是否超过 80% |
for | 持续时间,若超过 2 分钟仍满足条件,则触发告警 |
labels | 告警标签 |
severity | 告警级别,没有固定标准,一般为 info (信息)、 warning (警告)、critical (严重)、emergency (紧急) |
annotations | 告警的额外说明信息 |
summary | 告警摘要,显示受影响的节点 |
description | 告警详细描述,包含节点、实例及当前内存使用率 |
配置完告警后,此时prometheus ui中显示的状态是 PENDING
,意思为告警条件刚触发,尚未进入告警状态(这里为了测试,把PromQL中的阈值改为了大于20)
如果持续时间超过 for
字段定义的时间(这里为2分钟),则状态会变为 FIRING
,意思为告警条件持续满足,prometheus已经开始触发告警
当告警恢复时,状态就会变为 INACTIVE
prometheus告警状态码
状态码 | 说明 |
---|---|
PENDING | 告警条件刚触发,尚未进入告警状态,通常会有一段时间的延迟 |
FIRING | 告警条件持续满足,Prometheus 已经开始触发告 |
INACTIVE | 告警条件不再满足,告警已恢复 |
在alertmanager ui界面中可以查看到告警信息
配置alertmanager发送告警
alertmanager.yml
文件默认内容如下
global: {} # 全局配置(比如 SMTP、Slack Webhook 地址等),这里为空,表示未定义全局设置
receivers: # 告警接收者列表,当前只有 default-receiver,但没有具体的通知方式
- name: default-receiver
# 告警路由规则,决定告警如何分组和发送到哪个 receiver
route:
group_interval: 5m # 组内的新告警(同一规则匹配的)每 5 分钟发送一次
group_wait: 10s # 在同一组告警首次触发后,等待 10 秒再发送,防止告警风暴
receiver: default-receiver # 默认将所有告警发送给 default-receiver
repeat_interval: 3h # 如果告警未恢复,每 3 小时重复发送一次
templates:
- /etc/alertmanager/*.tmpl # 指定模板文件路径(可用于自定义告警格式),当前为 /etc/alertmanager/*.tmpl,但默认没有模板文件