buffer_chunk_limit x buffer_queue_limit x fluentdの起動プロセス数

唯一、buffer_chunk_limit と buffer_queue_limit をかけた総メモリ使用量がマシン全体で使えるメモリ量よりも小さくなるようにすること、という点のみ気をつけよう。

Fluentd out_forward における最適化パラメータいくつかの話 - たごもりすメモ

これを気をつけていてもfluentdの起動プロセス数のことを忘れることがあると思います。

fluentdの複数実行 - wyukawa’s blogでも書きましたがfluentdを同一マシンで複数プロセス起動するというのはよくあるパターンだと思います。そうじゃないトラフィックさばけないときがありますからね。

その場合 buffer_chunk_limit x buffer_queue_limit x fluentdの起動プロセス数 の値がfluentdのメモリ最大使用量になります。

buffer_chunk_limitが256MBでbuffer_queue_limitが64でfluentdの起動プロセス数が4(supervisorプロセスを除く)だったら

256MB x 64 x 4 = 64GB となります。

これプラスOSを含めたメモリ使用量が物理メモリ量を超えることが無いようにする必要があります。

そうしないとfluentdでの出力(例:HDFS)が詰まった場合にメモリ使用量がどんどんあがってOS自体がハングアップする危険性があります。

まあちょっと出力が詰まる程度なら大丈夫ですが、例えばNameNode障害が起きてすぐには対応できなかったときなどは全fluentdプロセスがデータを出力できず、でもデータもどんどん来るのでメモリ使用量がどんどんあがることになります。

fluentdの1プロセスだけがおかしくなる分にはOS自体がハングアップするところまで行かないと思いますが、全プロセスだとその危険性がありますので設定値には注意した方がいいでしょう。

buffer_chunk_limitとbuffer_queue_limitは上記のように控え目にしてqueue size exceeds limitが出てうまく送信できなかったものは後で別途手動などで送信するという感じかなと思ってます。