重新标记配置中的 Prometheus 多源标签

Posted

技术标签:

【中文标题】重新标记配置中的 Prometheus 多源标签【英文标题】:Prometheus multiple source label in relabel config 【发布时间】:2022-01-02 16:20:42 【问题描述】:

由于某种原因,我在 k8s 中的 Pod 可能会被标记为 syscodecib_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

【讨论】:

如果syscodecib_syscode 都存在怎么办?如何获取其中一个的值,任何一个都可以,假设我们取syscode.@weibeld @taiga-elephant的值请看一下。

以上是关于重新标记配置中的 Prometheus 多源标签的主要内容,如果未能解决你的问题,请参考以下文章

Prometheus(公制)使用逆正则表达式匹配/负前瞻重新标记配置

prometheus relabel 配置

prometheus relabel 配置

在 Prometheus 中将实例重新标记为主机名

6.prometheus重新打标

Prometheus 运维监控