通过文档经过一番研究,以及一些谈话与其他人,我已经找到了问题 - 和解决方案。
耳语文件格式的设计方式,它期望您(或您的应用程序)发布更新不会比您的storage-schemas.conf
文件中的最小间隔更快。该文件用于配置您在不同的时间间隔分辨率下保留的数据量。
我的storage-schemas.conf
文件设置为最小保留时间为1分钟。默认的StatsD守护进程(来自etsy)旨在每10秒更新一次碳(石墨守护进程)。这是一个问题的原因是:在60秒的时间段内,StatsD报告了6次,每次写入覆盖最后一次(在60秒的时间间隔内,因为您每分钟更新一次)。这会在您的图表上产生非常奇怪的结果,因为一分钟内最后10秒钟可能完全死亡,并在该时间段内报告活动为0,这会导致您在那一刻写入的所有数据完全无效。
为了解决这个问题,我不得不重新配置我的storage-schemas.conf
文件以10秒的最大分辨率存储数据,因此StatsD的每次更新都会保存在whisper数据库中而不会被覆盖。
Etsy的公布,他们使用它们的安装的碳,它看起来像这样的storage-schemas.conf
配置:
[stats]
priority = 110
pattern = ^stats\..*
retentions = 10:2160,60:10080,600:262974
这具有10秒的最小保持时间,并且存储值得其中6小时。但是,由于我的下一个问题,我大大延长了保留期限。
由于我让这些数据收集了几天,我注意到它仍然看不到(并且正在报告中)。这是由于2个问题。
StatsD(旧版本)仅报告了每10秒钟报告周期的平均每秒事件数。这意味着,如果你在1秒内增加一次键100次,在接下来的9秒内增加0次,在第10秒结束时,统计数据会向石墨报告10,而不是100.(100/10 = 10)。这未能报告10秒钟的事件总数(显然)。
较新版本的statsD修复了此问题,因为它们引入了stats_counts
存储桶,该存储桶记录了每10秒期间每个指标的总事件数量(因此,报告中没有报告前10个示例中的10个报告)。
后,我升级StatsD,我注意到,在过去的6个小时的数据看起来不错,但我看了以后在最后6小时 - 事情看起来奇怪,接下来的原因就是:
石墨存储数据,它将数据从高精度保留移到更低精度保留。这意味着,使用例子,在10秒精确度的6小时后,数据移动到60秒(1分钟)的精确度。为了将6个数据点从10秒移动到60秒精度,石墨的平均值为6个数据点。因此,它会采取最古老的6个数据点的总价值,并通过6把它这给了每10秒可活动的平均#的,有60第二阶段(而不是事件的总#,这是我们关心具体地说)。
这是石墨仅仅是如何设计的,对于某些情况下,它可能是有用的,但是对我们来说,这不是我们想要的。为了“解决”这个问题,我将10秒的精确保留时间增加到了60天。超过60天后,我保存了每分钟10分钟的精度,但基本上没有任何原因,因为这些数据对我们来说没有那么有用。
我希望这可以帮助别人,我知道这让我生气了几天 - 我知道没有一个巨大的正在使用该堆栈软件用于此目的的人的社区,所以花了一点研究,以真正弄清楚发生了什么事情,以及如何得到我想要的结果。
我希望的大小,我们可能标志着2个答案视为正确\: –
而statsd文档(至少从今天起)也描述了这个问题以及如何通过https://github.com/etsy/statsd/blob/master/docs/graphite.md解决这个问题。 –