如何让Pushgateway接收的指标保留原始生成实例的job与instance标签
核心原因
Prometheus默认抓取目标时,若指标自带的标签与当前抓取任务的目标标签(此处就是push-gateway任务的job=push-gateway、instance=localhost:9091)冲突,会自动给指标自带的同名标签加上exported_前缀,避免覆盖抓取任务的标签。
要实现自定义指标和原虚拟机标签一致,有两种常用方案:
方案1:开启honor_labels配置(更简单,推荐)
直接修改Prometheus中push-gateway的抓取配置,添加honor_labels: true参数,开启后Prometheus会优先保留指标本身携带的标签,不会追加前缀也不会用抓取任务的标签覆盖:
- job_name: 'push-gateway' static_configs: - targets: ['localhost:9091'] honor_labels: true
配置修改后重载Prometheus,后续从各个虚拟机推送指标到Pushgateway时,只要给指标附带的job、instance标签值和WMI exporter自动发现的对应虚拟机标签值完全一致,抓取后的标签就会和虚拟机原生标签匹配,直接使用原有Grafana变量即可筛选。
方案2:通过 relabel 规则重写标签(适合需要避免标签冲突的场景)
如果不想全局开启honor_labels,可以通过指标重打标签的规则,把自动生成的exported_job、exported_instance覆盖到原来的job、instance标签上,再删除多余的前缀标签:
- job_name: 'push-gateway' static_configs: - targets: ['localhost:9091'] metric_relabel_configs: # 用exported_job覆盖job标签 - source_labels: [exported_job] target_label: job action: replace # 用exported_instance覆盖instance标签 - source_labels: [exported_instance] target_label: instance action: replace # 删除多余的exported_前缀标签 - regex: 'exported_job|exported_instance' action: labeldrop
这个方案不需要修改推送侧的逻辑,只要你推送指标时已经附带了正确的job、instance标签即可生效。
内容的提问来源于stack exchange,提问作者Python_Rookie
相关产品推荐
相关产品推荐

