1.ログのローテーションとは
rsyslogの「/var/log/messages」にはログが蓄積していくが、一つのファイルに蓄積し続けることでファイルが肥大化してI/O負荷の上昇やディスク容量枯渇、読み書き検索の遅延に繋がる。
これを防ぐために古いログを別ファイルに切り離して管理することをログのローテーション機能と呼ぶ。古いログファイルは、保存できるログファイル数をこえると古い方から自動で削除される。
ローテーションの実行はコマンド「logrotate」で行われ、デフォルトではcronにより1日1回呼び出されている。
2.コマンド「logrotate」
(1)書式
cronで自動実行されるためコマンドラインに直接打ち込むことはないが参考までに。
logrotate [オプション] /etc/logrotate.conf
(2)オプション
①logrotate -d /etc/logrotate.conf
設定内容の確認。実行はしない。
②logrotate -f /etc/logrotate.conf
強制実行。
(3)設定
ローテーションの頻度やどれくらい過去のログまで保持するかなどを設定するには設定ファイル「/etc/logrotate.conf」を編集する必要がある。以下設定内容一覧。覚える必要ない。
設定項目 | 設定できる内容 | 説明 |
---|---|---|
frequency 系 | daily , weekly , monthly , yearly | ログのローテーション周期 |
rotate | 数値(例:4) | 保持するログ世代数(古い順に削除) |
compress | (引数なし) | ローテーション後にgzipで圧縮(.gz ) |
nocompress | (引数なし) | 圧縮しない(デフォルト無効) |
delaycompress | (引数なし) | ローテーションの次回で圧縮(compress と併用) |
nodatecompress | (引数なし) | 圧縮をすぐ実施する |
dateext | (引数なし) | ローテーションファイルに日付を付ける(例:log-20250701.gz ) |
dateformat | -%Y%m%d など | dateext 使用時のフォーマット |
missingok | (引数なし) | ログファイルがなくてもエラーにしない |
nomissingok | (引数なし) | ログファイルが無ければエラーにする |
notifempty | (引数なし) | 空のログはローテーションしない |
ifempty | (引数なし) | 空でもローテーションする(デフォルト) |
create | モード ユーザー グループ | 新ログファイルのパーミッションと所有者(例:0640 root utmp ) |
nocreate | (引数なし) | ログファイルを新しく作成しない |
maxsize | サイズ(例:100M) | 最大サイズに達したらローテーション(daily などと併用可能) |
minsize | サイズ(例:1M) | 最小サイズに達しなければローテーションしない |
size | サイズ | 指定サイズに達したときにのみローテーション(周期設定は無視される) |
sharedscripts | (引数なし) | 同じブロック内ファイルに対して1回だけスクリプトを実行 |
nosharedscripts | (引数なし) | 各ログファイルごとにスクリプト実行 |
prerotate ~endscript | シェルスクリプト | ローテーション前の処理(例:通知・停止など) |
postrotate ~endscript | シェルスクリプト | ローテーション後の処理(例:rsyslogのHUPなど) |
include | ディレクトリパス | 他の設定ファイルを読み込む(通常 /etc/logrotate.d ) |
compresscmd | コマンド名 | 圧縮に使うコマンド(デフォルト:gzip ) |
uncompresscmd | コマンド名 | 解凍コマンド(デフォルト:gunzip ) |
compressoptions | 文字列 | 圧縮オプション(例:-9 ) |
extension | .log など | ログファイルの拡張子を明示的に指定 |