jenkins Prometheus中按分隔符分组标签值前缀

xqnpmsa8  于 2022-11-02  发布在  Jenkins
关注(0)|答案(1)|浏览(136)

我正在创建Grafana Jmeter 板,显示从Jenkins收集的数据,这些数据来自Thanos/Prometheus。每个Jenkins作业都由github的分支和标签标记。这意味着有很多构建是相似的。例如:testbuild1/branch1testbuild1/branch2testbuild1/1.2.3等。这些由标签名称jenkins_job定义
我想用一个prometheus查询来聚合每个唯一构建中的指标,并重新标记它们。
例如,我希望将testbuild1的所有分支和标记合并到一个度量中,这样我就可以计算每个构建的所有失败次数。我认为我可以通过将“/”作为分隔符来实现这一点,但我无法正确执行查询。
因此,如果x1M5 N1 x具有1个故障,则x1M6 N1 x具有3个故障,并且x1M7 N1 x具有4个故障,则新的度量将读取具有8个故障的x1M8 N1 x。
我试过类似label_join(default_jenkins_builds_duration_milliseconds_summary_count{ status="FAILURE"}, "jenkins_job", "/", "jenkins_job")的东西
我想我可能误解了查询语言。我该如何让它工作呢?

emeijp43

emeijp431#

您需要使用label_replace函数。例如,下面的查询提取jenkins_job标签部分,直到第一个/字符,并存储它,而不是原始的jenkins_job标签值:

label_replace(
default_jenkins_builds_duration_milliseconds_summary_count{ status="FAILURE"},
  "jenkins_job",
  "$1",
  "jenkins_job",
  "([^/]+)/.+"
)

如果您想统计给定时间段内(比如说过去一小时(1h))多个jenkins作业的汇总失败次数,则必须使用以下promql查询:

sum(
  label_replace(
    increase(
default_jenkins_builds_duration_milliseconds_summary_count{ status="FAILURE"}[1h]),
    "jenkins_job",
    "$1",
    "jenkins_job",
    "([^/]+)/.+"
  )
) by (jenkins_job)

此函数使用sum()聚合函数。
请注意,label_replace()函数是在increase()之后应用的,因为如果不这样做,查询将无法按预期工作-有关详细信息,请参阅这些文档。

相关问题