Prometheus中label名不一致的常用解决方案
在Prometheus的时候,有时候出于某种目的,经常会有要重命名label的需要。比如,老K8S集群上标识pod名的label叫pod_name,新K8S集群上的pod名label叫pod, 这种不一致会造成一些不必要的麻烦。为了保障label取值的统一,这里介绍两种常用的方法。采集时处理使用metric_relabel_configs来实现。下面这段配置会添加一个名为pod_name的labe
·
在Prometheus的时候,有时候出于某种目的,经常会有要重命名label的需要。比如,老K8S集群上标识pod名的label叫pod_name
,新K8S集群上的pod名label叫pod
, 这种不一致会造成一些不必要的麻烦。为了保障label取值的统一,这里介绍两种常用的方法。
采集时处理
使用metric_relabel_configs来实现。下面这段配置会添加一个名为pod_name
的label,其值为pod
的值:
metric_relabel_configs:
- source_labels: [pod]
regex: (.+)
target_label: pod_name
replacement: $1
action: replace
这样,采集后的指标同时有pod
和pod_name
的label,这样在pod相关监控的查询和Grafana作图时,能同时兼容新老K8S集群了。
查询时处理
使用label_replace函数,可以在查询时,将结果添加一个想要的label。其具体语法格式如下:
label_replace(v instant-vector, dst_label string, replacement string, src_label string, regex string)
函数的括号里面有4个逗号分割的5个参数:
- v是瞬时矢量指标
- dst_label将要添加的label名
- replacement为dst_label的值,通常是第5个参数正则匹配取出的值
- src_label是第5个参数正则取值的源label名
- regex是正则表达式
看下面这个官网上提供的例子:
label_replace(up{job="api-server",service="a:c"}, "foo", "$1", "service", "(.*):.*")
其作用是,添加一个名为foo的标签,其值是通过正则取的$1,是名为service的label的冒号前面部分的字符,即a
需要注意的是,如果正则表达式没有匹配到,则不会添加label。
如下是一个通过label_replace函数添加pod_name
的示例:
更多推荐
已为社区贡献6条内容
所有评论(0)