本文发布于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

向量查询

向量查询关键词为 onignoring

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

本文发布于Cylon的收藏册,转载请著名原文链接~

链接:https://www.oomkill.com/2024/07/promql-advanced/

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」 许可协议进行许可。