如何在Prometheus relabel_configs中用正则提取路径字段?
解决Prometheus relabel提取标签字段的问题
针对你的需求,我调整了relabel配置,能直接提取最后一个字段service和倒数第二个字段中的数字1,修正后的配置如下:
relabel_configs: # 提取groupname最后一个字段作为service标签 - source_labels: [groupname] target_label: service regex: '.+/(.+)$' replacement: '${1}' # 提取倒数第二个字段中的数字作为num标签 - source_labels: [groupname] target_label: num regex: '.+/([^/]+)\.(\d+)/[^/]+$' replacement: '${2}'
配置说明
- 提取service:正则
.+/(.+)$会匹配任意字符直到最后一个/,捕获后面的所有内容(也就是最后一个字段),通过${1}将其赋值给service标签。相比你原来的配置,这个正则不依赖固定前缀路径,适配性更强,同时去掉了多余的引号转义符号,避免匹配失败。 - 提取数字:正则
.+/([^/]+)\.(\d+)/[^/]+$精准定位到倒数第二个字段,捕获其中的数字部分(第二个分组${2}),直接赋值给num标签,省去了中间的tmp标签步骤,更简洁高效。
原配置问题分析
- 第一个relabel的正则里包含
"(引号转义字符),但你的groupname值本身没有引号,导致正则无法匹配成功。 - 提取数字的步骤中,tmp标签的正则
[^/]+\d没有设置捕获分组,所以${1}为空,后续自然无法提取到数字。
内容的提问来源于stack exchange,提问作者user10536291
相关产品推荐
相关产品推荐

