入门教程 - PromQL 与告警体系

知识库
知识库文档
/tech-stacks/prometheus/tutorial/入门教程 - PromQL 与告警体系.md

文档

Prometheus 入门教程:PromQL 与告警体系

1. 监控哲学

Prometheus 的核心方法论:

  • 指标(Metrics) 优于日志(Logs)和追踪(Traces)
  • Pull 模型:Prometheus 主动去目标抓数据(而非被动接收)
  • 多维标签:同一个指标可通过标签区分不同维度

2. 四种指标类型

类型 说明 示例 典型函数
Counter 只增不减 HTTP 请求总数 rate() increase()
Gauge 可增可减 内存使用量 avg_over_time()
Histogram 分桶统计 请求延迟分布 histogram_quantile()
Summary 客户端分位数 P99 延迟 (自带 quantile)

3. PromQL 核心语法

基本查询

# 即时向量
node_cpu_seconds_total{mode="idle", instance="host1:9100"}

# 范围向量
node_cpu_seconds_total{mode="idle"}[5m]

# 时间偏移
node_memory_MemAvailable_bytes offset 1h

常用函数

# rate:计算每秒增长率(适合 Counter)
rate(http_requests_total[5m])

# avg by:按标签聚合
avg by(instance)(rate(node_cpu_seconds_total{mode="idle"}[5m]))

# topk:取前 k 个
topk(3, sum(rate(http_requests_total[5m])) by (endpoint))

# histogram_quantile:计算百分位数
histogram_quantile(0.99, rate(http_request_duration_seconds_bucket[5m]))

4. 告警三件套

Prometheus(规则评估) → Alertmanager(分组/抑制/路由) → 通知渠道

Alertmanager 路由示例

route:
  receiver: 'default'
  routes:
  - match:
      severity: critical
    receiver: 'pagerduty'
  - match:
      severity: warning
    receiver: 'slack'
    continue: true
  - match_re:
      service: "^(db|redis)$"
    receiver: 'dba-team'

5. 高可用方案

  • Thanos / Cortex:长期存储 + 全局视图
  • 联邦:层次化 Prometheus 实例
  • Remote Write:将数据写入 InfluxDB / VictoriaMetrics

6. 思考题

  1. Counter 类型为什么用 rate() 而非直接差值?rate()irate() 的区别?
  2. Histogram 和 Summary 如何选择?各有什么优缺点?
  3. 如何设计告警抑制规则避免"告警风暴"?

信息

路径
/tech-stacks/prometheus/tutorial/入门教程 - PromQL 与告警体系.md
更新时间
2026/5/31