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 策略的完整链路。记录规则负责预计算与降噪,告警规则负责条件判断与通知触发。
2.5 规则文件在 GitOps 中的管理
在 GitOps 实践中,Prometheus 规则文件以 YAML 形式存储在 Git 仓库中,通过 CI/CD 管道自动同步到 Prometheus 实例。
- 版本控制:每次规则变更都生成 Git 提交记录,支持回滚与审计。
- 代码审查:通过 Merge Request 审查 PromQL 表达式与阈值设置,减少人为误配。
- 自动化测试:在 CI 阶段使用
promtool检查规则语法与逻辑正确性。 - 渐进式部署:先部署到测试环境验证命中率与误报率,再推广到生产环境。
GitOps 优势:规则文件与基础设施代码一同管理,确保 Prometheus 策略的声明式、可重复、可审计,从源头降低误报风险。