内容
Laravelのログ ./storage/logs/laravel.log
を td-agent
を使ってS3に送る方法について記します。
laravel.log
に関して言えば monologから出力したログをfluentdで集約する あたりが参考になりますが、今回はいろいろな事情から「テキストで出力された laravel.log
を td-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にログを保存する を一通り設定した状態にする
設定例
設定ファイル
/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-agent3
(Fluentd v1.0
)でS3
にlaravel.log
を保存できました -
td-agent3
(Fluentd v1.0
)でS3
に 「複数行に渡るログ」 を保存できました