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

如何在Grafana中累加两个不同Counter指标的数值?

问题描述

我拥有两个Counter指标(假设为c1和c2),希望在Grafana面板中展示两者的总和c1+c2。当执行c1+c1时面板能正确显示数值,但执行c1+c2时返回null值。

可正常运行的查询语句

sum by (level1,level2,level3)
(
  sum_over_time(
    sponsored_products_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
) + sum by (level1,level2,level3)
(
  sum_over_time(
    sponsored_products_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
)

返回null值的查询语句

sum by (level1,level2,level3)
(
  sum_over_time(
    sponsored_products_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
) + sum by (level1,level2,level3)
(
  sum_over_time(
    display_ads_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
)

单独查询结果

sponsored_products_service_counter_total

display_ads_service_counter_total查询结果

display_ads_service_counter_total

问题原因与解决方案

原因

Prometheus中,两个时间序列相加要求两边的标签集合完全匹配。如果sponsored_products_service_counter_total和display_ads_service_counter_total经过sum by(level1,level2,level3)聚合后,存在某组level1/level2/level3标签只在其中一个指标中存在,相加时这组标签对应的结果就会返回null,最终导致面板显示异常。

而c1+c1能正常运行,是因为两边的标签集合完全一致,所有标签组合都能匹配相加。

解决方案

方案1:放弃维度聚合(简单直接)

如果不需要保留level1/level2/level3维度,直接用sum()聚合所有标签,这样两边都生成单时间序列,即可正常相加:

sum(
  sum_over_time(
    sponsored_products_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
) + sum(
  sum_over_time(
    display_ads_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
)

方案2:补全缺失标签的0值(保留维度)

如果需要保留level1/level2/level3维度,对每个聚合后的结果添加or vector(0),这样缺失标签组合的指标会用0填充,确保所有标签组合都能匹配相加:

(sum by (level1,level2,level3)
(
  sum_over_time(
    sponsored_products_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
) or vector(0)) + (sum by (level1,level2,level3)
(
  sum_over_time(
    display_ads_service_counter_total{
      cloud_zone=~"$cluster_id",
      job="$app",
      namespace="$namespace",
      container="$container",
      pod=~"$pod"
    }[$__interval]
  )
) or vector(0))

方案3:检查并统一标签组合

查看两个指标的level1/level2/level3标签值,确认是否存在不一致的情况。如果是业务上的标签缺失,需要从指标采集端修正,确保两个指标的标签维度一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 01:07:47