我正在尝试解决在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答案 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。