logrotate★ログはローテーションさせよう

2021年3月9日

ほったらかしておくとドンドンたまっていくログファイル。整理の為にローテーションさせましょう。

logrotateの設定

前提条件

logrotateはcronで設定されている必要があります。恐らくデフォルトで設定されていると思いますが不安な方は次の場所にlogrotateのファイルがあるか確認しましょう。

  • /etc/cron.daily/logrotate ←このファイル

logrotate関連ファイルの場所

logrotateに関係するファイルやディレクトリは次の通りです。

  • /etc/logrotate.conf
    (logrotateの設定ファイル)
  • /etc/logrotate.d/
    (サービス毎の設定ファイルディレクトリ)
  • /var/lib/logrotate/logrotate.status
    (ローテーションした履歴ファイル)

logrotateの設定ファイルの作成

ここではローテーションさせるログの設定ファイルを作成します。

設定ファイルの作成

新たにログをローテーションさせる為には最初に設定ファイルを作成します。次の場所にファイルを作成しましょう。

  • /etc/logrotate.d/ファイル名

ファイル名はapacheの場合はhttpd、MySQLの場合はmysqlとなっています。任意ですが分かりやす名前にしましょう。

ファイルの中身は下記の参考例を元に作成します。次に各項目の詳細を説明します。

よく使いそうな設定項目

設定ファイルにはたくさんの項目がありますが必要な物は限られています。下記の項目が一般的によく使われている内容です。

動作 設定 詳細
ログ取得期間 daily 毎日取得
weekly [数字] 週一回取得。0は日曜~6は土曜。数字省略時は0(日曜)が指定される。
ログ取得回数 rotate 数字 ローテーションされる回数。削除または指定されたメールアドレスを送られるまで行われる。0は削除されない。
ログファイル存在確認 missingok

ログファイルが無い場合エラーを出さずに次のファイルへ移行。

nomissingok ログファイルが無い場合エラーを出す。(デフォルト)
旧バージョンのログファイルの圧縮 compress 旧バージョンのログファイルの圧縮を行う。
nocompress 旧バージョンのログファイルの圧縮を行わない。
スクリプト(コマンド)の実行 postrotate
endscript
記述したスクリプトの実行。postrotateとendscriptの間に記述。
ローテーションするorしない notifempty ログファイルが空の場合はローテーションしない。
ifempty ログファイルが空でもローテーション実行。(デフォルト)
大きさを超えたらローテーション maxsize サイズ 指定サイズを超えたらローテーションする。取得期間に関わらない。
新しいログファイルの作成 create [モード] [所有者] [グループ] ローテーション直後に新しいログファイルを作成。属性が未指定の場合はもとの属性を継承。

他のオプションはこちらの方が解説してくれてます。

(参考)サービス毎の設定ファイル

各サービスの設定例を紹介します。この辺を参考にして設定ファイルを作成すれば上手くいくと思います。

apache(httpd)

# /etc/logrotate.d/httpd
/var/log/httpd/*log {
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

yum

# /etc/logrotate.d/yum
/var/log/yum.log {
    missingok
    notifempty
    maxsize 30k
    yearly
    create 0600 root root
}

ModSecurity

# /etc/logrotate.d/mod_security
/var/log/httpd/modsec_audit.log {
    daily
    rotate 7
    missingok
    compress
    postrotate
        /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
    endscript
}

logrotateの反映

完成した設定ファイルを反映させる方法を説明します。

logrotateコマンド

ローテーションさせる設定ファイルが完成したら、デバッグ・反映を行います。それにはlogrotateコマンドを使います。

コマンド解説

logrotate [オプション] ファイル名

ローテーションさせる設定フィルのデバッグ・反映を行う。

オプション内容
-d、--debugデバッグモードで動作(-vも含む)。ログやstatusファイルは更新されません。
-f強制的にローテーションを行う。
-v、--verbose動作の詳細を表示。

設定ファイルのデバッグ

設定ファイルが完成したら次のコマンドでデバッグを行いましょう。

logrotate -d /etc/logrotate.d/httpd

設定ファイルを反映

デバッグで問題なければ次のコマンドで設定の反映を行いましょう。-vは無くても大丈夫ですが念のため結果を表示させます。

logrotate -v /etc/logrotate.conf

ローテーションの確認

設定が反映されたらローテーションが正しく行われいるか確認しましょう。ログの内容とlogrotateのステータスファイルの中身を見て確認します。

  • /var/lib/logrotate/logrotate.status

これで全ての作業は終了です。

CentOS

Posted by Bright_Noah