もとファイルの内容と完全一致でlogをS3へ出力する方法

下記課題の解決方法を教えていただきたいです。

■やりたい事
もとのファイルの内容と完全一致でlogをS3へ出力する

■ステップ
1.filebeatでサーバAにあるlogをinputし、サーバBのlogstashへoutputする
2.サーバBのlogstashでサーバAからのinputをS3へoutputする

■課題
下記2点の観点でlogをうまくS3に出力できておりません。
1.logの順番が変わっている(timestampの順に出力したい)
2.timestampとホスト名がlogの前に出力されている

S3にあるべきlog(もとのlog)

[2017-03-05 19:35:00] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}
[2017-03-05 19:35:01] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}
[2017-03-05 19:35:11] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}
[2017-03-05 19:35:13] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}

S3にある現状のlog

2017-03-05T19:35:11.000Z {HOSTNAME} [2017-03-05 19:35:11] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}
2017-03-05T19:35:13.000Z {HOSTNAME} [2017-03-05 19:35:13] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}
2017-03-05T19:35:00.000Z {HOSTNAME} [2017-03-05 19:35:00] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}
2017-03-05T19:35:01.000Z {HOSTNAME} [2017-03-05 19:35:01] [{LOGLEVEL}] [{LOGNAME}] {MESSAGE}

よろしくお願いいたします。

1.logの順番が変わっている(timestampの順に出力したい)

WEBサーバへ人力リロードレベルだと再現しなかったのですが、
負荷かけたら変わる気がするので時間がある時にもう少し試してみようと思います。

2.timestampとホスト名がlogの前に出力されている

こちらに関しては、
Logstashのs3の設定にcodecのところに以下のようなformat設定を入れたら解決出来るようです。

output {
  s3{
    access_key_id => "XXXX"
    secret_access_key => "XXXX"
    region => "ap-northeast-1"
    bucket => "bucket"
    temporary_directory => "/tmp/out-s3"
    time_file => 3
    codec => line { format => "%{message}" }
    canned_acl => "private"
  }
}

余談ですがこちらの公式ドキュメントのUsageはformatの表記がこのままだと手元だと以下エラーでうまくいかないかも・・・?

[2017-03-24T01:05:07,823][ERROR][logstash.outputs.s3      ] Unknown setting 'format' for s3

もしもう少し見てみて変えたほうが良さそうでしたら、
来週にでもlogstash-output-s3のUsage表記はPR出してみようかと思います。

codecプラグインに関してはこの辺りを参照してもらえれば良いと思います。

ご回答ありがとうございます!

1.logの順番が変わっている(timestampの順に出力したい)

pipeline.workersを1にしてみるとうまく出力できている感じです。

2.timestampとホスト名がlogの前に出力されている

codecを試してみます!

This topic was automatically closed 28 days after the last reply. New replies are no longer allowed.