Prometheus 按标签子串分组

Lar*_*and 4 prometheus

我正在尝试解决在 Prometheus 中对指标进行总和和分组查询的问题,其中分配给指标值的标签对我的总和和按要求分组是唯一的。

我有一个 ElasticSearch 索引的度量采样大小,其中索引名称标记在度量上。索引的命名方式如下,并放置在标签“index”中:

project.<projectname>.<uniqueid>.<date>

具有如下所示的具体值:

project.sample-x.ad19f880-2f16-11e7-8a64-jkzdfaskdfjk.2018.03.12

project.sample-y.jkcjdjdk-1234-11e7-kdjd-005056bf2fbf.2018.03.12

project.sample-x.ueruwuhd-dsfg-11e7-8a64-kdfjkjdjdjkk.2018.03.11

project.sample-y.jksdjkfs-2f16-11e7-3454-005056bf2fbf.2018.03.11

因此,如果我在“索引”标签中有简短版本的值,我会这样做:

sum(metric) by (index)

但我想做的是这样的:

sum(metric) by ("project.<projectname>")

我可以在其中按“索引”标签的子字符串进行分组。这如何通过 Prometheus 查询来完成?我认为这可能可以使用 label_replace 作为组的一部分来解决,但我不能只看到如何“截断”标签值来实现这一点。

此致

拉斯米兰

val*_*ala 7

可以使用label_replace()函数将标签的所需部分提取到单独的标签中,然后在对结果求和时按此标签进行分组。例如,以下查询提取存储在标签中的project.sample-yfromproject.sample-y.jksdjkfs-2f16-11e7-3454-005056bf2fbf.2018.03.11index并将提取的值放入project_name标签中。然后按标签值sum()分组:project_name

sum(
  label_replace(metric, "project_name", "$1", "index", "(project[.][^.]+).+")
) by (project_name)
Run Code Online (Sandbox Code Playgroud)


bri*_*zil 5

虽然最好修复指标,但下一个最好的方法是使用metric_relabel_configs此博客文章相同的技术:

  metric_relabel_configs:
  - source_labels: [index]
    regex: 'project\.([^.]*)\..*'
    replacement: '${1}'
    target_label: project
Run Code Online (Sandbox Code Playgroud)

然后,您将拥有一个project可以照常使用的标签。