web-dev-qa-db-ja.com

Logstashのメモリ使用量を減らす方法

スタンドアロンシステム(クラウドまたはクラスターなし)で実行されているLogstash-5.6.5(Windows)を使用しています。一部のログファイルを監視し、ローカルでelasticsearchを実行するためにそれを投稿することを計画しています。しかし、Logstashのメモリ使用量をチェックすると、ファイルを監視する設定がない場合、約600MBのメモリ使用量が表示されます。入力ファイルのパイプライン構成をさらに追加すると、メモリがさらに追加されます(3つのログファイルを監視するために最大70MBが追加されましたが、最大20のログを追加する予定です)。

1。予想される動作ですか?
2。 logstashによる大量のメモリ使用量を削減する方法はありますか?

10
Loganathan

以下の数日間調査した後、私の質問に対する私の答えです。

以下は、Logstashメモリを最適化する方法です。

  1. Logstashのメモリ使用量は、主にヒープサイズによって蓄積されています。これは、Logstashを起動する前に(以下の例ではWindowsバージョンの場合)、環境変数LS_Java_OPTSにヒープメモリサイズを設定することで効果的に制御できます。

    set "LS_Java_OPTS=-Xms512m –Xmx512m"
    

それ以外の場合は、ファイルの先頭にあるsetup.batに追加できます。

このようにして、Logstashの合計メモリ使用量を最大620 MBに制限しました。

  1. Logstashパイプライン構成(入力/フィルター/出力)は、言及された方法 ここ を使用して最適化できます。

このようにして、Logstashフィルター構成が最適化されているかどうかをアサートしました。

  1. また、以下のいくつかのプロパティを使用してパイプライン入力ファイルの構成を最適化し、説明されているように古いログファイルを無視/閉じることができます ここ

    • ignore_older-秒単位-指定された秒より古いファイルを完全に無視します
    • max_open_files-数-開かれるファイルの最大数を最適化する
    • close_older-古いファイルを閉じる秒数
    • exclude-不要なファイル名の配列(ワイルドカードありまたはなし)

私の場合、最近のファイルのみを監視し、古いファイルを無視する必要があり、それに応じて次のように構成を設定しました。

input {
  file {
    #The application log path that will match with the rolling logs.
    path => "c:/path/to/log/app-1.0-*.log"
    #I didn't want logs older than an hour.
    #If that older file gets updated with a new entry 
    #that will become the new file and the new entry will be read by Logstash
    ignore_older => 3600 

    #I wanted to have only the very recent files to be watched. 
    #Since I am aware there won't be more then 5 files I set it to 5.
    max_open_files => 5 

    #If the log file is not updated for 5 minutes close it. 
    #If any new entry gets added then it will be opened again.
    close_older => 300 
  }
}
14
Loganathan