石墨和statsd,平均百分位数,stddev不正确

时间:2014-05-07 21:52:44

标签: node.js statistics graphite statsd

由于statsd计算每个刷新间隔的统计数据(默认为10秒),因此当查看更长的时间窗口时,Graphite似乎不能简单地对这些进行平均。例如,statsd发送6个刷新间隔的第90个百分位数。如果我在1分钟桶中查看数据,Graphite会对这些数据进行平均。仅仅取6个10秒百分位数的平均值来创建90分钟的分数是不准确的。

这也是其他统计数据的问题:mean,median,stddev。对于最小/最大/计数,可以轻松设置Graphite存储聚合以正确聚合。但是对于统计数据来说这是不正确的。

人们如何处理这个问题?

2 个答案:

答案 0 :(得分:0)

你做不到。提取百分位数本质上是一种无法逆转的有损运算。

分钟的算术平均值可以通过计算6个区间的所有值并除以所有六个区间的计数总和来计算,以恢复整个分钟的准确平均值;不完全是直截了当。

答案 1 :(得分:0)

我一直在考虑这个问题。

让我们以ICMP检查为例,测量服务的丢包率。您每隔10秒钟提交一次支票的最小值,最大值,平均值,90便士。

这是我的想法:

  1. 此问题不适用于非采样值(即,如果每10秒只有一个值)。

  2. 如果您要为时间段测量(即最小值,最大值,百分位数)发送某种采样测量值,无论是通过statsd还是直接检查,事情都会变得复杂。

    • min和max很容易。你可以直接滚动(正如你所指出的那样)
    • count也是一个特殊情况,正如你所说的那样......
  3. 但是当谈到百分位数......事情变得非常混乱。

    我认为能够使用计算出的百分位数进行累积/刷新可以大大缓解这个问题。

    我不确定这在技术上是一个石墨问题,但我觉得每个使用石墨来“可视化”百分位数据的人都必须遇到这个问题......但是我找不到那么多在线信息。

    目前,如果您希望在卷起期间的任意时间段内准确显示百分位数据,您将不得不使用类似ElasticSearch的内容并直接转到源数据(在这种情况下,每个结果都是用于导出统计信息的ping)