普罗米修斯-警报
1 引言
普罗米修斯的警报功能分为两个部分,分别是普罗米修斯和警报管理器。普罗米修斯根据警报规则生成警报信息,发送给警报管理器,由警报 管理器存储和分发警报信息。
2 功能特征
普罗米修斯(Prometheus)
- 基于PromQL表达式告警触发条件;
- 自定义告警评估等待时间;
- 释文信息支持模板配置,模板变量可访问告警实例中指定标签的值和表达式计算的样本值;
- 警报信息可配置发送给多个警报管理器,达到高可用;
- 提供web界面查看告警规则、活动状态等信息;
警报管理器(AlertManager)
- 接收者支持Webhook、邮箱、微信、Slack等;
- 告警路由,根据标签,对当前警报信息发送至不同接收者;
- 定义抑制规则,提供WEB界面创建抑制规则,也可令生效规则过期;
3 起步
3.1 普罗米修斯关联警报管理器
编辑普罗米修斯配置文件:prometheus.yml
alerting:
alertmanagers:
- static_configs:
- targets: ['localhost:9093']
其中targets参数是警报管理器IP和端口,修改完毕后重启普罗米修斯服务。可访问普罗米修斯Web界面http://ip:9090/config 查看alerting是否生效。注意防火墙状态及配置,否则可能无法访问Web界面。
3.2 制定告警规则
警报规则是编写一个yaml格式的文件(yaml格式文件尾缀推荐使用yaml,等价yml,当然任意尾缀并不会影响程序运行),按照规定的语法编写即可。然后配置普罗米修斯的配置文件prometheus.yml,在其中配置读取您编写的报警规则文件。一条典型的告警规则如下所示:
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
在告警规则文件中,我们可以将一组相关的规则设置定义在一个group下。在每一个group中我们可以定义多个告警规则(rule)。一条告警规则主要由以下几部分组成:
- alert:告警规则的名称。
- expr:基于PromQL表达式告警触发条件,用于计算是否有时间序列满足该条件。
- for:评估等待时间,可选参数。用于表示只有当触发条件持续一段时间后才发送告警。在等待期间新产生告警的状态为pending。
- labels:自定义标签,允许用户指定要附加到告警上的一组附加标签。
- annotations:用于指定一组附加信息,比如用于描述告警详细信息的文字等,annotations的内容在告警产生时会一同作为参数发送到Alertmanager。
用户可以通过Prometheus WEB界面中的Alerts菜单查看当前Prometheus下的所有告警规则,以及其当前所处的活动状态。
3.3 重启普罗米修斯
启动命令如果是以下命令:
./prometheus --web.enable-lifecycle &
则可以发送http请求热重启
curl -X POST http://ip:9090/-/reload
否则,只能通过kill -hup pid命令来重启
kill -hup 29657 //重启命令
kill -term 29657 //关闭命令
3.4 发送警报
3.4 屏蔽警报
4 参考文献
[1]普罗米修斯V2.22[EB/OL].https://prometheus.io/docs/alerting/latest/overview/.2020-11-11
[2]prometheus-book[EB/OL].https://yunlzheng.gitbook.io/prometheus-book/.2020-11-11