6

我有一个应用程序,它通过 statsd 将一些统计数据发布到石墨。每次服务接收到消息时,其中一个统计信息只是向 statsd 发送一个统计增量。我需要显示一个图表,显示此统计信息随时间的相对流量。一般来说,我应该能够显示一个图表,该图表每隔 10 秒刷新一次,并显示在这 10 秒内收到了多少条消息以及给定时间段内的历史记录。但是,无论我如何格式化我的 API 查询,我似乎都无法获得准确的数据。我读过很多文章,包括这篇:

http://code.hoosuite.com/accurate-counting-with-graphite-and-statsd/

这似乎提供了一些很好的见解,但仍然没有完全满足我的需求。这是我来的收盘价:

积分(命中计数(stats.recieved,“10 秒”))

但是,我不喜欢这个的累积结果,当我运行这个时,我得到的统计数据与我在日志中看到的接收消息相去甚远。我可以接受一些数据包丢失,但我们谈论的是数量级。我知道我做错了什么。只是希望有人能给我一些关于什么的见解。

4

1 回答 1

13

有几件事要检查/尝试:

为 Statsd 配置 Graphite

检查以确保您在 Graphite 中使用了与 Statsd 发送数据的方式相匹配 的保留模式聚合设置(即,它每 10 秒刷新间隔发送一个数据点)。

运行单个 Statsd 聚合器

确保您只运行一个 Statsd 实例,因为运行多个 statsd 守护进程会导致指标被丢弃(因为 Graphite 将被配置为仅存储一个数据点,因为它的最高精度为10s:6h

将 UI 或 URL API 中的时间范围限制在 6 小时以内

当显示数据超过 6 小时阈值的图表时(例如,从现在到 7 小时前),您将开始看到所显示图表的 1 分钟聚合计数数据(如果您已将 Graphite 配置为 statsd retentions = 10s:6h,1min:7d,10min:5y)。汇总将根据时间范围内最早的数据点进行(例如,现在到 7 天以上 = 您将获得 10 分钟的汇总)。

如果发送稀疏或“突发”数据并显示旧时间范围(触发聚合)

确认您的 xFilesFactor 足够低,即使空值率很高,聚合也会产生非空值。例如,100, null, null, null, null, null如果 XFilesFactor 高于 1/6,则前 10 秒内有 100 个请求,而一分钟内剩余 50 秒内没有请求,将导致当数据老化时,其存储总计为 null。使用 statsd 推荐的石墨配置可以解决此问题,但最好了解...因为这可能会导致数据丢失。

保存架构或聚合更改

如果您在存储任何指标后更改了石墨模式或聚合设置(在 Whisper = 石墨的存储中),您需要删除指标的 .wsp 文件(石墨将重新创建它们)或运行whisper-resize.py.

验证设置

您可以通过在 .wsp 文件上运行 Whisper-info.py 来针对某些耳语数据验证设置。在 /graphite/storage/whisper/ Run: 中找到您的指标之一的 .wsp 文件whisper-info.py my_metric_data.wsp。Whisper-info.py 输出应该告诉你更多关于存储设置是如何工作的。

TLDR;

您应该确保 Graphite 设置为每 10 秒间隔存储一个数据点,用于来自 StatsD 的指标。您应该确保 Graphite 对来自 Statsd 的计数数据求和(而不是平均)。这两个都可以通过使用推荐的Statsd 配置设置来处理。不要运行多个 Statsd 聚合器。使用 UI 时,将返回的数据限制在 6 小时以内,或者在查看超过保留阈值的数据时了解您正在查看的汇总。最后,确保设置正确(如果您已经发送了指标)。

于 2013-08-28T15:01:54.267 回答