Prometheus告警Rule开发
开发流程
理解告警中各组件及其相关配置的作用
组 件 | 作用 | 相关配置项 |
---|---|---|
prometheus | 存储及提供数据查询 对数据进行规则匹配告警 | rule_files |
Alertmanager | 对告警进行分组、抑制、静默 | 全局配置(global):用于定义一些全局的公共参数,如全局的SMTP配置,Slack配置等内容; 模板(templates):用于定义告警通知时的模板,如HTML模板,邮件模板等; 告警路由(route):根据标签匹配,确定当前告警应该如何处理; 接收人(receivers):接收人是一个抽象的概念,它可以是一个邮箱也可以是微信,Slack或者Webhook等,接收人一般配合告警路由使用; |
1、理解PromQL
可通过阅读官方文档和探索PromQL
2、编写告警Rule
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:告警规则的名称。
-
expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
-
for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
-
labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
-
annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
PS:labels和annotations一个重要的区别是labels会在后面group分组时被使用,而annotations仅作为提供额外信息使用
3、添加Receivers
单个Alertmanager可以有多个不同的Receivers,以下以PrometheusAlert+WechatBot为例
安装
模板配置
例子
Alertmanager配置如下(需先在PrometheusAlert添加模板):
route:
...
receiver: 'hook'
receivers:
- name: 'hook'
webhook_configs:
- url: 'http://HOST:PORT/prometheusalert?type=wx&tpl=wechattpl'
send_resolved: false
假设模板如下,告警时会读取所有alerts进行归并告警,可通过修改模板来修改告警样式,通过在annotations中添加数据来添加额外的显示
{{ range $k,$v:=.alerts }}
{{$v.labels.hostname}}: {{$v.annotations.summary}}
错误详情: {{$v.annotations.description}}
{{ end }}
进阶
告警分组
通过在AlertManager中配置相应Group参数来达到使告警分组的目的。
简单来说,通过分组将相同类型的告警合并成一组来统一告警。
还可以通过配置group_wait和group_interval来控制告警的频率和间隔
告警Route
抑制规则
Alertmanager的抑制机制可以避免当某种问题告警产生之后用户接收到大量由此问题导致的一系列的其它告警通知
参考 屏蔽告警通知