入力/ファイルと出力/s3 でコーデックの組み合わせを使用して、logstash で奇妙な動作が発生しています。output/s3 プラグインでコーデックを指定しない限り、S3 にアップロードするパーツ ファイルを取得できないため、output/s3 logstash プラグインに問題があるようです。
私は Java アプリケーション ログ ファイルを追跡しているので、理想的には入力/ファイル プラグインを使用してディレクトリ内のすべてのログ ファイルを監視し、発生したスタック トレース (およびそれらの新しい行) が同じログスタッシュ イベントにラップされていることを確認します。私はこれが好きです:
input {
file {
path => "C:/some/directory/logs/*"
codec => multiline {
pattern => "^%{DATESTAMP}"
negate => true
what => "previous"
}
}
}
これにより、スタック トレースが親イベントに適切に追加されます。次に、2 つの異なる output/s3 操作を実行します (基本的に、生のログを 1 行ずつ再作成し、イベント json をアップロードします)。
output {
s3{
access_key_id => "mykey"
secret_access_key => "myseckey"
region => "us-east-1"
bucket => "somebucket"
size_file => 10000
upload_workers_count => 2
restore => true
prefix => "rawlogs/"
temporary_directory => "C:/Temp/LogStash/raw"
time_file => 5
}
s3{
access_key_id => "mykey"
secret_access_key => "myseckey"
region => "us-east-1"
bucket => "somebucket"
size_file => 10000
upload_workers_count => 2
restore => true
prefix => "jsoneventlogs/"
temporary_directory => "C:/Temp/LogStash/json"
time_file => 5
codec => "json_lines"
}
}
「json_lines」コーデックを使用する S3 アップロードは正常に機能しますが、デフォルトの「プレーン」コーデックを使用する生ログのアップロードはまったく機能しません。ファイルは一時ディレクトリにあり、S3 にプッシュされることはありません。「ライン」コーデックを使用しようとしましたが、それでも同じ動作です。入力/ファイル プラグインから「マルチライン」コーデックを削除し、出力/S3 raw プラグインで使用すると、S3 に問題なくアップロードされますが、スタックトレースの各改行は独自のイベントとして受信されるため、コーデックはその仕事をしていないようです。
output/S3 プラグインが json_lines と multiline でのみ動作するように見える理由は何ですか?