在Graphite中,当数据高于常量时,如何将数据限制为常量?

时间:2017-01-12 15:17:22

标签: constants graphite

我认为我的请求很常见,但我还没能找到解决方案。

主题/摘要说明了一切,但为了提供更多颜色,我的度量标准通常介于0到100之间,但在某些奇怪的情况下,它可以拍摄高达1000的数据,这使0-100数据的其余部分相形见绌

我的目标是,当数据超过100时,将其设置为110,以便我知道它的值超过100。

我唯一能找到的是removeAboveValue()但是在使用它时看起来好像数据丢失了。

请帮忙。

谢谢!

1 个答案:

答案 0 :(得分:1)

最简单的方法是使用transformNulls,因此查询将如下所示:

transfromNull(removeAboveValue(some.metric.avg, 100), 110)

请注意,上面还将设置110到真正的差距。当然,您可以在原点指标中再次使用transformNull将间隙标记为... -1(或其他)

transfromNull(removeAboveValue(transfromNull(some.metric.avg, -1), 100), 110)

但这引入了魔法null has value,除了它的不好(误导)之外,并不总是可行的(如果指标可以有负值,零或其他)。

下一个解决方案是......

  1. 只准备超过数据点的行并将其值设置为110。它可以通过多种方式完成。我们采取一些简单的方法:

    一个。只得到100以上

    removeBelowValue(some.metric.avg, 100)
    

    湾使用除以相同指标的值将其值减小为1:

    divideSeries(removeBelowValue(some.metric.avg, 100), removeBelowValue(some.metric.avg, 100))
    

    ℃。将值设置为110 - 乘以110:

    scale(divideSeries(removeBelowValue(some.metric.avg, 100), removeBelowValue(some.metric.avg, 100)),110)
    
  2. 将准备好的指标与值低于阈值的指标合并(使用removeAboveValue)。作为合并功能,在这种情况下,请使用minSeries

    minSeries(
      removeAboveValue(some.metric.avg, 100), 
      scale(
        divideSeries(
          removeBelowValue(some.metric.avg, 100), 
          removeBelowValue(some.metric.avg, 100)
        ), 
        110
      )
    )