如何配置Prometheus实现跨job的metrics标签合并关联
如何将job_2指标的标签添加到job_1的所有指标中
场景说明
我有两个Prometheus Job的配置:
- job: job_1 static_configs: - targets: ['192.168.1.1:7777'] - job: job_2 static_configs: - targets: ['192.168.1.1:8888']
其中:
- job_1包含多个指标,示例:
kube_node_work{node:192.168.1.1,work_1:value_1....} - job_2的
kube_node_home指标带有17个标签,示例:kube_node_home{instance:"192.168.1.1",home_1:value_2....}
需求是把kube_node_home的所有标签添加到job_1的所有指标中,最终效果示例:kube_node_work{node:192.168.1.1,work_1:value_1,home_1:value_2....}
解决方案
跨Job的标签转移无法通过采集阶段的relabel_configs实现,必须借助**Prometheus记录规则(Recording Rules)**完成,具体步骤如下:
1. 统一关联标签(可选但推荐)
job_1用node标识节点,job_2用instance,为了通用关联,先给job_1的指标添加instance标签,修改job_1的采集配置:
- job: job_1 static_configs: - targets: ['192.168.1.1:7777'] relabel_configs: - source_labels: [node] # 读取原node标签的值 target_label: instance # 生成instance标签
修改后job_1的指标会同时拥有node和instance标签,和job_2的标签统一,方便后续关联。
2. 创建记录规则文件
新建规则文件(比如add_labels_rules.yaml),内容如下:
groups: - name: add_job2_labels_to_job1 rules: - record: kube_node_work_with_home_labels # 新指标名称,可根据需求调整 expr: > kube_node_work * on(instance) # 通过instance标签关联两个Job的指标 group_left(home_1, home_2, ..., home_17) # 列出job_2需要添加的所有标签名 (kube_node_home{job="job_2"} * 1) # 保持job_2指标值不变,作为关联数据源
注意:
- 把
home_1, home_2, ..., home_17替换成kube_node_home实际的17个标签名 - 如果不需要逐个指定标签,可直接写
group_left(),但要注意避免标签名冲突(比如job标签会覆盖job_1的原有job标签),这种情况建议还是逐个列出需要的标签。
3. 加载规则文件到Prometheus
在Prometheus主配置文件中添加规则文件路径:
rule_files: - "add_labels_rules.yaml" # 确保路径和实际文件位置一致
4. 重启Prometheus
重启后等待规则生效,即可查询到带有job_2所有指定标签的新指标kube_node_work_with_home_labels。
如果需要直接覆盖原kube_node_work指标,可将record的值改为kube_node_work,但不建议这么做,保留原指标更利于问题排查。
内容的提问来源于stack exchange,提问作者yanzhiluo
相关产品推荐
相关产品推荐

