Prometheus 告警规则

半兽人 发表于: 2019-07-24   最后更新时间: 2021-03-23 19:12:17  
{{totalSubscript}} 订阅, 4,271 游览

告警规则允许你基于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服务等待指定的时间,在第一次遇到新的表达式输出向量元素(如:具有高HTTP错误率的实例)之间,并将该告警统计为该元素的触发。如果该元素的活跃的,且尚未触发,表示正在挂起状态。

LABELS选项语句允许指定额外的标签列表,把它们附加在警告上。任何已存在的冲突标签会被重写。这个标签值能够被模板化。

ANNOTATIONS选项语句指定了另一组标签,它们不被当做警告实例的身份标识。它们经常用于存储额外的信息,例如:警告描述,后者runbook链接。这个注释值能够被模板化。

Templating 模板

groups:
- name: example
  rules:

  # Alert for any instance that is unreachable for >5 minutes.
  - 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."

  # Alert for any instance that has a median request latency >1s.
  - 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 tab页面。这个会显示精确的标签集合,它们每一个定义的警告都是当前活跃的。

对于挂起和触发警告,Prometheus也存储形如:

ALERTS{alertname="<alert name>", alertstat=s"pending|firing", <additional alert labels>}

只要警告是在指定的活跃(pending或者firing)状态上,这个样本值设置为1。当一个警告从活跃状态变成不活跃状态时,这个样本值被设置为0。一旦不活跃,这个时间序列将不会再更新。

三种告警状态:

  • inactive:没有触发阈值
  • pending:已触发阈值但未满足告警持续时间
  • firing:已触发阈值且满足告警持续时间

发送警告通知

Prometheus的警告规则擅长确定当前哪个实例有问题。但它们并不是一个完整的通知解决方案。在简单的告警定义上,需要另一个层来添加总结,通知速率限制,silencing,告警依赖。在Prometheus的生态系统中,Alertmanager发挥了这一作用。因此,Prometheus可能被配置为定期向Alertmanager实例发送有关告警信息,该实例然后负责调用正确的通知,可以通过-alertmanager.url命令行标志配置Alertmanager实例。

更新于 2021-03-23

查看Prometheus更多相关的文章或提一个关于Prometheus的问题,也可以与我们一起分享文章