
GUIDE
导读
使用PromQL除了能够方便的按照查询和过滤时间序列以外,PromQL还支持丰富的操作符,用户可以使用这些操作符对进一步的对事件序列进行二次加工。这些操作符包括:数学运算符,逻辑运算符,布尔运算符等等
01
数学运算符
node_memory_free_bytes_total (1024 * 1024)
node_disk_bytes_written + node_disk_bytes_read
{device="sda",instance="localhost:9100",job="node_exporter"}=>1634967552@1518146427.807 + 864551424@1518146427.807{device="sdb",instance="localhost:9100",job="node_exporter"}=>0@1518146427.807 +1744384@1518146427.807
PromQL支持的所有数学运算符如下所示:
+ (加法)
- (减法)
* (乘法)
/ (除法)
% (求余)
^ (幂运算)
02
使用布尔运算过滤时间序列
(node_memory_bytes_total - node_memory_free_bytes_total)node_memory_bytes_total
(node_memory_bytes_total - node_memory_free_bytes_total)node_memory_bytes_total > 0.95
== (相等)
!= (不相等)
> (大于)
< (小于)
>= (大于等于)
<= (小于等于)

使用bool修饰符改变布尔运算符的行为:
http_requests_total > bool 1000
http_requests_total{code="200",handler="query",instance="localhost:9090",job="prometheus",method="get"} 1http_requests_total{code="200",handler="query_range",instance="localhost:9090",job="prometheus",method="get"} 0
2 == bool 2 # 结果为1
03
使用集合运算符
and (并且)
or (或者)
unless (排除)
04
操作符优先级
100 * (1 - avg (irate(node_cpu{mode='idle'}[5m])) by(job) )
1. ^2. *, , %3. +, -4. ==, !=, <=, <, >=, >5. and, unless6. or
05
匹配模式详解
向量与向量之间进行运算操作时会基于默认的匹配规则:依次找到与左边向量元素匹配(标签完全一致)的右边向量元素进行运算,如果没找到匹配元素,则直接丢弃。
一对一匹配:
vector1 <operator> vector2
<vector expr> <bin-op> ignoring(<label list>) <vector expr><vector expr> <bin-op> on(<label list>) <vector expr>
例如当存在样本:
method_code:http_errors:rate5m{method="get", code="500"} 24method_code:http_errors:rate5m{method="get", code="404"} 30method_code:http_errors:rate5m{method="put", code="501"} 3method_code:http_errors:rate5m{method="post", code="500"} 6method_code:http_errors:rate5m{method="post", code="404"} 21method:http_requests:rate5m{method="get"} 600method:http_requests:rate5m{method="del"} 34method:http_requests:rate5m{method="post"} 120
使用PromQL表达式:
method_code:http_errors:rate5m{code="500"} ignoring(code)method:http_requests:rate5mnode_memory_MemFree_bytes / on(instance,job) group_leftnode_memory_MemTotal_bytes
{method="get"} 0.04 // 24 / 600{method="post"} 0.05 // 6 / 120
多对一和一对多
<vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vectorexpr><vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vectorexpr><vector expr> <bin-op> on(<label list>) group_left(<label list>) <vector expr><vector expr> <bin-op> on(<label list>) group_right(<label list>) <vector expr>
method_code:http_errors:rate5m / ignoring(code) group_leftmethod:http_requests:rate5mnode_filesystem_avail_bytes * on(instance, job) group_left(version)node_exporter_build_info
{method="get", code="500"} 0.04 // 24 / 600{method="get", code="404"} 0.05 // 30 / 600{method="post", code="500"} 0.05 // 6 / 120{method="post", code="404"} 0.175 // 21 / 120
往/期/回/顾
-End-
「有用就扩散」
「有用就点在看」
更多课程咨询或免费资料领取,扫下方二维码即可!

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




