如何使用Grafana的分组/标签功能来以Prometheus作为数据源
动机
使用 Grafana 的模板功能来调整 Prometheus 的标签时,随着项目的增加、选择变得繁琐,可能会出现一些不方便的情况。为了解决这个问题,我尝试使用了名为 groups/tags 的功能(至少在某种程度上),但是发现它并不像我想象的那样直观和易用,所以这篇笔记是为了帮助我理解它。
目标
使 Prometheus 的标签值的一部分作为标记以供使用。
用语言解释很难…看到最终的结果更快。
让我们试试看吧。
环境
普罗米修斯 2.10.0
Grafana 6.2.2
使用的指标 de
sample_metrics{label="hoge-1"} 1
sample_metrics{label="hoge-2"} 1
sample_metrics{label="hoge-3"} 1
sample_metrics{label="hoge-ex1"} 1
sample_metrics{label="hoge-ex2"} 1
sample_metrics{label="fuga-11"} 1
sample_metrics{label="fuga-12"} 1
sample_metrics{label="fuga-13"} 1
sample_metrics{label="piyo-xxx"} 1
sample_metrics{label="peko-vvv"} 1
这次我想要使用这个标签值前面的字符作为标记。预计将使用”hoge fuga piyo peko”作为标记。
过程
不管怎么说,我查看了一下文档,发现这个链接的页面写得很简洁明了…因为听说这是一个试验性功能,所以也没办法。
看起来像是通过标签查询来显示标签项目列表,
然后通过标签值查询来使用已获取的标签项目。
获得标签
无论如何,您需要获取所需的标签。
我想直接列举,但似乎不行,需要通过查询来获取。
对于使用prometheus,您可以使用以下内容:
https://grafana.com/docs/features/datasources/prometheus/#templating
如果我使用Prometheus的label_replace方法,虽然有点牵强,但我认为是可行的…结果看起来不行。
https://github.com/grafana/grafana/issues/11674
如果有和variables一样的正则表达式,就可以做到,但tag需要一次性查询才能获得。
看起来似乎需要提前将标签用作度量指标的标签附加到度量中。
因此,我们将在 Prometheus 的配置中使用 metric_relabel_config。
我们将对上述指标进行类似的 relabel 处理。
- job_name: 'sample'
static_configs:
- targets: ['target-host']
metric_relabel_configs:
- source_labels: ["label"]
target_label: tag
regex: "(.+)-.+"
通过名为tag的标签,在目标标签的前面的字符串被用作值创建一个标签。
所以,再次使用标签查询功能,
使用label_values(tag)
就获得了所需的标签。
使用Tag
通过这个方法,我们可以实现本次的目标,并且能够执行和开头的gif类似的动作。
杂感等等
由于这仅仅是一个实验性的功能,因此不应该抱有太大的期望。而且在未来,也不太能感受到功能会变得更加完善的氛围。
无论如何,我觉得获得标签太麻烦了,但其他数据源会更方便使用吗?