Apacheのログ設定まとめ
バーチャルホスト毎にログを記録する
バーチャルホストで複数のサービスを運営している際に、それぞれのホスト毎にログファイルを分けると管理が容易になります。
バーチャルホスト設定の編集
設定はとても簡単で、バーチャルホストの設定(conf/extra/httpd-vhosts.conf)にCustomLog(アクセスログ)とErrorLog(エラーログ)の設定を記述するだけです。
<VirtualHost *:80> DocumentRoot "/htdocs/nyaruko" ServerName www.nyaruko.cqc CustomLog logs/nyaruko_server_access_log common ErrorLog logs/nyaruko_server_error_log </VirtualHost>
ログのローテートを行う
日別や週別、月別などにログを分けて保存することをログのローテートと言います。ログのローテート方法はいくつか有りますが、今回はapacheに付属しているrotatelogsを利用する方法と、logrotateを利用する方法の2つを紹介します。
rotatelogsを利用する
apacheに付属しているログのローテートツールです。ログの出力先としてパイプすることでログを分けて管理することができます。
CustomLog "|/usr/local/apache2/bin/rotatelogs /usr/local/apache2/logs/nyaruko_access_log_%Y%m%d 86400 540" common
第一引数
ログの出力先を記述します。今回は /usr/local/apache2/logs/nyaruko_access_log_%Y%m%d と記述しているので、logs/nyaruko_access_log_20130814 という形式で出力されます。
第二引数
ログの周期を記述します。86400sec=24h
第三引数
時差を記述します。540min = 9h GMT(日本標準時)
logrotateを利用する
CentOS6.4に標準で搭載されているlogrotateを利用すると、apacheに限らず様々なログを容易にローテートできます。 /etc/logrotate.d ディレクトリ以下に、新たにファイルを作成して設定を記述することでローテートが可能です。今回は /etc/logrotate.d/httpd-nyaruko という名前でファイルを作成して設定を記述しました。
# 対象のログファイル /usr/local/apache2/logs/nyaruko_access_log { # ローテートの実行方式 # 移動&作成 : create # コピー : copy # コピー&削除 : copytruncate create # ログファイルが見つからない際の挙動 # エラーを吐く : nomissingok # エラーを吐かない : missingok missingok # ログファイルが空の際の動作 # 空でも実行 : ifempty # 空の場合は実行しない : noifempty notifempty # ローテーションの頻度 # 日単位 : daily # 週単位 : weekly # 月単位 : monthly daily # 生成されるログファイル数の上限 rotate 7 # 圧縮設定 # 圧縮 : compres # 未圧縮 : nocompress # 遅延圧縮 : delaycompress compres # ローテート時にスクリプト実行 sharedscripts postrotate /sbin/service httpd reload endscript }
apache+logrotateではローテート実行時に、sharedscripts設定を記述して再起動を行います。再起動しないでローテートする場合はcreateではなくcopytruncateを指定します。しかし、ローテート中にアクセスがあった場合のログが記録されないのでログに漏れが発生します。
nginx+logrotateの場合は再起動せずに、ログの漏れもなくローテートが実行できますが、その設定はまた次の機会に・・・。