promQL语法
1,!= 排除匹配
prometheus_http_requests_total{instance!="10.98.4.4:9090"}
2,多个label使用,分隔,正则匹配多条使用 | 分隔
prometheus_http_requests_total{handler=~"/api/v1/query|/api/v1/metadata",instance="10.98.4.4:9090"}
3,按照时间匹配查询 s秒 m分钟 h小时 d天 w周 y年
prometheus_http_requests_tota #瞬时向量表达式,最新数据
prometheus_http_requests_total{}[5m] #区间向量表达式,当前时间为基准,5分钟内数据
prometheus_http_requests_total{}offset 5m #五分钟前数据
prometheus_http_requests_total{}[1d] offset 1d #前一天的区间向量
4,聚合表达式
sum(node_memory_MemTotal_bytes{instance="10.98.4.1:9100"}) #查询内存总和
avg(node_cpu_seconds_total) by (mode) #按照mode计算主机cpu的平均使用时间
5,表达式运算
node_memory_MemTotal_bytes / (1024 * 1024 * 1024) #byte单位转换G
100 - (node_memory_MemFree_bytes+node_memory_Cached_bytes+node_memory_Buffers_bytes) / node_memory_MemTotal_bytes * 100 > 34 #计算内存使用率列出大于34%的主机
6,使用修饰符
prometheus_http_requests_total > bool 1000 #列出请求列表,大于1000的值为1,小于为0
7,使用集合运算符
100 * (1 - avg (irate(node_cpu_seconds_total{mode='idle'}[5m])) by(instance)) #查询cpu使用率
8,聚合操作符
sum求和
min最小值
max最大值
avg平均值
stddev 标准差
stdvar 标准差异
count 计数
count_values 对value进行计数
bottomk 后n条时序
topk 前n条时序
quantile 分布统计
sum(prometheus_http_requests_total) without (instance) #从结果中移除instance标签
sum(prometheus_http_requests_total) by (instance,code) #只保留instance,code标签
sum(prometheus_http_requests_total{handler="/metrics"}) 等同于 count_values("count",prometheus_http_requests_total{handler="/metrics"}) #计算请求中url出现次数
topk(5, prometheus_http_requests_total) #计算请求数url前5位,后面显示为数量
9,内置函数
increase 函数获取区间向量中的第一个后最后一个样本并返回其增长量
rate函数 直接计算区间向量v在时间窗口内平均增长速率
irate函数是通过区间向量中最后两个两本数据来计算区间向量的增长速率。
(1 - avg(rate(node_cpu_seconds_total{mode="idle"}[5m])) by (instance)) * 100 #计算五分钟内平均增长速度的平均值CPU使用率
increase (node_cpu_seconds_total{mode="idle"}[2m]) / 120 等同于 rate(node_cpu_seconds_total{mode="idle"}[2m]) #node_cpu样本在最近两分钟的平均增长率
irate(node_cpu_seconds_total{mode="idle"}[2m]) #node_cpu样本在最近两分钟的平均增长率