🐏

logrotate.dの基本

2024/07/24に公開

「/etc/logrotate.d/*」にて、ログローテート設定を行うことが出来ます。
ログローテート設定を行うことで、ログファイルがディスクを必要以上に圧迫することを予防します。

完成図(イメージ)

[user@ip-xxx-xxx-xxx-xxx log]$ pwd
/var/log
[user@ip-xxx-xxx-xxx-xxx log]$ sudo ls -a
.                  boot.log-20200205  btmp                   cron-20200205.gz  dmesg               messages              messages-20200210.gz    rsyncd.log-20200211.gz  secure-20200208.gz
..                 boot.log-20200206  btmp-20200201          cron-20200206.gz  dmesg.old           messages-20200201.gz  messages-20200211.gz    rsyncd.log-20200212.gz  secure-20200213.gz
{}                 boot.log-20200207  chrony                 cron-20200207.gz  grubby              messages-20200202.gz  messages-20200212.gz    rsyncd.log-20200213.gz  secure-20200214
amazon             boot.log-20200208  cloud-init.log         cron-20200208.gz  grubby_prune_debug  messages-20200203.gz  messages-20200213.gz    rsyncd.log-20200214     spooler
audit              boot.log-20200209  cloud-init-output.log  cron-20200209.gz  httpd               messages-20200204.gz  messages-20200214       sa                      tallylog
boot.log           boot.log-20200210  cron                   cron-20200210.gz  journal             messages-20200205.gz  php-fpm                 secure                  wtmp
boot.log-20200201  boot.log-20200211  cron-20200201.gz       cron-20200211.gz  lastlog             messages-20200206.gz  rsyncd.log              secure-20200201.gz      yum.log
boot.log-20200202  boot.log-20200212  cron-20200202.gz       cron-20200212.gz  lsyncd              messages-20200207.gz  rsyncd.log-20200208.gz  secure-20200205.gz      zabbix
boot.log-20200203  boot.log-20200213  cron-20200203.gz       cron-20200213.gz  maillog             messages-20200208.gz  rsyncd.log-20200209.gz  secure-20200206.gz
boot.log-20200204  boot.log-20200214  cron-20200204.gz       cron-20200214     maillog-20200201    messages-20200209.gz  rsyncd.log-20200210.gz  secure-20200207.gz

設定例

各種設定例です。
(設定ファイルは/etc/logrotate.d/*に作成します)

/etc/logrotate.d/httpd

/var/log/httpd/*log {
    daily
    missingok
    rotate 7
    dateext
    notifempty
    sharedscripts
    compress
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

/etc/logrotate.d/syslog

/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
    daily
    missingok
    rotate 7
    dateext
    notifempty
    sharedscripts
    compress
    delaycompress
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

/etc/logrotate.d/bootlog

/var/log/boot.log
{
    missingok
    daily
    copytruncate
    rotate 3
    #rotate 7
}

/etc/logrotate.d/php-fpm

/var/log/php-fpm/*log {
    daily
    missingok
    rotate 7
    dateext
    notifempty
    sharedscripts
    compress
    delaycompress
    postrotate
        /bin/kill -SIGUSR1 `cat /run/php-fpm/php-fpm.pid 2>/dev/null` 2>/dev/null || true
    endscript
}

/etc/logrotate.d/rsyncd

/var/log/rsyncd.log
{
    daily
    missingok
    rotate 7
    dateext
    notifempty
    sharedscripts
    compress
    delaycompress
}

ざっくり解説

/etc/logrotate.confは基本の設定ファイルですが、サービスごとに設定ファイルを分けて書くことの方が多いです。その為今回はlogrotate.d以下に設定ファイルを作成して記述するかたちをとっています。

良く使うコマンドの意味は以下です。

missingok
ログファイルが出力されていない(存在しない)場合でも無視する(エラーにしない)

daily
毎日ログローテートする

rotate n
何世代残すかの設定 (例: rotate 7 → 7世代分古いログを削除せず残す)

compress
ローテートしたログを圧縮する

Discussion