使用 statsD 时,有啥方法可以填补石墨中缺失的数据?
Posted
技术标签:
【中文标题】使用 statsD 时,有啥方法可以填补石墨中缺失的数据?【英文标题】:Is there any way to fill in missing data in graphite when using statsD?使用 statsD 时,有什么方法可以填补石墨中缺失的数据? 【发布时间】:2012-11-24 02:03:08 【问题描述】:我正在使用 statsD 向石墨报告计数器数据;每次我收到消息时都会发送一个勾号。这很好用,除非在 statsD 出于某种原因必须重新启动的情况下。然后我的图表中出现了巨大的漏洞,因为当我没有收到任何消息时,statsD 现在不再每 10 秒发送一次“0”。
我正在报告各种不同的消息类型和队列,有时我很长时间都没有收到特定队列的消息。
是否有任何现有方法可以使用我指定的默认值(在我的情况下为 0)“填充”缺失的数据?
我曾考虑为给定指标发送“0”计数,以便 statsD 开始为其发送 0,但我并不总是知道我将提前报告的指标集。
【问题讨论】:
原来有一个功能可以完全满足我的要求。尽管正如@ALQ 指出的那样,重要的是要知道它会影响聚合; transformNull(). 【参考方案1】:可以使用graphite中的“keepLastValue(requestContext, seriesList)”函数来处理缺失数据。它“[c] 当数据中出现间隙(‘无’值)时,使用最后收到的值继续行,而不是中断行。”
【讨论】:
太棒了!不是我想要的,因为我希望能够报告 0 而不是最后一个值。但是,通常情况下,该值为 0,因此暂时可以使用。谢谢! 不要迂腐,发送 0 而不是“无数据”会降低您的聚合(分位数,平均值)。【参考方案2】:如果您只想用零“填充”可视图形,请查看“图形选项 -> 线模式 -> 将 Null 绘制为零”。这不会让您设置 0 以外的值,并且如果您以 json 或 csv 格式获取数据,它不会导致显示 0,但如果您只想查看包含一些图形的图表,这通常是您想要的没有数据被记录的范围。
【讨论】:
【参考方案3】:查看 Graphite 提供的函数transformNull。例如
transformNull(stats.timers.deploys.all.duration.total.mean, 0)
这会将具有空数据的部分映射到 0。
【讨论】:
【参考方案4】:解决这个问题的方法是不要保留最后一个值或变换空值。实施其中一个选项只会导致您显示不正确的数据,并且在出现问题时不会提醒您。
您需要更改您的存储架构,以便它存储您发送的数据量,而不是更多。
如果指标每 5 秒发送一次,而您的存储架构为 1 秒,您将获得五个数据点,其中四个为空。
查看此文档:https://github.com/etsy/statsd/blob/master/docs/graphite.md
【讨论】:
以上是关于使用 statsD 时,有啥方法可以填补石墨中缺失的数据?的主要内容,如果未能解决你的问题,请参考以下文章