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

问题描述 投票:0回答:1
我认为我的请求很常见,但我一直无法找到解决方案。

主题/摘要说明了一切,但为了提供更多色彩,我有一个通常在 0 到 100 之间的指标,但在某些奇怪的情况下,它会飙升至几千秒,这使其余 0-100 数据相形见绌。

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

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

请帮忙。

谢谢!

constants graphite
1个回答
4
投票
最简单的方法是使用

transformNulls

 所以查询看起来像:

transformNull(removeAboveValue(some.metric.avg, 100), 110)
请注意,上面还将 110 设置为实际间隙。当然,您可以在原点度量中再次使用

transformNull

将间隙标记为... -1(或其他)

transformNull(removeAboveValue(transformNull(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 ) )
    
    
© www.soinside.com 2019 - 2024. All rights reserved.