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の設定が必要になりますですな。まる。