Skip to the content.

Promql 示例

topk

# topk... sum... by...
topk(5, sum(CpuPercent{__DATABASE__="db1", aggr="avg"}) by (ip))

均值

# 所有实例的平均协程数
avg(go_goroutines)
# 按时间聚合
avg(avg_over_time(go_goroutines[1m]))

求和

# 维度聚合
sum(increase(prometheus_http_requests_total[5m]))
sum(increase(events_total{__DATABASE__='db1'}[5m])) by (object_kind)

# sum_over_time(range-vector): 按时间段求和
(sum(sum_over_time(metric1{__DATABASE__="db1",aggr="avg"}[1d]))*60)/3*20/256
(sum(sum_over_time(metric1{__DATABASE__="db1",aggr="avg"}[1d]))*60)/3*(20/256)

递增

# 过去一小时内每5分钟有多少次请求可以这么写。这里使用更常用的increase函数和range query
increase(metric1{__DATABASE__='db1'}[5m])

分组

# sum... by...
sum(increase(events_total{__DATABASE__='db1'}[5m])) by (group_field)

# 以IP分组
sum(CpuPercent{__DATABASE__="db1", aggr="avg"}) by (ip)

线性预测

# 利用过去30分钟的数据预测1小时后的数据
predict_linear(disk_used_bytes[30m], 3600)

正则

# =:选择与提供的字符串完全相等的标签。
# !=:选择不等于提供的字符串的标签。
# =~:选择与提供的字符串进行正则表达式匹配的标签。
# !~:选择与提供的字符串不匹配的标签。
http_requests_total{environment=~"staging|testing|development",method!="GET"}

# 正则表达式匹配完全锚定。env=~"foo"被视为env=~"^foo$"。
http_requests_total{env=~"foo",method!="GET"}
# ip范围
MemUsedPercent{__DATABASE__="d1",ip=~"(11\\.22\\.2(4|5|6|7)\\..*)"}[1m:1m]

dalta

# 计算 CPU 温度在两小时内的差异
dalta(cpu_temp_celsius{host="zeus"}[2h])

参考