Prometheus relabel配置如何合并两个来源标签为同一cib_syscode
问题根因
Prometheus的relabel规则按从上到下的顺序执行,你当前的配置默认匹配所有值(包括空值),会出现覆盖问题:
- 当Pod仅带
syscode标签时,第一条规则给cib_syscode赋值成功后,第二条规则会匹配到空的__meta_kubernetes_pod_label_cib_syscode,直接把已有的cib_syscode值覆盖为空。 - 当Pod仅带
cib_syscode标签时,第一条规则匹配空值不执行,第二条规则可正常赋值。
正确配置
给每条规则加上非空匹配规则regex: (.+),只有对应来源标签存在且有值时才会执行替换,不会出现空值覆盖的情况。如果两个标签同时存在时优先取原生cib_syscode的值,把cib_syscode的匹配规则放在后面即可:
- job_name: ncr honor_labels: true scrape_interval: 30s scrape_timeout: 30s metrics_path: /metrics scheme: http kubernetes_sd_configs: - role: pod relabel_configs: # 匹配syscode标签,仅标签有值时赋值 - source_labels: [__meta_kubernetes_pod_label_syscode] regex: (.+) target_label: cib_syscode replacement: ${1} action: replace # 匹配原生cib_syscode标签,有值时覆盖之前的赋值,优先级更高 - source_labels: [__meta_kubernetes_pod_label_cib_syscode] regex: (.+) target_label: cib_syscode replacement: ${1} action: replace
如果需要syscode优先级更高,调换两条规则的顺序即可。和默认值一致的separator参数可以直接省略。
内容的提问来源于stack exchange,提问作者Leslie__Joe
相关产品推荐
相关产品推荐

