ITの隊長のブログ

ITの隊長のブログです。Rubyを使って仕事しています。最近も色々やっているお(^ω^ = ^ω^)

Apacheのアクセスログをいじる

スポンサードリンク

http://www.flickr.com/photos/29186177@N00/9474112246
photo by Mrs Airwolfhound


(なんか画像は違う)


めちゃめちゃ久々のApache !


ログのフォーマット、出力を割り振る


アクセスログって、デフォだとすべてのアクセスを取得します。単純にページのアクセスだけじゃなく、jsやcss、画像すべてです。


アクセス解析時に除外しないといけないくなり、単純に解析が面倒になるので、出力したタイミングで除外してしまいましょう。

# 画像や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でやりました。(めんどくさかったので)

# 先程設定した内容をコメントアウト
# 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


このように出力されると思います。


以上!