現在、logstash を使用して、さまざまな Web アプリケーションから多数のログ ファイルを Graylog にインポートしています。ファイルがタグ付けされているのでうまく機能するので、それらがどのWebアプリケーションから発信されたかがわかります。
webapp を変更できないため、webapp の log4j conf に GELF アペンダーを追加できません。アイデアは、定期的にログ ファイルを取得し、それらを解析して、logstash で Graylog にインポートすることです。
私の問題は、既にインポートしたログ イベントをインポートしないようにするにはどうすればよいかということです。たとえば、log.1、log.2 などのように増加するログ パターンを持つログ ファイルがあるとします。そのため、初回と 2 週間後に再インポートすると、log.1 に記録される可能性のあるログ イベントが記録されます。それらはおそらくlog.3にあるでしょう。残念ながら、logstash のファイル入力 "sincedb_path" と "start_position" ではそれを処理できません。
そこで、私が集めたいくつかのオプションを以下に示します。誰かが同じ問題に遭遇した場合は、それらについてご意見をお聞かせください。
- 特定の日付より前のすべてのイベントをドロップする logstash フィルターを使用します。インポートされたすべてのファイル (潜在的に 50 以上) のすべての最後のログ日付のインデックスを保持する必要があり、多くの構成書き込みが必要です。
- GrayLog で drool ルールを使用して、特定のタイプで最後に受信したログよりも前のタイムスタンプを持つログを拒否する
- ファイルの名前を変更するログ パターンではなく、log.date のようなログ パターンに変更するように依頼します (ただし、これは避けたいと思います)。
- 他のアイデアはありますか?