Apacheにおいて、tab区切りでラベル付けされたLTSVフォーマットでログ出力をする設定。
公式サイト: Labeled Tab-separated Values
ApacheがLTSVフォーマットで出力できるように設定ファイルhttpd.conf
のLogFormat
に登録する。ここではcombined
とltsv
の両方のフォーマットでログを保存することにする。
フォーマットの内容はカスタマイズできるものなので決まった書式はないが、ここでは公式サイトに例として書かれているものを採用している。
マルチドメインで運用している場合は、vhost
でホスト名が出てくれるだけでもありがたい
vi /etc/httpd/conf/httpd.conf
--------------------------------------
LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %b" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
LogFormat "time:%t\tforwardedfor:%{X-Forwarded-For}i\thost:%h\treq:%r\tstatus:%>s\tsize:%b\treferer:%{Referer}i\tua:%{User-Agent}i\treqtime_microsec:%D\tcache:%{X-Cache}o\truntime:%{X-Runtime}o\tvhost:%{Host}i" ltsv
--------------------------------------
サーバ全体のログの出力についてはhttpd.conf
に記述する。デフォルトではログの出力がcombined
形式になっているので先ほど追加したltsv
も追加しておく。
LTSVだけで出力したい場合はcombined
の行をコメントアウトすればよい。
vi /etc/httpd/conf/httpd.conf
--------------------------------------
CustomLog logs/access_log combined
CustomLog logs/access_log.ltsv ltsv
--------------------------------------
バーチャルドメイン毎の設定についてはVirtualHost
ディレクティブの中に記述する。
<VirtualHost *:80>
DocumentRoot /var/www/example.com/htdocs
ServerName www.example.com
CustomLog logs/www.example.com.access_log combined
CustomLog logs/www.example.com.access_log.ltsv ltsv
</VirtualHost>
設定の記述が合っているか確認してからApacheを再起動する。
# apachectl -t
Syntax OK
# apachectl graceful
LTSVフォーマットのログは/var/log/httpd/access_log.ltsv
、/var/log/httpd/www.example.com.access_log.ltsv
に出力されるようになる。再起動した時点で空のログファイルで生成されるのでls
コマンドで存在しているか確認しておく。ここでは、実際にはll
(つまりls -l
)を使用している。
# ll /var/log/httpd/access_log.ltsv
-rw-r--r-- 1 root root 0 Jul 7 21:20 /var/log/httpd/access_log.ltsv
念のため、実際にブラウザでアクセスしたときに本当にログがリアルタイムに出力されているかtail -f
コマンドを利用して確認しておくとよいだろう。
tail -f /var/log/httpd/access_log.ltsv
--------------------------------------
ログの出力をリアルタイムで確認、Ctrl+Cで終了
--------------------------------------
このままでは、ログのローテーションの対象に*access_log.ltsv
が含まれないので/etc/logrotate.d/httpd
に/var/log/httpd/*ltsv
がローテーション対象に含まれるよう設定を追加する。
vi /etc/logrotate.d/httpd
--------------------------------------
/var/log/httpd/*log /var/log/httpd/*ltsv{
missingok
notifempty
省略
}
--------------------------------------