16

我正在使用 statsD 向石墨报告计数器数据;每次我收到消息时都会发送一个勾号。这很好用,除非在 statsD 出于某种原因必须重新启动的情况下。然后我的图表中出现了巨大的漏洞,因为当我没有收到任何消息时,statsD 现在不再每 10 秒发送一次“0”。

我正在报告各种不同的消息类型和队列,有时我很长一段时间都没有收到特定队列的消息。

是否有任何现有方法可以使用我指定的默认值(在我的情况下为 0)“填充”缺失的数据?

我考虑过为给定指标发送一个“0”计数,以便 statsD 开始为它发送 0,但我并不总是知道我将提前报告的一组指标。

4

4 回答 4

19

查看 Graphite 提供的函数transformNull。例如

transformNull(stats.timers.deploys.all.duration.total.mean, 0)

这会将具有空数据的部分映射到 0。

于 2013-06-28T03:45:41.723 回答
12

您可以使用石墨中的“keepLastValue(requestContext, seriesList)”函数来处理缺失数据。它“[c] 当数据中出现间隙('None' 值)时,使用最后收到的值继续行,而不是中断行。”

于 2012-12-06T04:57:28.003 回答
9

如果您只想用零“填充”可视图形,请查看“图形选项 -> 线模式 -> 将 Null 绘制为零”。这不会让您设置 0 以外的值,并且如果您以 json 或 csv 格式获取数据,它不会导致显示 0,但如果您只想查看包含一些图形的图表,这通常是您想要的没有数据被记录的地方。

没有将 Null 绘制为零

将空值绘制为零

于 2012-12-12T08:24:32.190 回答
2

这个问题的解决方案是不保留最后一个值或转换空值。实施其中一个选项只会导致您显示不正确的数据,并且当出现问题时您不会收到警报。

您需要更改存储架构,以便它存储您正在发送的数据量,而不是更多。

如果指标每 5 秒发送一次,并且您的存储架构显示为 1,您将获得五个数据点,其中四个将为空。

查看此文档:https ://github.com/etsy/statsd/blob/master/docs/graphite.md

于 2016-05-13T18:22:32.503 回答