Armadillo-X1, Armadillo-IoT G3/G3L(以下Armadillo)で、ログファイルの容量を制限する方法を紹介します。
概要
ログファイルは、logrotateによって管理することができます。logrotateを利用すると、ログの周期や、 容量制限などを設定することが可能です。
出荷状態のArmadilloソフトウェアでもlogrotateが動作していますが、運用状況により、ログファイルがストレージを圧迫する可能性があります。 logrotateはcronによって自動的に実行されており、デフォルトでは日ごとの実行となっています。そのため、ログファイルが1日よりも短い期間で大量に出力されると、logrotateによる管理が追いつかず、問題になる場合があります。
例えば、Armadillo-IoTゲートウェイ G3 製品マニュアル「22.2.1.
保護機能の使用方法」
のようにoverlayfsを使用してeMMCの保護機能を使用した際、上記のようにログファイルが大量に生成されると、RAMを圧迫し、容量が不足する可能性があります。
そこで、本記事では、logrotateの設定方法と、logrotateの実行間隔を短くする方法について解説します。
logrotateの設定方法
cronによって実行されるlogrotateの設定ファイルは、/etc/logrotate.d/* 及び /etc/logrotate.conf です。 例として、/etc/logrotate.d/apt を見てみましょう。
/var/log/apt/term.log {
rotate 12
monthly
compress
missingok
notifempty
}
/var/log/apt/history.log {
rotate 12
monthly
compress
missingok
notifempty
}
上記の/var/log/* はlogrotateの管理対象であるログファイルを表しています。
logrotateの主な設定の一覧
logrotateにおける主な設定の一覧を以下に示します。
設定 | 説明 |
---|---|
rotate | rotateされたログファイルを保存する個数(古いログファイルをいくつ残すか)を設定する |
compress | rotateされたログファイルをgzipで圧縮して保存する |
hourly, daily, weekly, monthly, yearly | ログファイルがrotateされる周期を設定する |
create | rotateが行われたときに、新規ログファイルを生成する |
missingok | 対象のログファイルが存在しない場合でもエラーを発行せず、処理を続行する |
notifempty | 対象のログファイルが空の場合、rotateを行わない |
size | ログファイルがこの項目で設定したサイズ(バイト)よりも大きければdailyなどの周期に関係なくrotateを行う。k、M、G(キロ、メガ、ギガ)の接頭辞を利用することができる |
minsize | ログファイルが指定したサイズより大きく、かつdailyなどの周期の条件を満たしているときにrotateを行う |
その他の設定については、logrotateのマニュアルページを参照してください。
[Armadillo]$ man logrotate
logrotateの設定例
例として、/var/log/aaa.log というファイルに対し、
・1週間以上経過するとrotateを行う
・ファイルサイズが2メガバイトを超えたときにrotateを行う
・過去のログファイルを4世代分まで保管する
・過去のログファイルをgzipで圧縮する
という設定のlogrotateのファイル内容を以下に示します。
/var/log/aaa.log {
weekly
size 2M
rotate 4
compress
}
以上のように設定したファイルを /etc/logrotate.d/ に配置することで、cronにより自動実行されるlogrotateの実行対象となります。しかし、デフォルトでは、cronによるlogrotateの自動実行は1日に1回しか行われません。そのため、1日の間にログファイルのサイズが設定した値を超えてしまっても、1日が経過するまでlogrotateが実行されず、ログファイルが想定しないサイズになる可能性があります。
そこで、以下のように、/etc 内のcron.dailyにあるlogrotateをcron.hourlyにコピーすることで、logrotateを1時間毎に実行させることができます。
[Armadillo]$ ls /etc/cron.daily/logrotate
/etc/cron.daily/logrotate
[Armadillo]$ cp /etc/cron.daily/logrotate /etc/cron.hourly/
[Armadillo]$ ls /etc/cron.hourly/logrotate
/etc/cron.hourly/logrotate
また、logrotateを手動で実行するには、-f オプションをつけてlogrotateを実行します。
実行例
[Armadillo]$ logrotate -f /etc/logrotate.d/apt