使用Prometheus联邦采集指标时出现重复指标该如何解决?
解决方案
根因说明
你遇到的重复指标分别来自两个数据源:主Prometheus本地kube-prometheus栈生成的聚合指标、联邦拉取的子集群同名指标。当前配置存在两个核心问题:
- 主、子集群的
cluster标签配置重复,均为sample-eks,无法通过集群标签区分不同集群的指标,逻辑上判定为同集群的重复数据 - 联邦拉取时如果子集群指标本身不携带
job/prometheus/prometheus_replica标签,主集群的联邦抓取作业会自动附加这些标签,导致同名称指标出现两套标签集,触发同时间戳数值冲突告警。
调整步骤
1. 配置唯一集群标识
首先分别修改主、子集群的kube-prometheus配置,保证每个集群的全局外部标签cluster取值唯一,比如子集群改为sample-eks-child,主集群保留sample-eks,从根源上区分不同集群的指标,避免逻辑重复。
kube-prometheus的全局外部标签可以在Prometheus自定义资源的spec.externalLabels字段配置,示例:
spec: externalLabels: cluster: sample-eks # 主集群填主集群标识,子集群填子集群唯一标识
2. 优化联邦抓取配置
如果不需要保留主集群抓取作业附加的多余标签,可以在联邦作业配置中添加metric_relabel_configs删除指定标签,保证拉取到的子集群指标和子集群原生标签完全一致:
- job_name: 'federate' scrape_interval: 15s honor_labels: true metrics_path: '/federate' params: 'match[]': - '{job=~".*"}' static_configs: - targets: - 'prometheus-sample.dev.xyz.com' # 新增以下relabel配置删除多余标签 metric_relabel_configs: - action: labeldrop regex: '(job|prometheus|prometheus_replica)'
3. 可选:过滤联邦拉取的指标
如果主集群本身已经生成了对应聚合指标,不需要重复拉取子集群的聚合指标,可以修改联邦的match[]规则,只拉取原始指标不拉取聚合指标,避免重复:
params: 'match[]': # 只拉取原始指标,忽略冒号分隔的聚合规则指标 - '{job=~".+", __name__!~".*:.*"}'
验证方式
调整配置重载Prometheus后,查询namespace_workload_pod:kube_pod_owner:relabel指标,只会出现对应不同cluster标签的指标,没有同集群下标签不一致的重复指标,同时日志中的Error on ingesting samples with different value but same timestamp告警消失。
内容的提问来源于stack exchange,提问作者malcolm
相关产品推荐
相关产品推荐

