本文发布于Cylon的收藏册,转载请著名原文链接~
查询结果删除某些指标
without
without 属于聚合查询的子句,必须在聚合查询中使用
语法:
<aggr-op> [without|by (<label list>)] ([parameter,] <vector expression>)
可以看到属于 <aggr-op>
例如
sum without(instance) (http_requests_total)
ignoring
ignoring 属于 “向量匹配” (Vector matching) 关键词,可以在 一对多,和多对多查询中使用
语法
<vector expr> <bin-op> ignoring(<label list>) <vector expr>
例如
method_code:http_errors:rate5m{code="500"} / ignoring(code) method:http_requests:rate5m
与查询
可以查询满足多个条件的指标,例如下列是查询 jvm 内存 $\frac{used}{committed} > 80%$ 并且 Pod WSS 使用大于 80% 的指标
sum by(pod) (jvm_memory_used_bytes{}) / sum by(pod) (jvm_memory_committed_bytes{}) > .8
and
sum(node_namespace_pod_container:container_memory_working_set_bytes{}) by (pod)
/ on(pod)
group_left
sum(kube_pod_container_resource_limits{resource="memory"}) by (pod) > .8
向量查询
向量查询关键词为 on
和 ignoring
on 仅考虑表达式内提供的标签相同的,ignoring 允许在匹配时间序列时忽略指定的标签。
语法
一对一
<vector expr> <bin-op> ignoring(<label list>) <vector expr>
<vector expr> <bin-op> on(<label list>) <vector expr>
多对一或一对多
<vector expr> <bin-op> ignoring(<label list>) group_left(<label list>) <vector expr>
<vector expr> <bin-op> ignoring(<label list>) group_right(<label list>) <vector expr>
<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>
向量查询的高级用法
通过一个 metrcs 上的 label 的值去查询另外一个 metric 上这个标签的值
container_memory_rss{container=~".*$module.*"} on(pod) vm_memory_used_bytes{instance=~"$module.*"}
查询不同标签上的相同标签值的内容,例如,我想通过 **jvm_memory_used_bytes **指标上 pod label 为 “aaaa” 的 label,去查询 container_memory_rss 上 container label 为 “aaaa” 的指标内容,这个时候可以使用 label_replace 来重写不同的 label 为相同的值,on() 函数中添加相同指标的值即可完成查询。
如下所示
sum without(
node,instance,job,name,id,image,metrics_path,endpoint,service,pod)(
label_replace(
container_memory_rss{container=~".*$module.*",}
,"ints","$1","pod", "(.*)"
)
)
!= on(ints)
group_left()
sum by(ints)
(sum without (job,pod,container) (
label_replace(
jvm_memory_used_bytes{instance="$instance"}
,"ints","$1","pod", "(.*)"
)
)
)
Reference
- [1] Optimizing, and Logical Grouping of Queries
- [2] Using group_left to calculate label proportions
- [3] Inside some complex Prometheus queries
- [4] Operators
本文发布于Cylon的收藏册,转载请著名原文链接~
链接:https://www.oomkill.com/2024/07/promql-advanced/
版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。