由于statsd计算每个刷新间隔的统计数据(默认为10秒),因此当查看更长的时间窗口时,Graphite似乎不能简单地对这些进行平均。例如,statsd发送6个刷新间隔的第90个百分位数。如果我在1分钟桶中查看数据,Graphite会对这些数据进行平均。仅仅取6个10秒百分位数的平均值来创建90分钟的分数是不准确的。
这也是其他统计数据的问题:mean,median,stddev。对于最小/最大/计数,可以轻松设置Graphite存储聚合以正确聚合。但是对于统计数据来说这是不正确的。
人们如何处理这个问题?
答案 0 :(得分:0)
你做不到。提取百分位数本质上是一种无法逆转的有损运算。
分钟的算术平均值可以通过计算6个区间的所有值并除以所有六个区间的计数总和来计算,以恢复整个分钟的准确平均值;不完全是直截了当。
答案 1 :(得分:0)
我一直在考虑这个问题。
让我们以ICMP检查为例,测量服务的丢包率。您每隔10秒钟提交一次支票的最小值,最大值,平均值,90便士。
这是我的想法:
此问题不适用于非采样值(即,如果每10秒只有一个值)。
如果您要为时间段测量(即最小值,最大值,百分位数)发送某种采样测量值,无论是通过statsd还是直接检查,事情都会变得复杂。
但是当谈到百分位数......事情变得非常混乱。
我认为能够使用计算出的百分位数进行累积/刷新可以大大缓解这个问题。
我不确定这在技术上是一个石墨问题,但我觉得每个使用石墨来“可视化”百分位数据的人都必须遇到这个问题......但是我找不到那么多在线信息。
目前,如果您希望在卷起期间的任意时间段内准确显示百分位数据,您将不得不使用类似ElasticSearch的内容并直接转到源数据(在这种情况下,每个结果都是用于导出统计信息的ping)