Apacheのログを日毎にしてみる
VirtualBoxにCentOSをとりあえずインストール
の続き
Apacheのログを日毎にしてみる。
インストール直後のログ出力がどうなっているか
とりあえずApacheをインストールする。
$ sudo yum -y install httpd $ sudo service httpd start $ sudo chkconfig httpd on
http://サーバーのアドレス/
にアクセスすると、Apacheのページが表示される。
http.confの設定を見てみると、
ServerRootが「/etc/httpd」になっていて、そこからの相対パスで
「logs/error_log」と「logs/access_log」にログを出力するよう
設定されている。
$ cat /etc/httpd/conf/httpd.conf ・・・ ServerRoot "/etc/httpd" ・・・ ErrorLog logs/error_log ・・・ CustomLog logs/access_log combined ・・・
また、シンボリックリンクで「/etc/httpd/logs」→「/var/log/httpd」
になっていて、
$ ls -la /etc/httpd/ ・・・ lrwxrwxrwx 1 root root 19 5月 2 18:14 2014 logs -> ../../var/log/httpd ・・・
結果、「/var/log/httpd」にログが出力されている。
$ sudo ls /var/log/httpd/
access_log error_log
また、1日1回cronでlogrotateが実施されるようになっており、
$ ls /etc/cron.daily/
logrotate
/var/log/httpdのログが週毎にローテートされるようになっている。
$ cat /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 # use date as a suffix of the rotated file dateext # uncomment this if you want your log files compressed #compress # RPM packages drop log rotation information into this directory include /etc/logrotate.d ・・・
$ cat /etc/logrotate.d/httpd /var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
試しに日時を未来に変更して、
$ sudo date -s '2014/12/31' 2014年 12月 31日 水曜日 00:00:00 JST
logrotateを実施してみる。
$ sudo /etc/cron.daily/logrotate
ログがローテートされているのが確認できる
$ sudo ls /var/log/httpd/ access_log access_log-20141231 error_log error_log-20141231
一応、進めた日付を元に戻しておく。
$ sudo date -s '本日の日付'
logrotateで日毎にする場合
dailyを追加する。
$ cat /etc/logrotate.d/httpd /var/log/httpd/*log { daily ←追加 missingok notifempty sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
日付を次の日にしてlogrotateを実施すると、
次の日の日付でローテートされているのがわかる。
$ sudo date -s '次の日' $ sudo /etc/cron.daily/logrotate $ sudo ls -la /var/log/httpd/
ただ、ファイル名に付く日付はログローテートを実施した日付であり、
ログの中身は前日の日付なので、ちょっと分かりにくい。
rotatelogsで日毎にする場合
httpd.confを下記のように設定すると、
$ sudo vi /etc/httpd/conf/httpd.conf ・・・ ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_%Y%m%d.log 86400 540" ・・・ CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_%Y%m%d.log 86400 540" combined ・・・
$ sudo service httpd restart
ログを出力した日の日付でファイルが生成される。
$ sudo ls /var/log/httpd/
access_20140523.log error_20140523.log