重新标记配置中的 Prometheus 多源标签
Posted
技术标签:
【中文标题】重新标记配置中的 Prometheus 多源标签【英文标题】:Prometheus multiple source label in relabel config 【发布时间】:2022-01-02 16:20:42 【问题描述】:由于某种原因,我在 k8s 中的 Pod 可能会被标记为 syscode
或 cib_syscode
,我如何将它们都重新标记为 cib_syscode
?也就是说,如果 pod 标记了其中之一,则选择其标签值作为结果。
我试过如下,但它不起作用,因为 target_label 是重复的。
- job_name: ncr
honor_labels: true
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: http
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_syscode]
separator: ;
regex: (.*)
target_label: cib_syscode
replacement: $1
action: replace
- source_labels: [__meta_kubernetes_pod_label_cib_syscode]
separator: ;
regex: (.*)
target_label: cib_syscode
replacement: $1
action: replace
期待您的回复,谢谢!
【问题讨论】:
提供的解决方案对您有帮助吗?你试过了吗? @kkopczak 是的,解决方法有效。但还是存在一个小问题,我会在回答区描述 【参考方案1】:尝试以下方法:
- job_name: ncr
honor_labels: true
scrape_interval: 30s
scrape_timeout: 30s
metrics_path: /metrics
scheme: http
kubernetes_sd_configs:
- role: pod
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_syscode, __meta_kubernetes_pod_label_cib_syscode]
separator: ;
regex: ([^;]+)
target_label: cib_syscode
replacement: $1
action: replace
如果设置了__meta_kubernetes_pod_label_syscode
或__meta_kubernetes_pod_label_cib_syscode
,则正则表达式应选择其值(即不包含分隔符;
的连续字符串)并将其分配给cib_syscode
目标标签。
【讨论】:
【参考方案2】:在解决相同问题时发现了这一点。 weibeld 的答案在设计上是正确的,但不幸的是,regexp + 替换不起作用(Prometheus 1.20)。这个可以:
relabel_configs:
- source_labels: [__meta_kubernetes_pod_label_syscode, __meta_kubernetes_pod_label_cib_syscode]
separator: ;
regex: '((.*);(.*))'
target_label: cib_syscode
replacement: '$2$3'
action: replace
【讨论】:
如果syscode
和cib_syscode
都存在怎么办?如何获取其中一个的值,任何一个都可以,假设我们取syscode
.@weibeld @taiga-elephant的值请看一下。以上是关于重新标记配置中的 Prometheus 多源标签的主要内容,如果未能解决你的问题,请参考以下文章