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

如何在Grafana(Graphite)中基于两个序列生成未解决缺陷时间序列?

解决Graphite中计算未解决缺陷时间序列的方法

我完全懂你的困扰——Graphite默认函数里确实没有直接“调用前一个数据点”的选项,但咱们可以换个思路,用累计净变化+初始值的方式完美复现你Excel里的公式逻辑,和你要的上期未解决数+当期新增数-当期关闭数完全一致。

核心逻辑拆解
Excel的公式本质是每天计算累计净变化:当天的未解决数 = 初始未解决数 + 所有历史天数的(新增-关闭)之和。Graphite的cumulativeSum函数正好能帮我们实现这个累计求和的操作。

具体实现步骤

假设你的新增缺陷序列是defects.daily.added,关闭缺陷序列是defects.daily.closed,按以下步骤构建查询:

  • 计算每日净变化
    先算出每天新增与关闭的差值,这就是当天未解决数的变化量:

    defects.daily.added - defects.daily.closed
    
  • 累计净变化求和
    用cumulativeSum对每日净变化做累加,得到从时间序列起始点开始的累计变化量:

    cumulativeSum(defects.daily.added - defects.daily.closed)
    
  • 加入初始未解决数(可选但重要)
    如果在你的时间序列开始记录之前,已经存在未解决的缺陷,需要把这个初始值加进去。比如初始值是100,就用addSeries函数:

    addSeries(cumulativeSum(defects.daily.added - defects.daily.closed), 100)
    
  • 处理负数情况(可选)
    避免某天关闭的缺陷比新增的多,导致未解决数出现负数,用nonNegative函数确保数值≥0:

    nonNegative(addSeries(cumulativeSum(defects.daily.added - defects.daily.closed), 100))
    
  • 处理缺失数据(可选)
    如果某天没有新增/关闭数据,Graphite会显示null,可能影响计算。用fillNull(0)把null替换为0:

    nonNegative(addSeries(cumulativeSum(fillNull(defects.daily.added, 0) - fillNull(defects.daily.closed, 0)), 100))
    

为什么这个方法有效?
cumulativeSum会自动把每一天的净变化(新增-关闭)累加起来,等价于每天的未解决数 = 前一天的未解决数 + 当天新增 - 当天关闭,和你Excel里的公式逻辑完全匹配。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.13 08:55:09