Prometheus 教程

Prometheus 警报规则

警报规则允许您根据 Prometheus 表达式语言的表达式定义警报条件,并向外部服务发送有关触发警报的通知。每当警报表达式在给定时间点产生一个或多个矢量元素时,警报对这些元素的标签集都视为激活。

定义警报规则

警报规则在 Prometheus 中的配置方式与记录规则相同。下面是一个带有警报的规则的示例:

groups:
- name: example
  rules:
  - alert: HighRequestLatency
    expr: job:request_latency_seconds:mean5m{job="myjob"} > 0.5
    for: 10m
    labels:
      severity: page
    annotations:
      summary: High request latency

上面的配置中,有一个可选的 for 子句会使 Prometheus 在首次遇到新的表达式输出向量元素时等待一定时间,并将此元素的警报视为触发(firing)。在这种情况下,Prometheus 将检查警报是否在每次评估期间持续激活 10 分钟,然后才触发警报。处于活动状态但尚未触发的元素处于待触发状态。没有 for 子句的警报规则将在第一次评估时处于激活状态。

labels 子句允许指定一组附加到警报上的标签。任何现有的冲突标签都将被覆盖。标签值可以是模板化的(后续介绍模板)。

annotations 子句指定了一组信息标签,可用于存储较长的附加信息,如警报说明或运行手册链接,注释值也可以模板化。

模板化

标签(labels)和注释(annotation)值可使用控制台模板进行模板化。$labels 变量保存警报实例的标签键/值对。可通过 $externalLabels 变量访问配置的外部标签。$value 变量保存警报实例的评估值。例如:

# 插入 firing 元素的标签值:
{{ $labels.<labelname> }}
# 插入 firing 元素的数字表达式值:
{{ $value }}

示例:

groups:
- name: example
  rules:

  # 对超过 5 分钟无法访问的任何实例发出警报
  - alert: InstanceDown
    expr: up == 0
    for: 5m
    labels:
      severity: page
    annotations:
      summary: "Instance {{ $labels.instance }} down"
      description: "{{ $labels.instance }} of job {{ $labels.job }} has been down for more than 5 minutes."

  # 对请求延迟中值大于 1 秒的任何实例发出警报
  - alert: APIHighRequestLatency
    expr: api_http_request_latencies_second{quantile="0.5"} > 1
    for: 10m
    annotations:
      summary: "High request latency on {{ $labels.instance }}"
      description: "{{ $labels.instance }} has a median request latency above 1s (current value: {{ $value }}s)"

在运行期间检查警报

要手动检查哪些警报处于活动状态(挂起 pending 或 触发 firing),请导航至 Prometheus 实例的“Alerts”选项卡,这将显示每个已定义警报当前处于活动状态的确切标签集。

对于挂起(pending)和触发(firing)的警报,Prometheus 还会存储形式为 ALERTS{alertname="<alert name>", alertstate="<pending or firing>", <additional alert labels>} 的合成时间序列。只要警报处于指定的活动(待处理或触发)状态,样本值就会设为 1,而当不再处于活动状态时,序列就会被标记为过时。

发送警报通知

Prometheus 的警报规则能够很好地找出目前存在的问题,但并不是一个完全成熟的通知解决方案。在简单的警报定义基础上,还需要另一层来添加汇总、通知速率限制、静音和警报依赖性。在 Prometheus 的生态系统中,Alertmanager 就扮演了这一角色。因此,可以配置 Prometheus 定期向 Alertmanager 实例发送有关警报状态的信息,然后由 Alertmanager 负责发送正确的通知。

可以对 Prometheus 进行配置,使其通过服务发现集成自动发现可用的 Alertmanager 实例。

说说我的看法
全部评论(
没有评论
关于
本网站专注于 Java、数据库(MySQL、Oracle)、Linux、软件架构及大数据等多领域技术知识分享。涵盖丰富的原创与精选技术文章,助力技术传播与交流。无论是技术新手渴望入门,还是资深开发者寻求进阶,这里都能为您提供深度见解与实用经验,让复杂编码变得轻松易懂,携手共赴技术提升新高度。如有侵权,请来信告知:hxstrive@outlook.com
公众号