SE徒然備忘録

日々知識と技術を吸収中です。

apacheのlogrotate

2009年03月04日 06時29分51秒 | Linux
apacheのアクセスログについて。
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
}


また下記ファイルで最後にローテーションされたログファイルの日付の確認ができる。

/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


次に設定ファイルの変更が終わったらlogrotateを実行して設定エラーがないか確認する。
/usr/sbin/logrotate /etc/logrotate.d/httpd

[オプション]
-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


これにて設定は終了。
ローテーションを確認したい場合、/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
ジャンル:
サーバー
キーワード
ログファイル 設定ファイル パーミッション シェルスクリプト
コメント (0) |  トラックバック (0) |  この記事についてブログを書く
Messenger この記事をはてなブックマークに追加 mixiチェック シェア
« シェルスクリプト | トップ | MSN Sky Drive »

コメント

コメントはありません。

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。

コメント利用規約に同意の上コメント投稿を行ってください。
※文字化け等の原因になりますので、顔文字の利用はお控えください。
下記数字4桁を入力し、投稿ボタンを押してください。この数字を読み取っていただくことで自動化されたプログラムによる投稿でないことを確認させていただいております。
数字4桁

トラックバック

この記事のトラックバック  Ping-URL
ブログ作成者から承認されるまでトラックバックは反映されません。
  • 送信元の記事内容が半角英数のみのトラックバックは受け取らないよう設定されております。
  • ※ブログ管理者のみ、編集画面で設定の変更が可能です。

あわせて読む