(なんか画像は違う)
めちゃめちゃ久々のApache !
ログのフォーマット、出力を割り振る
アクセスログって、デフォだとすべてのアクセスを取得します。単純にページのアクセスだけじゃなく、jsやcss、画像すべてです。
アクセス解析時に除外しないといけないくなり、単純に解析が面倒になるので、出力したタイミングで除外してしまいましょう。
- httpd.conf
# 画像やcssなんかのログは別にする。 SetEnvIf Request_URI "\.(js|css|gif|woff.*|jpg|jpeg|png|JPG|ico)$" nolog # ログのフォーマットを設定 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined # LogFormatの末尾の設定名(?)を CustomLogディレクティブに設定 CustomLog logs/access_log combined env=!nolog CustomLog logs/img_access_log combined env=nolog
ファイルへの記述が完了したら、記述ミスがないか確認します。
$ apachectl -t
Syntax OK
んで、再起動
$ apachectl -k restart
ちなみに、私はいっぱつで完了できませんでした。なぜか、access.log、img_access.log 両方にログが書き込まれるという、不可解な現象が。。。
でも、単純でした。
# LogFormatの末尾の設定名(?)を CustomLogディレクティブに設定 CustomLog logs/access_log combined env=!nolog CustomLog logs/img_access_log combined env=nolog 〜 省略 〜 # 下にもあった orz CustomLog logs/access_log combined
ログローテートを設定する
このままでもいいですが、ひたすら同じログに書き込まれるので、量が増えていくとものすごい容量になります。
経験がありますが、私は50GBになるまで、ずっとシカトしていました。
とりあえず大きな容量になるのはまずいので、日毎にローテートするように設定しました。
ログローテートの設定を確認します。
Linuxでもできますが、今回はApacheでやりました。(めんどくさかったので)
- httpd.conf
# 先程設定した内容をコメントアウト # LogFormatの末尾の設定名(?)を CustomLogディレクティブに設定 # CustomLog logs/access_log combined env=!nolog # CustomLog logs/img_access_log combined env=nolog # 下記を追加 ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_%Y%m%d.log 86400 540" CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_%Y%m%d.log 86400 540" combined env=!nolog CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/img_access_%Y%m%d.log 86400 540" combined env=nolog
先程と同様、記述を確認して再起動。
# 記述確認 $ apachectl -t Syntax OK # 再起動 $ apachectl -k restart
すると。。。
$ ls /var/log/httpd/
access_20150402.log error_20150402.log img_access_20150402.log
このように出力されると思います。
以上!