はじめに
Elastic社の軽量ログ収集ツールであるFilebeatで取り込んだログファイルをLogstashへ送る際の性能チューニングポイントを簡単にまとめてみました。

構成図
このような構成でAWS NLB経由でスケールアウト構成のLogstashにログを送る感じです^^

Filebeatとは
-
Elasticsearchで有名なElastic社の軽量ログ収集エージェントになります。
-
いずれのBeatsもGo言語で書かれているため、非常にCPUやメモリ負荷が低く軽量でサーバに常駐するエージェントとして優しい作りとなっています。
-
2015年前まではLogstashをサーバに導入しログ収集していましたが、多くのメモリを消費するため、既存システムへの導入に二の足を踏むケースもありました。
【参考】
・Filebeat Reference
チューニングポイント
Generalのパラメータ値
| 設定項目 | デフォルト値 | 説明 |
|---|---|---|
| queue.mem.events | 4096 | キューに格納できるイベント数を設定します |
| queue.mem.flush.min_events | 2048 | イベントがOutputに出力される最小単位を設定します |
| queue.mem.flush.timeout | 1s | イベントがOutputに出力されるまでの最大待機時間を設定します |
| max_procs | CPU論理コア数 | 同時に実行できるCPUの最大数を設定します |
-
max_procsはCPU論理コア数よりも少し多めに割り当てるのが性能を発揮します。 -
eventsは大きくすればするだけメモリ使用率が増加します。(キューイングのバケツの大きさ) -
flush.min_eventsの値はeventsの範囲内に収まるように設定します。(バケツからイベントが溢れないようにする) -
flush.min_eventsを大きい値にすることでOutputスループットが向上します。(効率よくまとめて送ることが出来るから) -
flush.min_eventsとflush.timeoutを0に設定するとイベントがメモリキューに入ったら何も待たずにすぐにOutputします。
【参考】
・Specify general settings
・Configure the internal queue
Logstash outputのパラメータ値
| 設定項目 | デフォルト値 | 説明 |
|---|---|---|
| worker | 1 | LogstashへのOutput処理に利用するスレッド数を設定します |
| loadbalance | false | Output先のLogstashへ負荷分散するか否かを設定します |
| ttl | 0s | Logstashとの接続時間(秒)を設定します |
| pipelining | 2 | LogstashからのACKを待っている間に非同期的に送信されるバッチ数を設定します |
| bulk_max_size | 2048 | 一度にLogstashに送るイベント数を設定します |
-
workerはLogstashとの接続数になります。loadbalanceをtrueにした場合、worker×Logstash台数で合計のWorker数となります。 - 接続先のhostsにNLB_FQDNを1つ設定している場合でも
loadbalanceをtrueにしないとNLB配下のLogstash1台に対しての接続しか張られません。 -
ttlは0だと無効となり、接続が張りっぱなしになります。 -
pipeliningを無効にしないとttlを有効に出来ないので、NLBを接続先にする場合は注意が必要です。 -
bulk_max_sizeを大きく設定することで1回にまとめて多くのイベントを効率良く送ることが出来ます。 -
bulk_max_sizeだけを大きくしても、先に説明したflush.min_eventsを大きくしておかないと効果がありません。
【参考】
・Configure the Logstash output
余談
Beats5.xまでは複数のoutputを設定することが出来ましたが、6.xからは1つにしかoutput出来ません。
Beatsには複雑な処理をさせずにシンプルな処理に特化させようという意図がくみ取れますが、たまにファイルにも出したいと思うのが人の性という。。。
またFilebeat6.3からflush.min_eventsとflush.timeoutのデフォルト値が変わってました。こまめに追うのはきついですね(*´Д`)
【参考】
・Configure Output
まとめ
以上、主なチューニングポイントでした。いかがでしたでしょうか?
もっと良いパラメータ値があれば是非コメント頂けますと有り難い限りです^^
軽量なエージェントにCPUとメモリを大量に使わせて、Logstashへのスループットを上げようというのが
そもそもembulkのようなバッチ処理用のエージェントではないでしょ!という声が聞こえてきそうですねw

