You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

添加relabeling规则后,如何合并Grafana/Prometheus指标序列?

解决Prometheus指标因新增标签分裂为两条序列的问题

问题原因

你新增ec2_vpc_id标签后,旧指标是添加规则前抓取的(无该标签),新指标是规则生效后抓取的(带有该标签)。Prometheus会将标签集不同的指标视为独立时间序列,因此图表中会显示两条独立曲线。

解决方案

1. 查询层面合并(最快生效,无需修改Prometheus配置)

通过PromQL的label_replace函数,给无ec2_vpc_id标签的旧指标补充默认标签值,让新旧指标的标签集对齐,从而合并为同一条序列。修改查询语句为:

label_replace(node_load1{instance="$node",job="$job"}, "ec2_vpc_id", "unknown", "", "")

如果需要更精准匹配无标签的指标,也可以用or组合查询:

node_load1{instance="$node",job="$job",ec2_vpc_id=~".*"} or label_replace(node_load1{instance="$node",job="$job",ec2_vpc_id!~".*"}, "ec2_vpc_id", "unknown", "", "")

解释:label_replace会为所有无ec2_vpc_id的指标添加ec2_vpc_id="unknown"标签,让新旧指标的标签集一致,Grafana会自动将它们合并为一条曲线。

2. Prometheus配置优化(避免未来再出现类似问题)

修改relabel规则,当__meta_ec2_vpc_id不存在时,给ec2_vpc_id设置默认值,确保所有新抓取的指标都带有该标签:

- job_name: ec2
  scrape_interval: 15s
  scrape_timeout: 10s
  metrics_path: /metrics

  relabel_configs:
  - source_labels: [__meta_ec2_vpc_id]
    separator: ;
    regex: (.*)
    target_label: ec2_vpc_id
    replacement: $1
    action: replace
  # 新增规则:当元数据为空时设置默认标签值
  - source_labels: [__meta_ec2_vpc_id]
    regex: ""
    target_label: ec2_vpc_id
    replacement: "unknown"
    action: replace
  ec2_sd_configs:
  - endpoint: ""
    region: us-west-1
    port: 1234

这条新增规则会匹配__meta_ec2_vpc_id为空的场景,给ec2_vpc_id设置默认值,确保后续抓取的所有指标都带有该标签,不会再出现序列分裂。

3. 清理旧指标(激进方案,按需使用)

如果旧的无标签指标已无保留价值,可以通过Prometheus管理API删除这些时间序列:

# 替换为你的Prometheus服务地址
curl -X POST -g 'http://your-prometheus-addr:9090/api/v1/admin/tsdb/delete_series' -d 'match[]=node_load1{instance="$node",job="$job",ec2_vpc_id!~".*"}'

执行后等待Prometheus完成数据清理(通常需要数分钟),图表就只会显示带标签的新指标。

内容的提问来源于stack exchange,提问作者boh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.13 03:33:20