PromQL聚合后如何通过标签过滤时间序列?
解决PromQL聚合后过滤标签的问题
你的写法出现解析错误,是因为PromQL语法不允许在聚合表达式的括号后直接使用向量选择器({label_2="some_value"})。向量选择器只能直接作用于原始时间序列,不能直接用于聚合操作的结果。
下面提供两种可行的实现方式:
方式一:先过滤原始指标再聚合(推荐)
这种方式性能更优,因为先通过标签过滤减少了需要聚合的数据量,再执行聚合操作。
如果只需要按label_1聚合且不需要保留label_2:
sum(metric_1{label_2="some_value"}) by (label_1)
如果需要聚合结果中保留label_2标签:
sum(metric_1{label_2="some_value"}) by (label_1, label_2)
方式二:聚合后再过滤(适用于特殊场景)
如果业务逻辑要求必须先完成聚合再过滤,可以利用PromQL的匹配操作来实现:
sum(metric_1) by (label_1, label_2) and on(label_2) vector(1){label_2="some_value"}
这里通过and on(label_2)将聚合结果与仅包含目标label_2值的向量匹配,从而过滤出符合条件的结果。
内容的提问来源于stack exchange,提问作者Shauryagoel
相关产品推荐
相关产品推荐

