13

バックグラウンド:

rsyslog次のようなログ ファイル ディレクトリを作成しています。/var/log/rsyslog/SERVER-NAME/LOG-DATE/LOG-FILE-NAME そのため、複数のサーバーが異なる日付のログを中央の場所に流出させています。

これらのログを読み取り、分析のためにelasticsearchに保存するために、logstash構成ファイルは次のようになります。

file{
   path => /var/log/rsyslog/**/*.log
}

問題 :

ディレクトリ内のログ ファイルの数が増えると、logstash は新しいファイルのファイル記述子 (FD) を開き、既に読み取られたログ ファイルの FD を解放しません。ログ ファイルは日付ごとに生成されるため、一度読み取られると、その日付以降は更新されないため、それ以降は役に立ちません。

でファイルを開く上限を 65K に増やしました。/etc/security/limits.conf

開いているファイル ハンドルの数が増えすぎないように、しばらくしてから logstash にハンドルを閉じさせることはできますか??

4

2 に答える 2

6

このバグに遭遇した可能性があると思います: http://github.com/elastic/logstash/issues/1604。同じ症状はありませんか?しばらくするとログに例外が表示されますか? 実行するsudo lsof | grep java | wc -lと、時間の経過とともに記述子が着実に増加していますか? (閉店する場合もありますが、営業を続けて数を増やしていく予定です)

于 2015-06-10T20:56:24.267 に答える
1

私はこの問題をしばらく追跡してきましたが、適切に解決されたかどうかはわかりません。

私たちも同じように、おそらくもっと大きな船に乗っていました。Logstash は、1 つのボックスにある何十万ものログ ファイルのハンドルを開くことができませんでした。LOGSTASH-271はこの問題を捕捉し、 PR #1260を含む Logstash にパッチを適用する試みがいくつかありました。

PR #1545でLogstash 1.5 に修正が入ったようですが、私はこれを個人的にテストしたことはありません。最終的に、Logstash がFileWatchと呼ばれるファイル入力を実装するために使用する基礎となるライブラリを FFileWatch にフォークし、 「エビクション メカニズム」を追加しました。

このアプローチの背後にある基本的な考え方は、ファイルが書き込まれている間だけファイルを開いたままにしておくことです。通常、Logstash はファイルのハンドルを開き、それを永久に開いたままにしますが、FFileWatch は、ファイルが最近変更されていない場合にハンドルを閉じるオプションを追加します ( eviction_interval)。次に、フォークされた gem を使用して Logstash のカスタム ビルドを作成しました。

明らかにこれは理想的とは言えませんが、私たちにとってはうまくいきました。最終的に、ログ ファイルを取得するために Logstash を完全に削除しましたが、ログ処理パイプラインのさらに下ではまだ使用しています。この問題の影響を受けない独自の軽量ログ シッパー ( Franz ) を実装しました。

于 2015-06-11T23:52:15.410 に答える