PromQL 基础
rate、sum by、简单告警表达式。
35 分钟
PromQL 基础
PromQL 是 Prometheus 查询语言:从时序里算速率、聚合、分位数,也是告警规则与 Grafana Panel 的共用语法。
学习目标
- 使用
rate、sum by、histogram_quantile - 为 backend 写 HTTP 请求率与 5xx 比例表达式
- 在 Prometheus UI 与 Grafana 中验证同一查询
核心内容
选择器与速率
# 5 分钟内 GET /api/tracks 的 QPS(Counter 用 rate)
sum(rate(http_server_requests_seconds_count{
method="GET",
uri="/api/tracks",
status=~"2.."
}[5m]))
[5m] 是 range vector;rate 处理 Counter 重启与单调递增。
按维度聚合
# 各 URI 的请求速率 Top
sum by (uri) (rate(http_server_requests_seconds_count[5m]))
without (instance) 可去掉副本维度,多 Pod 部署时常用(见 kubernetes-essentials)。
错误率
sum(rate(http_server_requests_seconds_count{status=~"5.."}[5m]))
/
sum(rate(http_server_requests_seconds_count[5m]))
分母为 0 时 Grafana 可设 No data 处理;告警里可用 > 0.01(1%)阈值。
P99 延迟
histogram_quantile(0.99,
sum by (le) (rate(http_server_requests_seconds_bucket[5m]))
)
实用函数速查
| 函数 | 用途 |
|---|---|
rate(v[5m]) | Counter 每秒增速 |
increase(v[1h]) | 窗口内增量 |
avg_over_time(g[1h]) | Gauge 一段时间均值 |
absent(up{job="..."}) | 目标消失告警 |
先在 Prometheus Graph 调试,再粘贴到 Grafana(prom-grafana)。
练习
- 写 PromQL:过去 5 分钟 JVM heap 使用
jvm_memory_used_bytes{area="heap"} - 对比
rate[1m]与rate[5m]曲线平滑度 - 为 自定义 Counter(若已加)写 查询