logrotateの設定について

投稿者: | 2017年2月14日

logrotateはログの世代管理(ログローテート)をするソフトウェアです。
Redhat系のOSには標準で入ってますのでいつも使用しているAmazonLinuxにも入ってます。
今回はlogrotateの設定確認と対象ファイルを追加を行います。
まずはlogrotateが入っているか確認します。

$ rpm -qa | grep logrotate
  logrotate-3.7.8-26.14.amzn1.x86_64

続いて対象ファイルの追加です。
/etc/logrotate.dの中に設定ファイルを追加することでログローテートの対象を増やすことができます。
AmazonLinuxのデフォルトではApacheやMySQLのログ等、システム以外にも設定がされています。

$ cd /etc/logrotate.d
$ ll
  total 24
  -rw-r--r--. 1 root root 139 Jul 24  2015 dracut
  -rw-r--r--  1 root root 185 Feb  4  2016 httpd
  -rw-r--r--  1 root root 871 Mar 23  2016 mysqld
  -rw-r--r--. 1 root root 329 Jul 17  2012 psacct
  -rw-r--r--. 1 root root 210 Dec 10  2014 syslog
  -rw-r--r--. 1 root root  87 Jul 24  2015 yum

今回はjbossのログファイルを例としファイルを追加します。

$ vi /etc/logrotate.d/jbosslog

下記のようにログファイルのファイルパスを記述します。
また、「rotate」の項目で何世代まで管理するか指定ができます。
既に他のファイルが配置されているのでそれを参考にしてファイルを記述すれば簡単です。

/var/log/jboss_access.log
/var/log/server.log
/var/log/jboss_boot.log
/var/log/jboss_console.log
/var/log/app_access.log
{
    daily
    rotate 10
    missingok
    copytruncate
    dateext
    sharedscripts
    postrotate
        /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
    endscript
}

これだけ設定が完了します。
ログローテートの時間になれば実施されます。
ここから念のためログローテートの時間を確認します。
デフォルトではログローテートはanacronの日時処理に登録されています。
本当にそうなっているかanacronの設定を確認します。

$ vi cat /etc/anacrontab

下記の結果を見ての通り、anacronは1~5時に動作します。

# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=0-5
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

日時で動くanacronの設定にlogrotateがあることを確認します。

$ cd /etc/cron.daily
$ ll
  合計 12
  -rwxr-xr-x 1 root root 196 12月 26 11:35 logrotate
  -rwxr-xr-x 1 root root 618  8月 28  2014 man-db.cron
  -rwxr-xr-x 1 root root 386 12月 26 11:35 tmpwatch

ファイルがあればlogrotateがanacronに設定されています。
また、logrotateはテスト実行することができます。
下記のコマンドを使用することで強制的にログローテートを実行できます。

$ logrotate -d /etc/logrotate.d/jboss

ただし、当日のログローテートが既に実施されてた場合は何も起こりません。
ログローテートの状況はlogrotate.statusに記述されています。

$ vi /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2017-1-14
"/var/log/server.log" 2017-1-31
"/var/log/dracut.log" 2016-12-26
"/var/log/httpd/*log" 2017-1-14
"/var/log/wtmp" 2016-12-26
"/var/log/spooler" 2017-1-31
"/var/log/app_access.log" 2017-1-31
"/var/log/btmp" 2017-1-14
"/var/log/maillog" 2017-1-31
"/var/log/maintenance.log" 2017-1-31
"/var/log/jboss_console.log" 2017-1-31
"/var/log/jboss_access.log" 2017-1-31
"/var/log/jboss_boot.log" 2017-1-31
"/var/log/secure" 2017-1-31
"/var/log/messages" 2017-1-31
"/var/log/cron" 2017-1-31
"/var/account/pacct" 2016-12-26

このファイルには最後にログローテートを実施した日付が記述されています。
このファイルを編集することでログローテートを再実施することができる。
ちなみに「-f」オプションを使用することでも強制的に実施することができます。
AWSのAmazonLinuxとGMOConoHaのCentOS6でログローテートの設定を確認したところ、両方ともlogrotateが標準で設定されていました。
logrotateはLinuxの基本的なソフトウェアです。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA