我正在尝试从Prometheus重新标签配置(基于正则表达式)中的变量中提取值。所有值都与模式匹配:
[a-zA-Z]+(-[a-zA-Z]+)*
我想获取该值并在-admin
部分存在时删除它。
示例:
foo-bar-baz -> foo-bar-baz
foo -> foo
qux-quuz-admin -> qux-quuz
如果所有值都有-admin
,我会写:
- source_labels: ['__meta_consul_service']
regex: '(.*)-admin'
target_label: 'job'
replacement: '$1'
但情况不一定如此。
我可能已经做了一个负向前瞻(?!...
)但看起来Go不支持。
这样做的方法是什么?
答案 0 :(得分:0)
这个怎么样?
# Remove '-admin' suffix from `__meta_consul_service`. Ignored if not present.
- source_labels: ['__meta_consul_service']
regex: '(.*)-admin'
target_label: '__meta_consul_service'
replacement: '$1'
# Store the (possibly trimmed) result in `job`.
- source_labels: ['__meta_consul_service']
target_label: 'job'
replacement: '$1'
Haven没试过,但它应该有效。
答案 1 :(得分:0)
*
是一个贪婪的运算符:它尽可能匹配。有一个非贪婪的运算符:*?
。
它增加了最短的""到*
运营商。
配置更改为:
- source_labels: ['__meta_consul_service']
regex: '(.*)-admin'
target_label: 'job'
replacement: '$1'
为:
- source_labels: ['__meta_consul_service']
regex: '(.*?)(-admin)?'
target_label: 'job'
replacement: '$1'