普罗米修斯组由标签的子串

时间:2018-03-17 08:56:46

标签: 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

所以,如果我在&#34;索引&#34;中有短版本的值我会做的标签:

sum(metric) by (index)

但我想做的是这样的事情:

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

我可以通过&#34;索引&#34;的子字符串进行分组。标签。如何使用Prometheus查询完成此操作?我认为这可以使用label_replace作为小组的一部分来解决,但我不能看到如何&#34;截断&#34;实现这一目标的标签价值。

祝你好运

Lars Milland

2 个答案:

答案 0 :(得分:4)

虽然最好修复指标,但下一个最好的方法是使用与this blog post相同的技术来使用metric_relabel_configs

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

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

答案 1 :(得分:1)

看起来index标签命名约定是错误的。这些成分应该明显是单独的度量标签。因此,您应该使用标签存储时间序列而不是project.<projectname>.<uniqueid>.<date>,而不是project{projectname="xxx", uniqueid="yyy"}

date

至于timestamp()部分,我认为样本时间戳本身已经涵盖了这一点?有许多功能,例如month()day()index等来操作时间戳。

所以你有两个选择:

  • 修正指标导出程序以分隔标签,而不是将此信息连接到指标名称本身,
  • 或者,如果您无法更改导出器,请使用指标重新标记$("#body").val("Dear Supplier,\n\nWe would like to cancel our order of [product specifications] made on [date of order submission]. Please send us a reply to provide confirmation at earliest convenience. \nThank you.\n\nYours sincerely,\n..."); 标签转换为具有上述标签集的新时间​​序列。然后,您可以按照描述使用标准的Prometheus功能。有关如何执行此操作的示例,请参阅this article