Prometheus relabeling正则配置:移除可选的-admin后缀
我来帮你解决这个问题!Go的RE2正则引擎确实不支持负向预查这类断言,不过我们可以用两种简洁的方式实现你想要的效果——要么用两条relabel规则,要么用一个兼容RE2的正则表达式一次性处理所有情况。
方案一:两条relabel规则(顺序很关键)
先处理带-admin后缀的服务名,再处理不带的。这样能确保所有符合格式的服务名都被正确映射:
# 先匹配并移除末尾的-admin - source_labels: ['__meta_consul_service'] regex: '^([a-zA-Z]+(-[a-zA-Z]+)*)-admin$' target_label: 'job' replacement: '$1' # 处理不带-admin的服务名,直接复制原内容 - source_labels: ['__meta_consul_service'] regex: '^[a-zA-Z]+(-[a-zA-Z]+)*$' target_label: 'job' replacement: '$1'
这里的^和$是锚点,确保我们匹配的是整个服务名,而不是中间包含-admin的子串(虽然你的模式里不会出现这种情况,但加上更严谨)。
方案二:单条规则+可选非捕获组
用一个正则同时匹配两种情况,利用非捕获组(?:-admin)?表示-admin是可选后缀,捕获组1始终保留我们需要的核心部分:
- source_labels: ['__meta_consul_service'] regex: '^([a-zA-Z]+(-[a-zA-Z]+)*)(?:-admin)?$' target_label: 'job' replacement: '$1'
这个方案更简洁,一次规则就能处理所有场景:
- 对于
foo-bar-baz或foo,捕获组1就是原字符串,替换后不变 - 对于
qux-quuz-admin,捕获组1是qux-quuz,自动移除了后缀
验证效果
两种方案都能完美匹配你给出的示例:
foo-bar-baz→foo-bar-bazfoo→fooqux-quuz-admin→qux-quuz
内容的提问来源于stack exchange,提问作者Alban Dericbourg
相关产品推荐
相关产品推荐

