黒縁眼鏡は海を飛ぶ

IT中心にそこはかとなく

logrotateの設定

ふと思いだして公開しっぱなしにしているApacheのログを見てました。

このBlogとTwitterのリンクしかありませんが、なにやらaccess_logが肥大化している
ようで、中身を見てみるとcgi-bin/php*へのアクセスが大量に記録されていました。

404が返っているみたいなので別にいいかなと思っておりますが、いつかはブラックリストでも
作ってアクセス拒否したいなあと。


そんなことよりせっせとアクセスしようとする人達のせいでログが大きくなってしまうので、
apacheの各ログもlogrotate設定しておこうと思いまして。


とりあえずは以下のようにapache用にファイル作成。

touch /etc/logrotate.d/httpd

logrotateの設定ファイルはlogrotate.confとして/etc配下に置かれています。
デフォルトでsyslogだったりmaillogはまわすよう設定されており、
/etc/logrotate.d配下を読み込むように設定が書かれています。

このlogrotate.confに直接書いてしまってもいいようですが、管理がめんどくさくなるので
logrotate.d配下に個別ファイルを作成した方がいいかと思います。

さて、logrotate.d/httpdの中身は以下。

vim /etc/logrotate.d/httpd

・・・・・・・・

/usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log{
    weekly
    nocompress
    notifempty
    noolddird
    rotate 3
    postrotate
        /bin/killall -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/    dev/null` 2> /dev/null
    endscript
}


①/usr/local/apache2/logs/access_log /usr/local/apache2/logs/error_log{
ここはrotate設定したいログファイルを書きます。

②そのあとpostrotateまでオプションをつらつらと記述します。
 daily,weekly,monthlyなどでログファイルの生成頻度を指定し、
 rotate nで、nで指定して数字分の過去ログを保持します。

③postrotate以下のスクリプトは、仮にログのローテーション後にログファイルにログを吐き出していたプロセスがログファイルを見失ってしまうと、以降ではログが採取されなくなってしまいます。この回避策として、postrotate~endscript の間で、httpdにHUPシグナルを送り、再起動をすることで、正常にsyslogがログを吐き出すようにしています。



ということらしいのですが、設定してから1週間もたっていないので、rotateが正常に実行されているのかわかりません。

で、以下で確認できるとのこと

cat /var/lib/logrotate.status

そもそもlogrotate自体はプロセスでもなんでもないそうで、
cronで自動実行させているものだそうです。
止めたければcronの設定が必要になりますですな。まる。