PromQL 是什么
PromQL(Prometheus Query Language)是 Prometheus 的专用查询语言,提供丰富的表达式能力,支持条件查询、运算符和内置函数,用于多维度数据分析。
四种数据类型
即时向量(Instant Vector)
当前时刻的一组时间序列快照:
http_requests_total
范围向量(Range Vector)
一段时间内的时间序列数据:
http_requests_total[5m]
标量(Scalar)
单个浮点数值,常用于计算结果。
字符串(String)
文本数据,较少使用。
条件匹配
# 精确匹配
http_requests_total{job="api-server"}
# 不等于
http_requests_total{status!="200"}
# 正则匹配
http_requests_total{method=~"GET|POST"}
# 正则排除
http_requests_total{method!~"DELETE|PUT"}
运算符
比较运算符
# CPU 使用率超过 80%
node_cpu_usage > 0.8
# 内存可用量低于 1GB
node_memory_available < 1073741824
算术运算符
# 计算内存使用率(百分比)
(node_memory_total - node_memory_available) / node_memory_total * 100
逻辑运算符
# CPU 高 AND 内存高
node_cpu_usage > 0.8 and node_memory_usage > 0.9
聚合函数
# 所有实例的请求总量
sum(http_requests_total)
# 按 job 分组统计
sum(http_requests_total) by (job)
# 排除某个维度
sum(http_requests_total) without (instance)
# 最大值
max(node_cpu_usage) by (instance)
# Top 5 CPU 使用率最高的实例
topk(5, node_cpu_usage)
实战案例
计算 5 分钟内的请求速率
rate(http_requests_total[5m])
计算错误率
sum(rate(http_requests_total{status=~"5.."}[5m]))
/
sum(rate(http_requests_total[5m]))
P99 响应时间
histogram_quantile(0.99, sum(rate(http_request_duration_seconds_bucket[5m])) by (le))
磁盘使用率告警表达式
(node_filesystem_size_bytes - node_filesystem_free_bytes)
/ node_filesystem_size_bytes * 100 > 85