【logrotate徹底解説】/etc/logrotate.confと/etc/logrotate.dの優先順位と設定方法

Linux

サーバー運用において、ログファイルの肥大化はディスク容量を圧迫するだけでなく、システムのパフォーマンスにも影響を与える可能性があります。そこで重要な役割を果たすのが logrotate です。この記事では、「logrotateと/etc/logrotate.conf」を中心に、メイン設定ファイルと設定ディレクトリの関係性、そしてログローテーションを細かく制御するための各ディレクティブの設定値について、初心者にも分かりやすく解説します。

logrotateとは?ログ管理の重要性

logrotate は、システムやアプリケーションが出力するログファイルを自動的にローテーション(世代管理)、圧縮、削除などを行うためのツールです。適切なログ管理を行うことで、ディスク容量の節約、ログファイルの検索性の向上、そしてシステム全体の安定化に繋がります。

logrotate の主要な設定ファイル

logrotate の設定は、主に以下の2つの場所で行われます。

  1. /etc/logrotate.conf: logrotate の全体的な動作を定義するメインの設定ファイルです。グローバルな設定や、個別の設定ファイルを読み込むためのincludeディレクティブなどが記述されます。
  2. /etc/logrotate.d/: このディレクトリには、個々のアプリケーションやサービスごとのログローテーション設定ファイルが置かれます。通常、各パッケージのインストール時に自動的に作成されます。

/etc/logrotate.confのデフォルト値

[root@localhost ~]# cat /etc/logrotate.conf
# see "man logrotate" for details
# 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

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp and btmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
        minsize 1M
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0600 root utmp
    rotate 1
}

# system-specific logs may be also be configured here.
[root@localhost ~]#

設定ファイルの優先順位:/etc/logrotate.conf vs /etc/logrotate.d

「logrotateと/etc/logrotate.conf」を理解する上で重要なのが、設定ファイルの優先順位です。

原則として、/etc/logrotate.conf ファイルで指定されたグローバルな設定が基本となり、/etc/logrotate.d/ ディレクトリ配下の個別の設定ファイルに記述された設定が、その特定のログファイルに対して上書きされます。

つまり、/etc/logrotate.d/ 配下の設定ファイルは、より具体的なログローテーションのルールを定義するために使用され、特定のアプリケーションの要件に合わせて柔軟な設定が可能になっています。

/etc/logrotate.conf の主なディレクティブ

logrotate の動作を制御するために、設定ファイル内で様々なディレクティブ(指令)を使用します。ここでは、/etc/logrotate.conf および /etc/logrotate.d/ 配下のファイルでよく使用される主なディレクティブとその設定値について解説します。

ローテーション頻度

  • daily: 毎日ローテーションを実行します。
  • weekly: 毎週ローテーションを実行します。
  • monthly: 毎月ローテーションを実行します。
  • yearly: 毎年ローテーションを実行します。

ローテーション世代数とサイズ

  • rotate <count>: ローテーションするログファイルの世代数を指定します。例えば rotate 7 と設定すると、最新のログファイルを含めて7世代分のログが保存されます。
  • size <size>: 指定したサイズを超えた場合にローテーションを実行します。<size> には、k (キロバイト)、M (メガバイト)、G (ギガバイト) を付けることができます。例:size 100M

圧縮設定

  • compress: ローテーションしたログファイルをgzip形式で圧縮します。
  • nocompress: ローテーションしたログファイルを圧縮しません(デフォルト)。
  • compresscmd <command>: 圧縮に使用するコマンドを指定します。デフォルトは gzip です。
  • uncompresscmd <command>: 解凍に使用するコマンドを指定します。デフォルトは gunzip です。
  • compressext <extension>: 圧縮されたファイルの拡張子を指定します。デフォルトは .gz です。
  • delaycompress: 最新のログファイルは圧縮せず、次のローテーション時に圧縮します。

その他の重要なディレクティブ

  • missingok: ローテーション対象のログファイルが存在しない場合に、エラーメッセージを出力しません。
  • notifempty: ログファイルが空の場合にはローテーションを実行しません。
  • create <mode> <owner> <group>: ローテーション後に新しいログファイルを作成し、パーミッション、オーナー、グループを指定します。例:create 644 root root
  • nocreate: ローテーション後に新しいログファイルを作成しません。
  • postrotate / endscript: ローテーション後に実行するコマンドを記述します。例えば、ログローテーション後にWebサーバーを再起動するなどが考えられます。
  • prerotate / endscript: ローテーション前に実行するコマンドを記述します。例えば、ローテーション前にログファイルをコピーしておくなどが考えられます。
  • su <user> <group>: ローテーションに関連する操作を特定のユーザーとグループの権限で実行します。
  • include <file>: 指定したファイルまたはディレクトリ配下の設定ファイルを読み込みます。通常、/etc/logrotate.conf から /etc/logrotate.d/ 配下のファイルを読み込むために使用されます。
  • firstaction / endscript: 最初のローテーション前に一度だけ実行するコマンドを記述します。
  • lastaction / endscript: 最後のローテーション後に一度だけ実行するコマンドを記述します。

/etc/logrotate.d/ 配下の設定ファイル例

例えば、Apacheのログローテーション設定ファイル /etc/logrotate.d/httpd の内容は以下のようになっている場合があります。

/var/log/httpd/*log {
    daily
    rotate 7
    missingok
    notifempty
    delaycompress
    compress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}

この設定では、/var/log/httpd/ ディレクトリ内の全ての .log ファイルに対して、以下のルールが適用されます。

  • 毎日ローテーションを実行する (daily)。
  • 過去7日分のログファイルを保持する (rotate 7)。
  • ログファイルが存在しなくてもエラーを出力しない (missingok)。
  • ログファイルが空の場合はローテーションを実行しない (notifempty)。
  • 最新のログファイルは圧縮せず、次のローテーション時に圧縮する (delaycompress)。
  • ローテーションしたログファイルをgzip形式で圧縮する (compress)。
  • ローテーション後、Apacheをリロードして新しいログファイルを使用させる (postrotateendscript)。

まとめ

「logrotateと/etc/logrotate.conf」、そして /etc/logrotate.d/ 配下の設定ファイルについて、優先順位と主要なディレクティブの設定値を解説しました。logrotate を適切に設定することで、システムの安定性とディスク容量の効率的な利用に繋がります。各ディレクティブの意味を理解し、ご自身の環境に合わせて最適なログローテーション設定を行いましょう。

最後に: 最後まで読んでいただきありがとうございました。この記事が、logrotate の設定に関する理解を深める一助となれば幸いです。

コメント

タイトルとURLをコピーしました