概要
linuxでのログローテーション処理を実行するloglotate
について、調査ついでにメモも兼ねてまとめてみます。
loglotateとは
- loglotateは、デバイス上で継続取得されるログファイルのサイズを抑えるためのライフサイクルを実装するための仕組み
- 一定期間ごとにログファイルのファイル名を変更したり、gzip圧縮をすることで、最新のログファイルのサイズを減らして管理することができる
- 古いログファイルは自動削除することも可能
loglotateの設定
- ローテートの設定は、
/etc/logrotate.conf
および/etc/logrotate.d
ディレクトリ内のファイルで定義されている - ファイル内に記されたコマンドに従ってログローテート処理が行われる
/etc/logrotate.conf
- グローバル設定を保存したファイル
/etc/loglrotate.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 |
- | ローテートを1週間ごとに実行する |
rotate |
世代数 | 4世代までのログをローテートし、それ以上古いものは削除する |
create |
- | ローテート後に新しいログファイルを作成する |
dateext |
- | ローテートしたログファイルの名前にSuffix(YYYYMMDD)を入れる |
include |
ディレクトリパス |
/etc/logrotate.d ディレクトリ内のファイルを読み込む |
/etc/loglotate.d
- 個別のログローテート設定が保存されたディレクトリ
[root@ip-10-0-0-18 ~]# ls /etc/logrotate.d
btmp chrony dnf nginx psacct sssd wtmp
/etc/logrotate.d/nginx
/var/log/nginx/*.log {
create 0640 nginx root
daily
rotate 10
missingok
notifempty
compress
delaycompress
sharedscripts
postrotate
/bin/kill -USR1 `cat /run/nginx.pid 2>/dev/null` 2>/dev/null || true
endscript
}
記載コマンド説明
コマンド | オプション | 説明 |
---|---|---|
create |
パーミッション ユーザー名 グループ名 | ローテート後に空のログファイルを新規作成 |
daily |
-1日間隔でローテートを実行する | |
missingok |
- | ログファイルが見つからなかった場合でもエラー扱いにしない |
notifempty |
- | ログファイルが空の場合にローテートを行わない |
compress |
- | ローテーションしたログをgzipで圧縮する |
delaycompress |
- | 1世代目のログは圧縮しない |
sharedscripts |
- | 複数のログファイルに対するスクリプト処理をまとめて行う |
postrotate endscript
|
- |
postrotate endscript で挟まれたスクリプトをローテート後に実行する |
loglotateの実行確認
- loglotateの動作をシェル上で確認してみる
- ローテート対象のログは
Nginx
のアクセスログ・エラーログを用いる
ローテート前のログフォルダの確認
# /var/log/nginx内のログファイルを確認
[root@ip-10-0-0-18 ~]# ls /var/log/nginx
access.log error.log
アクセスログの中身
# ローテート対象となるアクセスログの状態を確認
[root@ip-10-0-0-18 ~]# cat /var/log/nginx/access.log
xxx.xx.xx.xx - - [15/Aug/2025:05:52:27 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" "-"
ログローテートの手動実行
[root@ip-10-0-0-18 ~]# ls /var/log/nginx
access.log access.log-20250815 error.log
[root@ip-10-0-0-18 ~]# cat /var/log/nginx/access.log
[root@ip-10-0-0-18 ~]# cat /var/log/nginx/access.log-20250815
xxx.xx.xx.xx - - [15/Aug/2025:05:52:27 +0000] "GET / HTTP/1.1" 304 0 "-" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36" "-"
- ログローテート処理によって
access.log-20250815
が生成 - 新しく空の
access.log
が生成された
参考