我正在尝试解决在 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 作为组的一部分来解决,但我不能只看到如何“截断”标签值来实现这一点。
此致
拉斯米兰
可以使用label_replace()函数将标签的所需部分提取到单独的标签中,然后在对结果求和时按此标签进行分组。例如,以下查询提取存储在标签中的project.sample-yfromproject.sample-y.jksdjkfs-2f16-11e7-3454-005056bf2fbf.2018.03.11值index并将提取的值放入project_name标签中。然后按标签值sum()分组:project_name
sum(
label_replace(metric, "project_name", "$1", "index", "(project[.][^.]+).+")
) by (project_name)
Run Code Online (Sandbox Code Playgroud)
虽然最好修复指标,但下一个最好的方法是使用metric_relabel_configs与此博客文章相同的技术:
metric_relabel_configs:
- source_labels: [index]
regex: 'project\.([^.]*)\..*'
replacement: '${1}'
target_label: project
Run Code Online (Sandbox Code Playgroud)
然后,您将拥有一个project可以照常使用的标签。
| 归档时间: |
|
| 查看次数: |
12970 次 |
| 最近记录: |