nginxでもcronolog -Sしたい
nginxでもcronolog -Sしてログを日毎に分けて且つ最新のログのシンボリックリンクを自動生成したい。
Apacheでよくやる設定
CustomLog "|/usr/sbin/cronolog -S /path/log/app/access_log /path/log/app/%Y/%m/%d_access_log" combined
nginxだとserverディレクティブのaccess_logにapacheのようには書けない
access_log /path/log/app/access_log main;
https://gist.github.com/ntakaaki/2891895
こちらを参考に
nginxのinitファイルを書き換える
ただし、mkfifoなパイプだとfluentdでtail出来ないので
cronolog_start()内のcronologの実行部分だけちょっと変更
==========================================
cronolog_start() {
if ! [ -p $logdir/access_log_pipe ]; then
rm -f $logdir/access_log_pipe
rm -f $logdir/error_log_pipe
mkfifo $logdir/access_log_pipe
mkfifo $logdir/error_log_pipe
fi
/bin/sh -c "/bin/cat $logdir/access_log_pipe | $cronolog -S $logdir/access_log $logdir/%Y/%m/%d_access_log &"
/bin/sh -c "/bin/cat $logdir/error_log_pipe | $cronolog -S $logdir/error_log $logdir/%Y/%m/%d_error_log &"
==========================================
そしてnginxのアクセスログの吐き出し先はパイプを指定
access_log /path/log/app/access_log_pipe main;
これで
access_log_pipeと別にaccess_logという最新ログを参照したシンボリックリンクが出来る。
td-agent.confのsourceディレクティブは下記のように設定すればtail可能
type tail
pos_file /path/log/api/access_log.pos
fluent-plugin-tail-ex使えって話もある