8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

td-agent3(Fluentd v1.0)でS3に「laravel.log」(複数行になるログ)を保存する。2018-06-28

Last updated at Posted at 2018-06-28

内容

Laravelのログ ./storage/logs/laravel.logtd-agent を使ってS3に送る方法について記します。

laravel.log に関して言えば monologから出力したログをfluentdで集約する あたりが参考になりますが、今回はいろいろな事情から「テキストで出力された laravel.logtd-agent で送る」というところにこだわります。

ポイント

laravel.log にはstack traceが出力され複数行になることがあります。

[2018-06-28 03:21:38] local.DEBUG: <デバッグログ>
[2018-06-28 03:21:38] local.DEBUG: <デバッグログ>
[2018-06-28 03:21:38] local.ERROR: <エラー>
Stack trace:
#0 <trace #0>
#1 <trace #1>
#2 <trace #2>
[2018-06-28 03:21:39] local.DEBUG: <デバッグログ>

このような複数行に渡るログを td-agent で送るところがポイントです。

multiline Parser Plugin を使うと容易に設定できます。

準備

td-agent3(Fluentd v1.0)でS3にログを保存する を一通り設定した状態にする

設定例

設定ファイル

参考: multiline Parser Plugin

/etc/td-agent/td-agent.conf
# <source> の内容が本題
<source>
  @type tail
  path /ログが出ているPATH/laravel.log
  tag laravel.log
  pos_file /var/log/td-agent/laravel_log.pos

  <parse>
    @type multiline
    format_firstline /^\[2\d{3}-[01]\d-[0-3]\d [012]\d:[0-5]\d:[0-5]\d\]/
    format1 /^\[(?<time>2\d{3}-[01]\d-[0-3]\d [012]\d:[0-5]\d:[0-5]\d)\] (?<level>(.*?)): (?<message>.*)/
  </parse>
</source>

# <match> についての詳細は割愛
<match laravel.log>
  @type s3
  format json
  include_time_key true

  aws_key_id YOUR_AWS_KEY_ID
  aws_sec_key YOUR_AWS_SECRET_KEY
  s3_bucket YOUR_S3_BUCKET_NAME
  s3_region us-east-1
  path logs/${tag}/%Y-%m-%d/
  s3_object_key_format %{path}%{time_slice}_%{index}.%{file_extension}

  # if you want to use ${tag} or %Y/%m/%d/ like syntax in path / s3_object_key_format,
  # need to specify tag for ${tag} and time for %Y/%m/%d in <buffer> argument.

  <buffer tag,time>
    @type file
    path /var/log/td-agent/s3
    timekey 60
    timekey_wait 60
    chunk_limit_size 256m
  </buffer>
</match>

動作確認

以上の設定例で td-agent を起動してログ(/var/log/td-agent/td-agent.log)を確認します。
特に問題がなさそうであれば laravel.log に出力があるような処理をしてログを出します。

S3にログがたまっていく確認します。

ログデータの確認

今回の設定だと、S3に以下のようなテキストのログがたまっていきました。

YOUR_S3_BUCKET_NAME/laravel.log/2018-06-28/201806280321_0.gz
{"level":"local.DEBUG","message":"<デバッグログ>","time":"2018-06-28T03:21:38+00:00"}
{"level":"local.DEBUG","message":"<デバッグログ>","time":"2018-06-28T03:21:38+00:00"}
{"level":"local.ERROR","message":"<エラー>\nStack trace:\n#0 <trace #0>\n#1 <trace #1>\n#2 <trace #2>","time":"2018-06-28T03:21:38+00:00"}

まとめ

  • td-agent3Fluentd v1.0)で S3laravel.log を保存できました
  • td-agent3Fluentd v1.0)で S3 に 「複数行に渡るログ」 を保存できました
8
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?