私はNode.jsを初めて使用しますが、statsdソースを読むと、何らかの理由でGraphiteバックエンドにアクセスできなくなった場合、そのstatsdは、収集された統計を、増え続けるキャッシュに保持するのではなく、床にこぼしてしまうように見えます。統計。これは正しいです?
(統計情報を破棄することについては心配していませんが、Graphiteに接続できない統計情報のヒープが増え続けていることについて心配しています。したがって、コードの読み取りが正しければ、私は満足しています!)
簡単な答え: 構成可能ですが、デフォルトの動作は希望するものです (キャッシュはフラッシュ サイクル間で削除されます)。
長い答え: statsd は実際にはグラファイトに報告しません。ただし、そうするプラグインをロードできます(そのようなプラグインで提供されます)。
理解しておくべき重要なことは、プラグインは init に成功または失敗を報告できますが、フラッシュ イベントのコールバックやその他のフィードバック オプションがないことです。グラファイト プラグインは、status と flush ( https://github.com/etsy/statsd/blob/master/backends/graphite.js行 230) の 2 つのイベントを登録します。そのうち、メトリックを報告するイベントは flush だけです。
フラッシュ イベント用のグラファイト プラグイン レジスタ。フラッシュ イベント中、ノード EventEmitter は、キャッシュされた統計データのコピーを使用して、すべての登録済みプラグインを呼び出します。順序の保証なしで、すべてのプラグインに異なるコピーが送信されます。https://github.com/etsy/statsd/blob/master/stats.jsの 32 行目を見ると、これが起こっていることがわかります。ここでは、metrics_hash が作成されて入力され、後でフラッシュ イベントを発行するために使用されます。 (122行目)。
キャッシュ自体は、コピーが作成された直後に削除されます (77 行目から 120 行目)。コードでわかるように、構成ファイルにエントリを追加することで、特定のメトリック タイプ (時間、ゲージ、カウンター、セット) に対して、この既定の動作を変更できます。たとえば、カウンター キャッシュを保持するには、config に deleteCounters = true を追加する必要があります。この構成は、プラグインの成功または失敗に関係なく、キャッシュされたメトリックを常に保持することに注意してください。