xserver
Home
クッキー及びWeb ビーコンについて
logrotate の概要
ここでは、ログの肥大化を防ぐためのログのローテーションについて解説していきます。syslog や他のプロセスが出力するファイルは放置していくとどんどんサイズが大きくなり、ディスクスペースを圧迫していきます。インストール時は/var ディレクトリのディスク占有率が0%であっても、数週間、数ヶ月経過するごとにあっという間に占有率が増大していることに気がつくと思います。しかし、これらの出力されるログを何世代分ローテーションさせるかといったことを予め決めておけば、指定した以上のファイルは作成されなくなり、その中でログがローテーションされていくのでログサイズの肥大化を防止することができるのです。RPMでパッケージをインストールしている方は、ほとんどログのローテーションをカスタマイズする必要はありませんが、ソースからコンパイルしてインストールした場合には、ログのローテーションは必須の作業となります。まだ容量がたくさん余ってるからいいや、とは言わずに将来のためにもきちんと管理しておきたいところです。
■logrotate のインストール
RedHat にデフォルトでインストールされますが、もしインストールされていなければ予めインストールしておいてください。
# rpm -q logrotate
# rpm -ivh logrotate-3.6.8-1.i386.rpm
■/etc/logrotate.conf の設定
logrotate の設定ファイルは/etc 以下に配置されています。weekly で1週間分ログを残すという意味になり、rotate4 となっているので4週間分のログが残ることになります。既に数週間以上、Linuxを管理しているならば、/var/log 以下のファイルを見てみればわかるとおもいますが、messages、messages.1、messages.2 のようにログがローテーションされている事がわかるでしょう。デフォルトでは、4週間分、ローテートされる設定にされているので、messages.4 までは作成されますが、それ以降は、そのファイル内でローテーションされます。なお、ログのデータ量が多い場合には、daily にし、rotate の値をもっと大きくしてあげればいいと思います。
# vi /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# uncomment this if you want your log files compressed
#compress
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
monthly
create 0664 root utmp
rotate 1
}
# system-specific logs may be also be configured here.
weekly
毎週ログを置き換える。毎日はdaily、毎月はmonthly
rotate 4
ログを4世代分残す。weeky を指定した場合は4週間という意味になります。
create
新規ログファイルをローテーションした直後に作成する
compress
圧縮する。デフォルトでは圧縮しないようになっているので、ディスクの空き容量をみて、有効にするかどうか判断してください。
include /etc/logrotate.d
各ログファイルの設定がおかれているパスを指定します。直接、logrotate.conf にローテーションの設定を書いても、あるいは、/etc/logrotate.d 以下にファイルを作成してそこにログローテート用の設定ファイルを置いてもどちらでも構いません。RPM用のログローテーションのファイルは/etc/logrotate.d 以下に配置されています。
/var/log/wtmp {
wtmp のログファイルは毎月1世代のみログを残し、所有者がroot でグループがutmp で且つパーミッション値が664 のログファイルを作成するという意味。
■/etc/logrotate.d の設定
各ログファイルの設定は、/etc/logrotate.d 以下に各サービスごとに別ファイルに記述されています。私の環境では以下のようなファイルが配置されています。
# vi /etc/logrotate.d/
named rpm samba squid syslog up2date
それでは実際に、syslog ファイルを見てみると以下のようになっています。1行目と2行目で、syslog が残すファイルのパスが記述されており、
sharedscripts
は、以降に記述された処理をワイルドカードの指定に関わらず、1度だけ実行するという宣言文です。処理の実行は、
postrotate
~
endscript
の間に記述します。この間に記述されているスクリプトは非常に重要な役割を持っています。仮にログのローテーション後にログファイルにログを吐き出していたプロセスがログファイルを見失ってしまうと、以降ではログが採取されなくなってしまいます。この回避策として、postrotate~endscript の間で、syslogにHUPシグナルを送り、再起動をすることで、ローテーション後に create によって作成されたファイルに正常にsyslogがログを吐き出すようにしているのです。
# cat /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog
/var/log/spooler /var/log/boot.log /var/log/cron {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
■logrotate の設定例
それでは、Apache のログのローテートを例に簡単に説明していきます。/etc/logrotate.d 以下にhttpd として新規にファイルを作成します。
# vi /etc/logrotate.d/httpd
/usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log {
weekly
rotate 4
missingok
sharedscripts
postrotate
/bin/killall -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null
endscript
}
次に、ログのローテートを実行します。念のため、/var/lib/logrotate.log を見て、ログのローテートが実行されたかどうか確認しておきます。
# /usr/sbin/logrotate /etc/logrotate.conf
# cat /var/lib/logrotate.status
"/usr/local/apache2/logs/access_log" 2004-1-28
"/usr/local/apache2/logs/error_log" 2004-1-28
後は、一週間後にきちんとaccess.log.1が作成されされるか待つわけですが、それまで待てないせっかちな方は、/var/lib/logrotate.status を編集して一週間前の状態にしておきます。
# vi /var/lib/logrotate.status
"/usr/local/apache2/logs/access_log" 2004-1-20
"/usr/local/apache2/logs/error_log" 2004-1-20
編集しおえたら、再び logrotateを実行します。これで、access_log.1 といったファイルが作成されるはずです。実際に、ファイルの中身をみて、ログが過去のものかもきちんと確認しておきましょう。
# /usr/sbin/logrotate /etc/logrotate.conf
■cron による定期実行
logrotateはデーモンとして稼動しているわけではないので、loglotate 自身が自分でログのローテーションを行うわけではなく、cron によって自動実行されるようになっています。その際、cron によって/etc/cron.daily/logrotate というシェルスクリプトが呼び出されます。実行が完了すると、
/var/lib/logrotate.status
という結果ファイルが作成され、これを見ると実際にいつログのローテーションが行われたかを確認することができるので、正常にログのローテーションが行われているかどうか不安な方は確認しておきましょう。
# cat /etc/cron.daily/logrotate
/usr/sbin/logrotate /etc/logrotate.conf
# cat /var/lib/logrotate.status
l
ogrotate state -- version 2
"/var/log/named.log" 2004-1-13
"/var/log/rpmpkgs" 2004-1-25
"/var/log/messages" 2004-1-25
"/var/log/secure" 2004-1-25
"/var/log/maillog" 2004-1-25
"/var/log/spooler" 2004-1-25
"/var/log/boot.log" 2004-1-25
"/var/log/cron" 2004-1-25
"/var/log/up2date" 2004-1-13
"/var/log/wtmp" 2004-1-13
"/var/log/squid/access.log" 2004-1-25
"/var/log/squid/cache.log" 2004-1-25
"/var/log/squid/store.log" 2004-1-25
"/var/log/samba/log.nmbd" 2004-1-28
"/var/log/samba/log.smbd" 2004-1-28
■主なlogrotateのオプション
copy
ログファイルのコピーを生成する。このオプションを使用すると、既に古いログファイルが存在することになるので、createオプションは無効になる。
copytruncate
コピーの作成後にログファイルを移動する代わりに、オリジナルのログファイルを切り詰める。あるプログラムがログファイルを閉じることができず、いつまでの前のログファイルに書きつづけている場合などに有効なオプション。しかし、ファイルをコピーして切り詰めている間の時間のログが書き込まれない可能性があります。
extention
ローテーション後のバックアップログに付加する拡張子を指定する。extにはファイルの拡張子をを指定します。compress オプションを指定した場合には、ここで指定した拡張子の後に、.gz などの拡張子が付加される。
ifrotate
もしもログファイルが空であったとしてもローテーションさせる。デフォルトで有効になっている。
mail
ログファイルのローテーションが完了した時点で、mail オプションの引数として与えたメールアドレスにメールを送る。
mailfirst
mail オプション使用時に、ローテーションする予定のファイルをメールに出力します。
maillast
mail オプション使用時に、ローテーションしたファイルをメールで出力する。
missingok
ログファイルが見つからなかった場合、エラーメッセージを出力せずに次のログファイルの処理に移行する。
size
size オプションのパラメータとして与えた数値よりもログファイルのサイズが大きかった場合に、ログファイルのローテーションを行う。"M"(メガ)や"K"(キロ)が指定できます。
start
ローテーションする場合に、付加される数字の拡張子をいくつから始めるかを指定する。デフォルトでは1 になっているので、messages.1 のようになっています。
unmatched
どのview にもマッチしなかったメッセージ。
networ
k
ネットワークに関するメッセージ。
upadate
動的更新に関するメッセージ。
queries
問い合わせのログ。
dnssec
DNSSECとTSIGの処理に関するメッセージ。
lame-servers
名前解決を試みようとして発見した、間違った設定のサーバーに関するメッセージ。
TOPに戻る
Sponcerd Link
Search
Web
サイト内
Rental Server
【レンタルサーバのXbit】
低価格・高品質のビジネスクオリティー。300メガ1,050円~30分で サービススタート可能!
レンタルサーバー「マイドメイン1000」
容量300MB、月額125円、高性能なサーバが日本最大級のバックボーンに直結。
さくらのレンタルサーバ
。
当サイトはLinux自宅サーバーの構築を目的としたサイトです。
当サイトに関するご意見、ご要望等は、こちらの
メールアドレス
よりお願いします。
Beginning
|
Introduction
|
Installation
|
Server
|
Security
|
Tips
|
Related-Sites
Copyright©2003-2006 KORO All Rights Reserved.
総計:
今日:
昨日: