syslogを1時間おきに保存

対象機器 CAT845

  • syslogを1時間ごとに時刻ファイル名を付けてログローテートする
  • syslogを1時間ごとに USBメモリなどへコピーする

CAT845の /var/log は tmpfs(ramdisk)であるため電源を切ると消えてしまいます。

/var/log/syslog を保存するには /var/log/ に microSD や USBメモリをマウントすればよいのですが、1行書き込みごとにファイルライトすると フラッシュメディアの寿命やライト途中の電源断事故が気になります。

そこで /var/log は tmpfs(ramdisk)のままとし、1時間毎に microSD や USBメモリへコピーすることとします。

すると1日最大24回。1年で 8,760回のコピーで済みます。

syslog_日付時刻 ファイルにする

  • /etc/logrotate.d/rsyslog
/var/log/syslog
{
        rotate 7                        # ebihara 意味なし
        # daily
        hourly                          # ebihara
        missingok
        notifempty
        # delaycompress                 # ebihara
        # compress                      # ebihara
        nodateext                       # ebihara
        postrotate
                EXT=`date +"%Y%m%d_%H%M%S"`
                for f in $1
                do
                        test -f ${f}.1 && mv ${f}.1 ${f}_${EXT}
                        test -f ${f}_${EXT} && gzip -9 ${f}_${EXT}   # gz圧縮する場合
                done
                invoke-rc.d rsyslog rotate > /dev/null
        endscript
}

rotate 回数は意味がなくなります。
compress 圧縮はしないこととします。
postrotate と endscript の間にはシェルスクリプトが書けるようです。
ここで syslog.1 を見つけて syslog_日付時刻 にリネイムしています。
syslog_日付時刻 ファイルが存在すれば gzip 圧縮しています。

毎時USBメモリへコピーする

# cd /etc/cron.hourly/
# cp /etc/cron.daily/logrotate .

/etc/cron.daily/ に置かれたコマンドは辞書名順に実行されるため、xlogcopy は logrotate の後に実行される。

  • /etc/cron.hourly/xlogcopy (新規作成)
#!/bin/sh

COPYDIR=/tmp/logbackup         # コピー先パス。実験的に /tmp にしている。mmcblk0やusbメモリのマウント先に変更する事

# 必要があれば USBメモリや microSD を mount する

test -d $COPYDIR || mkdir -p $COPYDIR   # dirが無ければ作る

cp -pu /var/log/syslog_* $COPYDIR                           # -u は 日付ファイルサイズが同じであれば skip

find /var/log/ -name "syslog_*" -mtime   +1 -exec rm -f {} \;   # 1日経ったら消す
find $COPYDIR  -name "syslog_*" -mtime +300 -exec rm -f {} \;   # 300日経ったら消す

sync

# 必要があれば USBメモリや microSD を umount する

電源を落とすとき

# /usr/sbin/logrotate -f /etc/logrotate.conf            -f 強制ログローテート
# /etc/cron.hourly/xlogcopy                             ファイルコピー

注意事項

microSDやUSBメモリのフォーマットに FAT16 は使用しない方が良いです。

  • FAT16はタイムスタンプが2秒刻み(偶数のみ)
  • cp -u でファイルスタンプが同じであれば skip としているが、/var/log 側は普通に秒数を持っているけども FAT16側は偶数秒に丸められてしまうので
    cp -u でタイムスタンプが合わず約半数はコピーが実行される。ファイル数が多いと致命的に時間がかかる。
  • FAT32 (vfat)なら問題ない

関連

自動リンク

Last-modified: 2018-07-25 (水) 16:09:02 (394d)