fluentdからElasticsearchに書き込んだ際の運用メモ

fluentdからfluent-plugin-elasticsearchを使ってElasticsearchに書き込む部分でたびたびfluentdが詰まって苦労してたけど最近は落ち着いてきたのでその辺を備忘録としてメモっています。

最初はfluentdからElasticsearchに1プロセスで直接書き込んでいたけどなにかのイベント等でトラフィックがはねるとバッファ溢れがおきてました。なおこのときElasticsearch自体は特に問題は起きていません。

num_threads増やしたりbuffer_chunk_limit, buffer_queue_limit, flush_intervalあたりを調整したりというのをやっていたけど(実際にやったのは僕じゃないけど)、それでも厳しいのでプロセス分離してfluentd A -> fluentd B1,B2 -> Elasticsearchというように2プロセスでElasticsearchに書き込むようにしました。

それでも厳しのでfluentd B1,B2,B3,B4のように4プロセスにしたのですが、秒間12kmsgで100%CPU使っていました。

そのときの件数のグラフがこちら

CPU使用率のグラフがこちら

Elasticsearchの1秒間のindex件数がそれに対応して上がっています。
なおこのときのElasticsearchは2台, 2shard, 1replicaです。

なので8プロセスにして安定はしたのですが、中継fluendマシンを1台から2台にして現在では合計16プロセスでElasticsearchに書き込んでいます。

さらにElasticsearchを8台, 8shard, 1replicaのものを用意してdouble writeして負荷を比較すると、確かに1秒間の1台あたりのindex件数が1/4になってる。他にjava heapの使用率とかもだいぶ減っていて良さげです。