Linuxのログローテーションの仕組み | 若手エンジニアのブログ

若手エンジニアのブログ

文系出身の若手女子エンジニアによる技術ブログ。
日々の経験や学びをアウトプットするためにブログを書いています。
バックエンド(Java+SpringFramework)を経てインフラエンジニアになりました。
今は育休中につき、本で勉強したことを中心にアウトプットしています。

前々回、前回に引き続き、ログに関する記事を書いていきます。

今回はログローテーションについて。

 

前々回の記事はこちら。

 

前回の記事はこちら。

 

 

もくじ

1.ログローテーションとは概要イメージ

2.Linuxでのログローテーション

3.設定ファイル配置場所と設定ファイルの考え方グローバル設定設定可能な内容

 

1.ログローテーションとは

◎概要

ログをファイルに出力して保管することはよくあることだと思う。

ただ、何もせず放っておくと、ログはどんどん増え続けるため、

過去のログが大量に蓄積されていき、そのうちディスク容量を圧迫してしまう。

 

そのため一定のタイミングで過去のログを削除し、不要なログの蓄積を防ぐ仕組みがある。この仕組みをログローテーションという。


Linuxではlogrotateコマンドとcron(ジョブ管理)の仕組みを利用したログローテーションが可能となっている。

 

◎イメージ

例えば、ログ保管期間を3日とし、日次でログファイルをアーカイブしてローテーションする場合。

 

 

12月1日分のログファイルは、1日経つとアーカイブされ、12月2日分のログは12月2日分のファイルに出力されるようになる。

さらに翌日になると、12月2日のログファイルもアーカイブされ、12月3日分のログは12月3日分のファイルに出力される。

そしてもう1日経つと、ログの保管期間を超えるため、12月1日のログファイルは削除される。

 

時間の経過とともに、過去のログファイルを削除することで、ディスク容量の圧迫を回避することができる。

 

なお、例は日次のローテーションとしたが、毎時、週次、月次といった単位でのローテーションも可能である。

日付ではなく、ログファイルが一定のサイズを超えたらローテーションするということもできる。

 

 

2.Linuxでのログローテーション

Linuxにはlogrotateコマンドが用意されており、ローテーションを行うことができる。

ただ、コマンドを直接実行してローテーションを行うことは、実際にはほぼない。

というのも、ローテーションは一度きりではなく、定期的に行ってこそ意味があるものであり、1度きりのコマンド実行で利用するような運用は普通ないはずだからである。

 

また、定期的に実行されることが分かっているからか、

logrotateコマンドと、Linuxの定期ジョブ実行機能であるcronを組み合わせて、ログローテーションを行うしくみが、最初から用意されている。

そのためLinuxでは、次に記載するログローテーションの設定ファイルに、設定を記述しておけば、

設定内容をパラメータとして、logrotateコマンドがcronにより定期的に実行されるようになっている。

 

3.設定ファイル

◎配置場所と設定ファイルの考え方

ログローテーションの設定は、以下に記述する。(これらファイルをパラメータファイルとして、ログローテーションが自動的に行われるようになっている)

 ・ /etc/logrotate.conf

 ・ /etc/logrotate.d/*.conf

 

/etc/logrotate.confには、全てのログファイルに適用されるグローバル設定を記述する。

/etc/logrotate.d/*.confには、ログファイル個別でカスタマイズ設定したい時に、ファイルを作成・記述する。

/etc/logrotate.d配下のファイルに個別設定された内容は、/etc/logrotate.confに記述されたグローバル設定よりも優先される。

 

と言っても分かりにくいので、例で説明したい。

例えば、以下の図のような設定をしていたとする。

これら設定ファイルを配置している前提で、

 ・/var/log/message

 ・/var/log/secure

 ・/var/log/cron

という3つのログファイルについて考える。

 

/var/log/messageは、個別の設定ファイルがあるため、グローバル設定よりも優先される。

そのため、「ローテーションは日次」、「4回ローテートする」ことになる。

 

また/var/log/secureは、個別の設定ファイルがあるため、ローテートは10回、削除時のメール送信が行われるが、ローテーションタイミングについては個別設定が無い。

そのためグローバル設定を適用し、週次でのローテーションが行われる。

 

一方、/var/log/cronは、個別の設定ファイルが無いため、グローバル設定がそのまま適用される。

 

◎グローバル設定(デフォルト値)

グローバル設定の記述先である、/etc/logrotate.conf のデフォルト状態は以下の通り。

# see "man logrotate" for details
# rotate log files weekly
weekly 
# 週次でローテートする

# keep 4 weeks worth of backlogs
rotate 4
 # 4回ローテートする(5回目で削除)

# 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 
# /etc/logrotate.d配下のファイルも設定ファイルとする(重要)

# system-specific logs may be also be configured here.

 

設定ファイルの中に"include /etc/logrotate.d" という記述があるが、

この記述によって、個別の設定ファイルを読み込めるようになっている。

従ってグローバル設定のデフォルト値を変更する場合も、この記述は削除しないようにすべきである。

(個別設定を全く行わないことが確定している場合を除く)

 

◎設定可能な内容

ログローテーションの設定ファイルで、設定できる内容は多数ある。

1.ログローテーションとは にも記載した通り、ローテーションのタイミングは日次やファイルサイズなどから指定することができる。

その他にも、例えば以下のようなことが設定できるようになっている。

 ・アーカイブではなくコピーを作成する

 ・ローテーションファイルを圧縮する

 ・ローテーションファイルのパーミッションを設定する

 ・ローテーション回数を指定する…etc

 

指定できるすべてのパラメータについては、以下のサイト様で、

日本語にてとても詳しく記載されていたので、ご参照のこと。

 

 

 

ということで、今回は以上!

次回は来年になりますが、この記事でも少し出てきた、cronについて書きたいと思います◎