Prometheus中使用分隔符对标签值前缀进行分组



我正在创建Grafana仪表板,用于显示Jenkins使用Thanos/Prometheus收集的数据。每个jenkins作业都通过github中的分支和标记进行标记。这意味着有很多构建是相似的。例如:CCD_ 1,testbuild1/branch1testbuild1/branch2testbuild1/1.2.3等。这些由标签名称jenkins_job定义

我想用一个prometheus查询聚合每个唯一构建中的度量,并重新标记它们。

例如,我希望testbuild1的所有分支和标记都组合成一个度量,这样我就可以计算每个构建的所有失败。我想我可以通过治疗"/"作为分隔符,但我无法正确查询。

所以如果CCD_ 6有1个故障,则CCD_。新度量将读取具有8个失败的CCD_ 9。

我试过这种label_join(default_jenkins_builds_duration_milliseconds_summary_count{ status="FAILURE"}, "jenkins_job", "/", "jenkins_job")

我想我可能误解了查询语言。我该如何让它发挥作用?

您需要使用label_replacement函数。例如,以下查询提取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((之后应用的,因为否则查询将无法按预期工作-有关详细信息,请参阅这些文档。

最新更新