告警规则(alert.rules)是什么
alert.rule即告警规则,在Prometheus中,通过用户自定义的条件进行告警,自定义条件可以由PromQL
表达式定义,当满足告警条件后,Prometheus会通过web界面进行告警,如果同时有部署Alertmanager,则可利用Alertmanager进行更为复杂的通知,如钉钉、微信、飞书等个性化渠道进行通知。
配置解析
alert.rules风格跟yaml风格类似
groups:
- name: example # 组名称
rules: # 告警规则
- alert: HighErrorRate # 告警规则名称
expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5 # 达成条件
for: 10m # 评估时间 可选参数
labels: # 自定义标签
severity: page
annotations: # 描述
summary: High request latency
description: description info
alert.rules配置调整后,同时需要在prometheus.yml中的rule_files
进行配置才能让配置的规则生效。
prometheus.yml
文件的相关配置如下
rule_files:
- 'xxx_rules.yaml'
变量支持
在annotations的summary与description都是支持模版变量的,形式如下
annotations:
summary: "High request latency on {{ $labels.instance }}"
description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"
其中模版变量支持两种类型,$labels.<labelname>
与$value
。$labels.<labelname>
变量支持告警实例指定标签的值,$value
则是获取当前PromQL计算的变量(expr里表达式的值)。
示例
同样以邮件发送为例,如果在一分钟内出现发送失败,或者发送错误就触发告警,并将客户名称显示出来。
告警规则配置
告警规则配置email.yaml
groups:
- name: email
rules:
- alert: email_send_error
expr: rate(email_send_counter_total{status="error"}[1m]) > 0
for: 1m
labels:
severity: critical
annotations:
summary: "{{ $labels.client }} email send success"
description: "client {{ $labels.client }} email send success total {{ $value }}"
- alert: email_send_fail
expr: rate(email_send_counter_total{status="fail"}[1m]) > 0
for: 1m
labels:
severity: critical
annotations:
summary: "{{ $labels.client }} email send fail"
description: "client {{ $labels.client }} email send error total {{ $value }}"
触发告警
短时间内调用api /email_count?client=aaa&status=fail