Edited at

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

More than 1 year has passed since last update.


内容

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 に 「複数行に渡るログ」 を保存できました