2. Prometheus 策略基础:PromQL 核心概念、记录规则与告警规则的定义

在 GitOps 工作流中,Prometheus 策略的可靠性直接决定了告警命中率与误报率。本章聚焦 PromQL 核心概念、记录规则与告警规则的定义,为后续策略命中率与误报复核打下坚实基础。

2.1 PromQL 核心概念

PromQL(Prometheus Query Language)是 Prometheus 内置的数据查询语言,支持即时查询与范围查询。理解其核心概念是编写高效策略的前提。

概念 说明 示例
即时向量 返回查询时间点的最新样本值 node_cpu_seconds_total
范围向量 返回一段时间窗口内的样本序列 node_cpu_seconds_total[5m]
标签匹配器 通过标签筛选时间序列 {job="node-exporter", instance=~"10.0.*"}
聚合操作 对时间序列进行分组聚合 sum by (instance) (rate(node_cpu_seconds_total[1m]))
二元运算符 支持算术、比较、逻辑运算 node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes * 100 < 10
实战提示:在 GitOps 场景中,PromQL 查询应尽量使用 rate() 或 increase() 处理计数器指标,避免直接使用原始值导致误报。

2.2 记录规则(Recording Rules)

记录规则用于预计算复杂或频繁使用的 PromQL 表达式,将结果存储为新的时间序列,从而降低查询延迟与告警规则复杂度。

2.2.1 记录规则定义结构

groups:
  - name: node_recording_rules
    interval: 1m
    rules:
      - record: node:memory_usage_percent
        expr: (1 - node_memory_MemAvailable_bytes / node_memory_MemTotal_bytes) * 100
      - record: node:cpu_usage_rate_5m
        expr: rate(node_cpu_seconds_total{mode!="idle"}[5m])
字段 说明 必填
groups[].name 规则组名称,用于组织管理 是
groups[].interval 规则评估周期,默认全局 evaluation_interval 否
rules[].record 新时间序列的名称,建议使用命名规范 是
rules[].expr PromQL 表达式,计算结果将存储为新的指标 是
rules[].labels 额外添加或覆盖的标签 否
最佳实践:记录规则命名建议采用 level:metric_name:operation 格式,例如 node:memory_usage_percent:avg_5m,便于在告警规则中引用。

2.3 告警规则(Alerting Rules)

告警规则定义触发告警的条件,是策略命中率与误报率的核心控制点。告警规则同样以 YAML 格式组织在规则组中。

2.3.1 告警规则定义结构

groups:
  - name: node_alerts
    interval: 30s
    rules:
      - alert: HighMemoryUsage
        expr: node:memory_usage_percent > 90
        for: 5m
        labels:
          severity: critical
        annotations:
          summary: "节点 {{ $labels.instance }} 内存使用率超过 90%"
          description: "当前使用率: {{ $value | humanizePercentage }}"
字段 说明 必填
alert 告警名称,需唯一且具有可读性 是
expr PromQL 表达式,返回非零值即触发告警 是
for 持续时间,条件满足该时长后才触发告警,减少误报 否
labels 告警标签,用于路由与分组 否
annotations 告警注释,包含可读信息与模板变量 否
误报风险点:缺少 for 字段或 for 时间过短,会导致瞬时抖动触发告警,显著提高误报率。建议根据指标波动特性设置合理的持续时间。

2.4 记录规则与告警规则的关系

记录规则与告警规则协同工作,形成 Prometheus 策略的完整链路。记录规则负责预计算与降噪,告警规则负责条件判断与通知触发。

Prometheus 策略规则工作流 原始指标 node_cpu_seconds_total 记录规则 预计算 + 降噪 告警规则 条件判断 + 触发 关键说明: 1. 记录规则将复杂 PromQL 预计算为新指标,降低告警规则复杂度 2. 告警规则引用记录规则结果,配合 for 持续时间减少误报 3. GitOps 管理规则文件,通过版本控制实现策略变更可追溯

2.5 规则文件在 GitOps 中的管理

在 GitOps 实践中,Prometheus 规则文件以 YAML 形式存储在 Git 仓库中,通过 CI/CD 管道自动同步到 Prometheus 实例。

  • 版本控制:每次规则变更都生成 Git 提交记录,支持回滚与审计。
  • 代码审查:通过 Merge Request 审查 PromQL 表达式与阈值设置,减少人为误配。
  • 自动化测试:在 CI 阶段使用 promtool 检查规则语法与逻辑正确性。
  • 渐进式部署:先部署到测试环境验证命中率与误报率,再推广到生产环境。
GitOps 优势:规则文件与基础设施代码一同管理,确保 Prometheus 策略的声明式、可重复、可审计,从源头降低误报风险。