我有一个相当具体的用例需要繁殖:
然后我需要同时使用AB
,CD
... YZ
来计算结果,我们称之为ABYZ
。真正的转变更为复杂,但让我们跳过它,因为它并不重要。
如果我预先算出AB
和CD
,那么这将使我的生活更轻松,因为我可以使用Grafana中的模板变量来查询它。
假设我可以指定变量$include
,它可以是对的列表:AB
,CD
等。
然后,我可以通过包含一些指标并排除其中的一些来轻松控制ABYZ
的结果。
在我当前的架构中,如果没有预先计算指标,则无法使用模板变量,因为在此阶段无法确定哪个指标应乘以哪个指标。
假设我想获得此Graphite查询的结果: 别名(diffSeries(maxSeries(multiplySeries)(maxSeries(stats.gauges.stock。{stock1,stock2} .offers。 EUR .bid。),averageSeries(stats.gauges.stock.currency。 fidor。 .EUR.PLN)),maxSeries(stats.gauges.stock。{stock1,stock2} .offers。 PLN .bid。*)),minSeries(multiplySeries(minSeries( stats.gauges.stock。{stock1,stock2} .offers。 EUR .ask。),averageSeries(stats.gauges.stock.currency.fidor。 .EUR.PLN )),minSeries(stats.gauges.stock。{stock1,stock2} .offers。 PLN .ask。*))),'diff')
并将其存储在此指标中:stats.gauges.stock.diff
是否有任何解决方案可以从现有指标中创建新指标?我想跳过StatsD图层并直接触摸graphite
/ carbon
图层(如果可能的话)。
答案 0 :(得分:1)
你绝对可以编写一个小脚本,可以从石墨中查询值A,B等,并将AB等输入碳中,这样你就可以从石墨中查询它们了。
几乎任何语言都应该足够,石墨API只是基于HTTP的JSON,碳协议甚至更简单。这是一个小的PHP脚本,我写了一段时间后从家庭自动化系统获取值,并在进行一些转换后将它们输入碳。它只是在适当的时间间隔内通过cron运行。您应用的唯一区别是您从石墨而不是外部系统中提取原始值。