如果statsd无法联系Graphite,会发生什么?

时间:2012-08-17 20:25:58

标签: graphite statsd

我是Node.js的新手,但是在阅读statsd源代码时,我认为如果无论出于何种原因,Graphite后端变得无法访问,那么statsd只会将其收集的统计信息泄露到地板上,而不是将其保留在不断增长的统计数据。这是对的吗?

(我并不担心丢弃统计数据,而是关于不能与Graphite联系的不断增长的statsd堆。所以,如果我对代码的读取是正确的,我很高兴!)

1 个答案:

答案 0 :(得分:0)

简短回答:它是可配置的,但默认行为是您想要的行为(在刷新周期之间删除缓存)。

答案很长: statsd实际上并没有向石墨报告。然而,它可以加载一个可以执行此操作的插件(并且它随附了这样的插件)。

要理解的重要一点是,虽然插件可以向init报告成功或失败,但是对于刷新事件没有回调或其他反馈选项。 graphite插件注册2个事件,status和flush(https://github.com/etsy/statsd/blob/master/backends/graphite.js第230行),其中flush是报告指标的唯一事件。

flush插件用于flush事件。在刷新事件期间,节点EventEmitter将使用A COPY缓存的统计数据调用所有已注册的插件。每个插件都会发送一个不同的副本,而不保证订单。你可以看到https://github.com/etsy/statsd/blob/master/stats.js第32行,你会看到metrics_hash被创建和填充,然后用于发出flush事件(第122行)。

在填充副本后立即删除缓存本身(第77-120行)。正如您在代码中看到的,您可以通过向配置文件添加条目来更改特定度量标准类型(时间,计量器,计数器,集)的此默认行为。例如,要保留计数器缓存,您应该在配置中添加deleteCounters = true。请注意,无论任何插件成功与否,此配置将始终保留缓存的指标。