在 PromQL 查询中使用 max by,同时保留不属于“by”的标签

问题描述 投票:0回答:1

我正在尝试连接两个指标(

build_status
build_timestamp
),然后根据特定标签过滤掉重复项(
service
timestamp
)。
这就是我想到的:

max by (service, timestamp) (
  build_status{stage="$stage", envId="$env"} * on(stage, env, service, status) 
    group_left(timestamp) build_timestamp{stage="$stage", env="$env"}
)

这效果很好,除了

status
标签随后丢失,如果我将其添加到
max by
(即:
max by (service, timestamp, status)
),我可以将其恢复,但随后我会得到重复项,例如:

服务1时间戳1状态1
服务1 时间戳1 状态2

如何最大化服务和时间戳但保留状态标签?
谢谢!

prometheus promql
1个回答
0
投票

来自普罗米修斯原始文档:

topk 和 Bottomk 与其他聚合器的不同之处在于,它的子集 输入样本(包括原始标签)返回 结果向量。 by 和 without 仅用于对输入进行存储 矢量。

所以你可以在你的情况下使用topk:

  topk by(service, timestamp) (1,
  build_status{stage="$stage", envId="$env"} * on(stage, env, service, status) 
    group_left(timestamp) build_timestamp{stage="$stage", env="$env"}
)
© www.soinside.com 2019 - 2024. All rights reserved.