我有一组AWS服务器,我使用Graphite跟踪统计信息。随着新版本软件的部署或群集大小的增大或缩小,群集中的服务器也会发生变化。
例如:
昨天增加了指标
servers.1.cpu
servers.2.cpu今天增加了指标
servers.2.cpu
servers.3.cpu
当我通过Graphite查看我的数据时,我只希望它向我显示具有我查询时间段数据的服务器的指标。但是,由于我不知道在该时间段内哪些服务器可用,我在查询中指定了*
,这导致群集中已存在的所有服务器都包含在该系列中。
查询最后15分钟:
服务器。* CPU
结果:
servers.1.cpu
servers.2.cpu
servers.3.cpu
有没有办法过滤掉那些没有系列数据的服务器?因此,在上面的示例中,我不包含来自servers.1.cpu
的指标。但是,如果我的查询时间段是昨天,我会得到servers.1.cpu
,但不是servers.3.cpu
。
答案 0 :(得分:1)
Graphite在第一次收到单个值时为度量标准分配所有空间。对于指标稀疏的任何系统,这导致非常低效的表示。例如,在服务器高度动态的系统中。我决定采用两种可能的解决方案:
使用指标的插槽名称而不是实际的服务器标识符(IP)。我真的不喜欢这样,因为它会导致您使用插槽名称查找服务器,然后才能真正转到生成指标的服务器。
请改用InfluxDB。 InfluxDB仅存储您实际提供的指标,而查询仅返回实际存在要返回的数据的数据。此结果是一个紧凑的表示形式,仅显示在查询的时间跨度内实际具有数据的度量标准的数据。
答案 1 :(得分:0)
我们对通过statsd发送到Graphite的指标存在类似问题。在某些情况下,我已经能够使用currentAbove(0)
过滤掉没有“有趣”值的系列;这对于collectd load plugin的值来说是成功的。
仪表是一个特殊的问题,因为一旦AWS实例终止,该实例的所有仪表量度将保持“卡在”它们的最后一个值。
我在这个领域有一些想法:
开发过滤常数系列的想法,averageAbove(integral(nonNegativeDerivative(...)), 1)
似乎是一个好的开始,但我无法弄清楚如何仅显示原始系列。