ログのローテーション(ローテート)について
ログローテーションとは
ログファイルを一定の条件(時間・サイズ)で分割、保存・圧縮・削除する仕組み
日付毎、容量毎など分割単位を設定可能
ログファイルのサーバ容量の圧迫を防止する
正しく設定することでログ調査が楽になる
ログローテーションを行うツール
Linuxのlogrotate
https://www.redhat.com/ja/blog/setting-logrotate
OSレベルでログ管理
Rails以外のログ(sidekiq、cron等)を一括管理できる
ログ分割、圧縮、削除も可能
crond or systemd timerによって動いている
RubyのLogger クラス
アプリケーションレベルでログ管理
https://docs.ruby-lang.org/ja/2.2.0/class/Logger.html
ファイルサイズ、日付の分割などがデフォルトで使用可能
logrotateの設定の確認
ログローテーションの開始時刻
→ systemd timerで毎日00:33に実行
code: (sh)
$ systemctl status logrotate.timer
* logrotate.timer - Daily rotation of log files
Loaded: loaded (/usr/lib/systemd/system/logrotate.timer; enabled; preset: enabled) # systemd timerを使用
Active: active (waiting) since Tue 2026-03-17 19:30:32 JST; 1 month 11 days ago
Invocation: d5f52c3e03c64e80af0ea5861cff6bd2
Trigger: Wed 2026-04-29 00:33:31 JST; 9h left # 次の実行日時
Triggers: * logrotate.service
Docs: man:logrotate(8)
man:logrotate.conf(5)
Notice: journal has been rotated since unit was started, output may be incomplete.
設定ファイルの確認
/etc/logrotate.conf: 全体、デフォルト設定
/etc/logrotate.d/*: 個別、ログ毎の設定
全体設定はデフォルト値として適用され、個別設定があれば上書きされる
code: (sh)
$ ll /etc/ | grep 'rotate'
-rw-r--r--. 1 root root 493 Jul 6 2021 logrotate.conf
drwxr-xr-x. 2 root root 4096 Oct 21 2025 logrotate.d
全体設定
code: (sh)
$ cat /etc/logrotate.conf
# see "man logrotate" for details
# global options do not affect preceding include directives
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
dateext
# uncomment this if you want your log files compressed
#compress
# packages drop log rotation information into this directory
include /etc/logrotate.d
# system-specific logs may also be configured here.
個別設定
weeklyとsize が両方指定されている場合、どちらかの条件を満たした時点でローテーションされる
delaycompress: 最新は圧縮せずに次回ローテーション時に圧縮する(1つ分ズラして圧縮)
code: (sh)
$ ll /etc/logrotate.d/
...
-rw-r--r--. 1 root root 464 Jan 27 16:48 al03_05moB9_log
...
$ cat /etc/logrotate.d/al03_05moB9_log
/home/admin/al03_05moB9/shared/log/*.log {
create 644 admin admin
weekly
missingok
size 500M
rotate 16
compress
delaycompress
notifempty
dateext
copytruncate
...
}
ローテションの設定追加
個別設定は/etc/logrotate.d/ に設定ファイルを追加する
設定追加 → ドライラン → 強制実行で動作確認できる
強制実行は個別の設定ファイルを指定しないと全ローテーションが実行されることに注意
動作確認
code: (sh)
# ドライラン
$ logrotate -d /etc/logrotate.conf
=> 追加した設定ファイルの読み込みが表示
=> ローテーションの設定が表示
$ logrotate -d /etc/logrotate.d/{追加した設定ファイル名}
=> 単一の設定のみを確認(大体の場合この確認だけでok)
# 強制実行
$ logrotate -f /etc/logrotate.d/{追加した設定ファイル名}
# ローテーションログ確認
$ cat /var/lib/logrotate/logrotate.status
# 次回ローテーション日時確認
$ systemctl status logrotate.timer
#Linux
#Rails
#インフラ