Edited at

Filebeatの性能チューニングポイントまとめ


はじめに

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

 


構成図

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


Filebeatとは


  • Elasticsearchで有名なElastic社の軽量ログ収集エージェントになります。

  • Beatsファミリーは用途に特化したBeatが存在し、ログファイルを取り込むものがFilebeatです。



  • いずれのBeatsもGo言語で書かれているため、非常にCPUやメモリ負荷が低く軽量でサーバに常駐するエージェントとして優しい作りとなっています。


  • 2015年前まではLogstashをサーバに導入しログ収集していましたが、多くのメモリを消費するため、既存システムへの導入に二の足を踏むケースもありました。


【参考】

Filebeat Reference


チューニングポイント

Filebeatの大まかな内部動作は以下の通りになります。


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_eventsflush.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_eventsflush.timeoutのデフォルト値が変わってました。こまめに追うのはきついですね(*´Д`)

【参考】

Configure Output


まとめ

以上、主なチューニングポイントでした。いかがでしたでしょうか?

もっと良いパラメータ値があれば是非コメント頂けますと有り難い限りです^^

軽量なエージェントにCPUとメモリを大量に使わせて、Logstashへのスループットを上げようというのが

そもそもembulkのようなバッチ処理用のエージェントではないでしょ!という声が聞こえてきそうですねw