1

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

这也是其他统计数据的问题:均值、中位数、标准差。对于 min/max/count,很容易设置 Graphite 存储聚合以正确聚合。但是对于统计数据是不正确的。

人们是如何处理这个问题的?

4

2 回答 2

0

你不能。提取百分位数本质上是一种无法逆转的有损操作。

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

于 2014-05-07T23:28:23.303 回答
0

我也一直在思考这个问题。

让我们以 ICMP 检查为例,您正在测量服务的数据包丢失情况。您每 10 秒提交一次支票的最低、最高、平均、90p。

这是我的想法:

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

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

    • 最小值和最大值很容易。您可以直接以这种方式卷起(正如您所指出的)
    • 正如您所注意到的,计数也是一种特殊情况。

但是当涉及到百分位数时......事情变得非常混乱。

我认为能够使用计算出的百分位数进行汇总/刷新将大大缓解该问题。

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

目前,如果您想要准确地可视化任意时间段的百分位数数据,您将不得不使用 ElasticSearch 之类的工具并直接访问源数据(在这种情况下,您获取的每个 ping 的结果)用于得出您的统计数据)

于 2014-09-22T20:58:56.330 回答