Press "Enter" to skip to content

Prometheus的label处理

Prometheus能否在查询的时候对label进行2次处理呢?答案是可以的。Prometheus提供了一系列函数可以在Query的时候进行二次处理,本文要介绍的函数是label_replace()。

我们都知道,在 Prometheus 的配置文件里,不论targets里的ip是否带了:9100,最终形成的instance里面都会给你带上这个端口,形成像192.168.1.1:9100这样的格式。这个 instance本身就是一个 Prometheus 内置的label(这里指192.168.1.1:9100)。今天我们演示一下把讨厌的:9100去掉。

虽然我们也可以使用Variables功能来对instance进行正则化处理(如下图),但是处理以后的结果,在dashboard里面无法选中单个主机。因此这种方法是有bug的(不推荐使用)。

 使用Variables功能来对instance进行正则化处理
使用Variables功能来对instance进行正则化处理

Prometheus在query的时候提供了一个label_replace的函数,可以对label进行二次处理。它的语法是

label_replace(query语句, "new_label", "$1new_string$2", "old_label", "(.*)string(.*)")

这个语句的意思是,对old_label进行二次处理,假设old_label的语法是(.*)string(.*),前一个括号里匹配的是$1,后一个括号里匹配的是$2,它们通过string分割。再将$1和$2使用“$1new_string$2”的语法进行重新拼接,最终形成了一个new_label。下面是2个用法。

Prometheus对label进行二次处理
Prometheus对label进行二次处理

参考文档:
Prometheus Functions官方文档
Add filters to legend formatter with Prometheus datasource

Leave a Reply

Your email address will not be published. Required fields are marked *