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