CnOps 智能运维与可观测社区
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题
导航菜单
首页开源项目实践文章视频课程常见问答开发者工具STAROps 专题

CnOps 智能运维与可观测社区

愿景

CnOps 智能运维与可观测社区是一个以"智能运维与可观测"为核心的开放、包容、分享的技术社区,旨在聚集运维专家、开发者和爱好者,共同探讨、学习和分享可观测最佳实践与最新技术,与众多技术社区合作互动,共同探讨交叉领域的技术挑战,推动可观测领域的创新与进步。

内容社区

  • 实践文章
  • 视频课程
  • 开源项目
  • 常见问答
  • 开发者工具

友情链接

  • Prometheus
  • Grafana Lab
  • OpenTelemetry
  • LoongCollector

关注我们

阿里云云原生公众号阿里云云原生
阿里云可观测公众号阿里云可观测

Copyright © 2026 CnOps 社区. All rights reserved.

首页/开源项目/Prometheus/告警规则
文档目录
安装Prometheus Agent 模式存储联邦编写 HTTP 服务发现管理 APIPrometheus 3.0 迁移指南API 稳定性保证功能开关
配置定义记录规则告警规则模板示例模板参考promtool 的 HTTP 配置规则的单元测试HTTPS 和认证

Prometheus

告警规则

告警规则允许你基于 Prometheus 表达式语言表达式定义告警条件,并将触发告警的通知发送到外部服务。每当告警表达式在给定时间点产生一个或多个向量元素时,告警对于这些元素的标签集被视为活跃。 告警规则在 Prometheus 中的配置方式与记录规则相同。 包含告警的规则文件示例: 可选的 for 子句使 Prometheus...

告警规则允许你基于 Prometheus 表达式语言表达式定义告警条件,并将触发告警的通知发送到外部服务。每当告警表达式在给定时间点产生一个或多个向量元素时,告警对于这些元素的标签集被视为活跃。

定义告警规则

告警规则在 Prometheus 中的配置方式与记录规则相同。

包含告警的规则文件示例:

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

可选的 for 子句使 Prometheus 在首次遇到新的表达式输出向量元素和将该元素的告警计为触发之间等待一定持续时间。在此例中,Prometheus 将检查告警在 10 分钟内每次评估时是否持续活跃,然后才触发告警。活跃但尚未触发的元素处于 pending 状态。没有 for 子句的告警规则将在首次评估时变为活跃。

还有一个可选的 keep_firing_for 子句,告诉 Prometheus 在触发条件最后一次满足后继续保持此告警触发指定的持续时间。这可以用于防止告警抖动、因数据丢失导致的误解决等情况。没有 keep_firing_for 子句的告警规则将在条件不满足的首次评估时停用(假设上述任何可选的 for 持续时间已满足)。

labels 子句允许指定一组附加到告警的额外标签。任何现有的冲突标签将被覆盖。标签值可以使用模板。

annotations 子句指定一组信息性标签,可用于存储更长的附加信息,如告警描述或运行手册链接。注解值可以使用模板。

模板

标签和注解值可以使用控制台模板进行模板化。$labels 变量保存告警实例的标签键/值对。已配置的外部标签可以通过 $externalLabels 变量访问。$value 变量保存告警实例的评估值。

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

示例:

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" 标签页。这将显示每个已定义告警当前活跃的确切标签集。

对于 pending 和 firing 的告警,Prometheus 还存储形如 ALERTS{alertname="<alert name>", alertstate="<pending or firing>", <additional alert labels>} 的合成时间序列。只要告警处于指示的活跃(pending 或 firing)状态,样本值设置为 1,当不再是这种情况时,序列被标记为过期。

发送告警通知

Prometheus 的告警规则擅长确定当前什么出了问题,但它们不是成熟的通知解决方案。需要另一层来在简单告警定义之上添加汇总、通知速率限制、静默和告警依赖。在 Prometheus 生态系统中,Alertmanager 承担此角色。因此,Prometheus 可以配置为定期向 Alertmanager 实例发送告警状态信息,然后由 Alertmanager 负责分发正确的通知。Prometheus 可以配置为通过其服务发现集成自动发现可用的 Alertmanager 实例。

文章大纲