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  52 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'
20141231日 水曜日 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