ログローテーションのインストールを行う
まずは、ログローテーションのインストールを行います。
インストール済みか否かは、それぞれ以下のように確認することができます。
CentOS Scientific Linux
$ rpm -qa|grep logrotate
logrotate-3.7.8-12.el6.i686
|
上記のようにパッケージ名が表示されればインストールされています。
Debian Ubuntu
$ dpkg --list|grep logrotate
ii logrotate 3.7.8-6 Log rotation utility
|
先頭に
ii が表示されるとインストールされています。
既にインストール済みの場合は、次の
設定の項へどうぞ。
CentOS Scientific Linux
$ yum install logrotate
...
|
Debian Ubuntu
$ aptitude install logrotate
...
|
ログローテーションの設定を行う
ログローテーションの管理ファイルは、/etc/logrotate.conf です。
これを編集して、ログローテーションの初期設定を行います。
しかし、変更するようなところがありません。
httpd(apache)のロギングファイルの管理を変更したい場合は、そのサービス名で、そのサービス毎のログローテーションを設定できるようになっています。
httpd(apache)の場合は、/etc/logrotate.d/httpd です。
以下は、/etc/logrotate.d/httpd の編集イメージです。
/var/log/httpd/*.log {
daily
missingok
rotate 90
compress
ifempty
sharedscripts
postrotate
/sbin/service httpd graceful
endscript
}
|
筆者の場合は、このように変更してみました。
この設定では、毎日、ログローテーションを行い、90日分を保存します。
以下は、ここで設定できるパラメータとその意味です。
compress
ローテーションされたログをgzipで圧縮する。
create [パーミッション] [ユーザ名] [グループ名>]
ローテーション後に新たな空のログファイルを作成します。ファイルのパーミッション、ユーザ名、グループ名を指定できます。
daily
毎日ログローテーションする。
/etc/crontabの内容です。
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly
|
(デフォルトでは、4時2分にローテーションが実施される。)
weekly
毎週ログローテーションする。
(デフォルトでは、毎週日曜日4時22分にローテーションが実施される。)
monthly
毎月ログローテーションする。
(デフォルトでは、毎月1日4時42分にローテーションが実施される。)
ifempty
ログファイルが空でもローテーションする。
missingok
ログファイルが存在しなくてもエラーを出さない。
nocompress
ローテーションされたログを圧縮しない。
nocreate
新たな空のログファイルを作成しない。
nomissingok
ログファイルが存在しない場合エラーを出す。
noolddir
ローテーション対象のログと同じディレクトリにローテーションされたログを格納する。
notifempty
ログファイルが空ならローテーションしない。
olddir ディレクトリ名
指定したディレクトリ内にローテーションされたログを格納する。
postrotate – endscript
postrotateとendscriptの間に記述されたコマンドをログローテーション後に実行する。
prerotate – endscript
postrotateとendscriptの間に記述されたコマンドをログローテーション前に実行する。
rotate 回数
指定した回数だけローテーションする。
size ファイルサイズ
ログファイルが指定したファイルサイズ以上であればローテーションする。
sharedscripts
複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドを1回だけ実行する。
nosharedscripts
sharedscriptsの逆。複数指定したログファイルに対してpostrotateまたはprerotateで記述されたコマンドをファイルの数だけ実行する。
この設定で終わりです。
ここの設定をすれば、後は、自動的に読み込んでくれます。
ログローテーションの確認を行う
ログローテーションの確認を行うのは、logrotate -d で実行すれば、確認することができます。
ここで利用しているlogrotateのパラメータは以下のとおりです。
-d : デバッグ実行します。
-v : 詳細表示します。
他にも以下のようなものがあります。
-f : 強制的に実行します。
このオプションは、1度も実行されたことがないログローテーションの場合に指定することがあります。
-m : メール送信のためのコマンドを指定します。 ex) -m=/bin/mail
-s : 状態ファイルのパスを続けて指定します。 ex) -s=/var/lib/logrotate.status
一般的に、-s は違うユーザがlogrotate を実行したい場合に、状態ファイルを分けることで混乱を防ぐことができます。
正常な場合は、以下のような詳細情報を出力するだけです。
$ logrotate -dv /etc/logrotate.d/httpd
reading config file /etc/logrotate.d/httpd
reading config info for /var/log/httpd/*.log
Handling 1 logs
rotating pattern: /var/log/httpd/*.log after 1 days (90 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/httpd/access.log
log does not need rotating
not running postrotate script, since no logs were rotated
|
以下のように出力された場合、
ログローテーションの必要なしと判断されています。
log does not need rotating
|
以降のエラーやログファイルが空、あるいは存在しない場合を除けば、
ほとんどの場合は、ログローテーションを最後に行ってまだ1日以上の経過していない場合がほとんどでしょう。
その場合、以下のファイルで最終ログローテーション日付を変更してあげるとうまくいくことがあります。
CentOS Scientific Linux → /var/lib/
logrotate.status
Debian Ubuntu → /var/lib/logrotate/
status
...
"/var/log/httpd/access.log" 2013-4-7 → 2013-4-6
...
|
また、まだ1度の実行されたことがないローテーションの場合も同じように
log does not need rotating と出力される場合があります。
この場合は、1度だけ
-f オプションを付けて実行すると、以降、うまくいく場合があります。
$ logrotate -fv /etc/logrotate.d/httpd
reading config file /etc/logrotate.d/httpd
reading config info for /var/log/httpd/*.log
Handling 1 logs
rotating pattern: /var/log/httpd/*.log after 1 days (90 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/httpd/access.log
log needs rotating
rotating log /var/log/httpd/access.log, log->rotateCount is 90
...
|
この後、先の最終ログローテーション日付を設定してあげて、再度、実行してみてください。
もしも設定情報に誤りがあった場合は、以下のようにerror情報を出力されます。
$ logrotate -dv /etc/logrotate.d/httpd
reading config file /etc/logrotate.d/httpd
reading config info for /var/log/httpd/*.log
error: /etc/logrotate.d/httpd:3 unknown option 'aaaa' -- ignoring line
Handling 1 logs
rotating pattern: /var/log/httpd/*.log after 1 days (90 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/httpd/access.log
log does not need rotating
not running postrotate script, since no logs were rotated
|
httpd(apache)のログは、非常に大事です。
参考記事:
アクセスログの活用
ログ情報から、サイトの運営の見直し(フィードバック)を行うことがサイト管理者の仕事でもあります。
格安レンタルサーバーでも、ほとんどが、アクセスログとして解析結果を提供しています。
そのまま、apacheの生ログ情報をダウンロードさせてくれるところもあります。
これは、活用しない手はありません。ぜひ、活用しましょう。
コメントを投稿 :