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