apacheのアクセスログについて。
logrotateの設定で、サーバー毎にアクセスログを取得するルールを設定することができる。
特に需要が多そうなのが、アクセスログファイル名を日付にすること。
これは色々スクリプトで書いている記事を多く発見できるが、実際はdateextを記述することで設定できる。
色々探したが、まとまって書いてある記事がなかったので書くことにした。
注)dateextは、バージョンや環境によって使用できない場合があるので注意。
(errors rootも同様)
dateextが使用できない場合、シェルスクリプトを作成して、設定ファイル内(postrotate)で実行すれば日付のログファイルを作成可能。
[日付作成のスクリプト参考サイト]
http://www.pictnotes.jp/archives/2006/08/logrotate-bash.html
設定の一例を下記に示す。
/etc/logrotate.d/httpd
また下記ファイルで最後にローテーションされたログファイルの日付の確認ができる。
/var/lib/logrotate.status
次に設定ファイルの変更が終わったらlogrotateを実行して設定エラーがないか確認する。
基本的にlogrotateはデーモンではなく、cronで実行されるのでcronで設定されていなければ設定する必要がある。
特にいじってなければ、logrotateは毎日実行される。
/etc/cron.daily/logrotate
これにて設定は終了。
ローテーションを確認したい場合、/var/lib/logrotate.statusの日付をローテーションされる周期の日付より前に戻してから再度/usr/sbin/logrotateを実行すれば確認が可能。
http://memorva.jp/memo/linux/apache_logrotate.php
http://www.atmarkit.co.jp/flinux/rensai/apache13/apache13a.html
http://httpd.apache.org/docs/2.0/ja/logs.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20080530/305224/
http://itbtech.itboost.co.jp/inst/inst_25.php
http://cyberam.dip.jp/linux_foundation/systemlog/logrotate_main.html
http://forum.tsukaeru.net/viewtopic.php?t=2839
http://www.gside.org/Gentoo/etc/logrotate.html
http://www.pictnotes.jp/archives/2006/08/logrotate-bash.html
logrotateの設定で、サーバー毎にアクセスログを取得するルールを設定することができる。
特に需要が多そうなのが、アクセスログファイル名を日付にすること。
これは色々スクリプトで書いている記事を多く発見できるが、実際はdateextを記述することで設定できる。
色々探したが、まとまって書いてある記事がなかったので書くことにした。
注)dateextは、バージョンや環境によって使用できない場合があるので注意。
(errors rootも同様)
dateextが使用できない場合、シェルスクリプトを作成して、設定ファイル内(postrotate)で実行すれば日付のログファイルを作成可能。
[日付作成のスクリプト参考サイト]
http://www.pictnotes.jp/archives/2006/08/logrotate-bash.html
設定の一例を下記に示す。
/etc/logrotate.d/httpd
/var/log/httpd/*log {
nomissingok ← ログファイルが存在しない場合エラーを出す。
notifempty ← ログファイルが空ならローテーションしない。
sharedscripts ← 複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを実行する。
monthly ← 毎月ログローテーションする。
rotate 12 ← 指定した回数だけローテーションする。
# errors root ← エラー時にrootにメールする。
dateext ← ローテーションされたログをを日付形式にする。
# compress ← ローテーションされたログをgzipで圧縮する。
create 0644 root root ← ローテーション後に新たな空のログファイルを作成します。ファイルのパーミッション、ユーザ名、グループ名を指定できます。
postrotate ← postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行する。
/sbin/service httpd reload > /dev/null 2>/dev/null || true ← プロセスを一旦終了してログファイルを再度読み込む
# /bin/kill -HUP `cat /var/run/httpd.pid` ← 同上のコマンド一例
# /usr/bin/killall -HUP httpd ← 同上のコマンドの一例
endscript
}
nomissingok ← ログファイルが存在しない場合エラーを出す。
notifempty ← ログファイルが空ならローテーションしない。
sharedscripts ← 複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを実行する。
monthly ← 毎月ログローテーションする。
rotate 12 ← 指定した回数だけローテーションする。
# errors root ← エラー時にrootにメールする。
dateext ← ローテーションされたログをを日付形式にする。
# compress ← ローテーションされたログをgzipで圧縮する。
create 0644 root root ← ローテーション後に新たな空のログファイルを作成します。ファイルのパーミッション、ユーザ名、グループ名を指定できます。
postrotate ← postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行する。
/sbin/service httpd reload > /dev/null 2>/dev/null || true ← プロセスを一旦終了してログファイルを再度読み込む
# /bin/kill -HUP `cat /var/run/httpd.pid` ← 同上のコマンド一例
# /usr/bin/killall -HUP httpd ← 同上のコマンドの一例
endscript
}
また下記ファイルで最後にローテーションされたログファイルの日付の確認ができる。
/var/lib/logrotate.status
"/var/log/httpd/access_log" 2009-2-24
"/var/log/httpd/error_log" 2009-2-24
"/var/log/httpd/nss_access_log" 2009-1-24
"/var/log/httpd/nss_error_log" 2009-1-24
"/var/log/httpd/sitebuilder_error.log" 2009-1-24
"/var/log/httpd/ssl_access_log" 2009-1-24
"/var/log/httpd/ssl_error_log" 2009-2-24
"/var/log/httpd/ssl_request_log" 2009-1-24
"/var/log/httpd/error_log" 2009-2-24
"/var/log/httpd/nss_access_log" 2009-1-24
"/var/log/httpd/nss_error_log" 2009-1-24
"/var/log/httpd/sitebuilder_error.log" 2009-1-24
"/var/log/httpd/ssl_access_log" 2009-1-24
"/var/log/httpd/ssl_error_log" 2009-2-24
"/var/log/httpd/ssl_request_log" 2009-1-24
次に設定ファイルの変更が終わったらlogrotateを実行して設定エラーがないか確認する。
/usr/sbin/logrotate /etc/logrotate.d/httpd
[オプション]
-f 強制実行(テスト時には強制実行して動作を確認)
-v 詳細表示
[オプション]
-f 強制実行(テスト時には強制実行して動作を確認)
-v 詳細表示
基本的にlogrotateはデーモンではなく、cronで実行されるのでcronで設定されていなければ設定する必要がある。
特にいじってなければ、logrotateは毎日実行される。
/etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
これにて設定は終了。
ローテーションを確認したい場合、/var/lib/logrotate.statusの日付をローテーションされる周期の日付より前に戻してから再度/usr/sbin/logrotateを実行すれば確認が可能。
参考
http://memorva.jp/memo/linux/apache_logrotate.php
http://www.atmarkit.co.jp/flinux/rensai/apache13/apache13a.html
http://httpd.apache.org/docs/2.0/ja/logs.html
http://itpro.nikkeibp.co.jp/article/COLUMN/20080530/305224/
http://itbtech.itboost.co.jp/inst/inst_25.php
http://cyberam.dip.jp/linux_foundation/systemlog/logrotate_main.html
http://forum.tsukaeru.net/viewtopic.php?t=2839
http://www.gside.org/Gentoo/etc/logrotate.html
http://www.pictnotes.jp/archives/2006/08/logrotate-bash.html










