
GUIDE
导读
PromQL是Prometheus内置的数据查询语言,其提供对时间序列数据丰富的查询,聚合以及逻辑运算能力的支持。并且被广泛应用在Prometheus的日常应用当中,包括对数据查询、可视化、告警处理当中。可以这么说,PromQL是Prometheus所有应用场景的基础,理解和掌握PromQL是Prometheus入
门的第一课。
01
查询时间序列
http_requests_total
等同于:
http_requests_total{}
http_requests_total{code="200",handler="alerts",instance="localhost:9090",job="prometheus",method="get"}=(20889@1518096812.326)http_requests_total{code="200",handler="graph",instance="localhost:9090",job="prometheus",method="get"}=(21287@1518096812.326)
通过使用label=value 可以选择那些标签满足表达式定义的时间序列; 反之使用label!=value 则可以根据标签匹配排除时间序列;
例如,如果我们只需要查询所有http_requests_total时间序列中满足标签instance为localhost:9090的时间序列,则可以使用如下表达式:
http_requests_total{instance="localhost:9090"}
http_requests_total{instance!="localhost:9090"}
使用label=~regx 表示选择那些标签符合正则表达式定义的时间序列; 反之使用label!~regx 进行排除;
例如,如果想查询多个环节下的时间序列序列可以使用如下表达式:
http_requests_total{environment=~"staging|testing|development",method!="GET"}

02
范围查询
http_request_total{}[5m]
http_requests_total{code="200",handler="alerts",instance="localhost:9090",job="prometheus",method="get"}=[1@1518096812.3261@1518096817.3261@1518096822.3261@1518096827.3261@1518096832.3261@1518096837.325]http_requests_total{code="200",handler="graph",instance="localhost:9090",job="prometheus",method="get"}=[4 @1518096812.3264@1518096817.3264@1518096822.3264@1518096827.3264@1518096832.3264@1518096837.325]
通过区间向量表达式查询到的结果我们称为区间向量。
除了使用m表示分钟以外,PromQL的时间范围选择器支持其它时间单位:
s - 秒 m - 分钟 h - 小时 d - 天 w - 周 y - 年
03
时间位移操作
在瞬时向量表达式或者区间向量表达式中,都是以当前时间为基准:
http_request_total{} # 瞬时向量表达式,选择当前最新的数据http_request_total{}[5m] # 区间向量表达式,选择以当前时间为基准,5分钟内的数据
http_request_total{} offset 5mhttp_request_total{}[1d] offset 1d
04
使用聚合操作
# 查询系统所有http请求的总量sum(http_request_total)# 按照mode计算主机CPU的平均使用时间avg(node_cpu) by (mode)# 按照主机查询各个主机的CPU使用率sum(sum(irate(node_cpu{mode!='idle'}[5m])) sum(irate(node_cpu[5m]))) by(instance)
05
标量和字符串
除了使用瞬时向量表达式和区间向量表达式以外,PromQL还直接支持用户使用标量(Scalar)和字符串(String)。
标量(Scalar):一个浮点型的数字值
标量只有一个数字,没有时序。
例如:
10
需要注意的是,当使用表达式count(http_requests_total),返回的数据类型,依然是瞬时向量。用户可以通过内置函数scalar()将单个瞬时向量转换为标量。
"this is a string"'these are unescaped: \n \\ \t'`these are not unescaped: \n ' " \t`
06
合法的PromQL表达式
http_request_total # 合法http_request_total{} # 合法{method="get"} # 合法
{job=~".*"} # 不合法
{__name__=~"http_request_total"} # 合法{__name__=~"node_disk_bytes_read|node_disk_bytes_written"} # 合法
往/期/回/顾
-End-
「有用就扩散」
「有用就点在看」
更多课程咨询或免费资料领取,扫下方二维码即可!

文章转载自西安川石,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




