BFT名古屋 TECH BLOG

日々の業務で得た知識を所属するエンジニアたちがアウトプットしていきます。

【Linux】ログローテーションとはなんぞや?初心者向けにまとめてみた

はじめに


こんにちは!BFT名古屋支店・新卒のゴンザレスです。 今回はログローテーションについて紹介します。

ログローテションってなんぞや?というIT初心者の方はぜひ読んでみてください。

ログローテーションとは


ずばり!ログローテーションとはログが出力されるログファイルをローテーションし、必要に応じて圧縮や削除を行うことです。

Linuxではログローテーションを行ってくれる機能をlogrotateと言います。

ではローテーションの対象となるログ(ログファイル)とは一体何でしょう。

ログとは


そもそもログとは何ぞやを説明しておきます。

ログとは、システムに関して起こった出来事の内容を時系列に記録したものです。

例えばエラーや障害の発生、利用者による操作や設定の変更、外部との通信などが記録されます。

ではなぜログを出力するのでしょう。

ログを出力する理由


ログを出力する理由として以下があげられます。

・問題が発生した際に調査を行うため

・不具合が起きていないかなど監視を行うため

・ログを解析してユーザーの行動を把握するため

・監査ログとして利用するため

システムの動きを記録して不具合が起きていないか監視したり、エラーに素早く対処できるようにしようってとこですかね。

ログローテーションを実施する目的


ずばり!ログローテーションを実施する目的は、古いログを削除したり新しいログに更新することです。

ログはシステムの稼働に伴いどんどん増えていき、放置しておくとディスク容量やメモリの容量を圧迫することになります。

そのため、ログローテーションによるログの削除や更新が必要になるのです。

では、実際にログローテーションを行うにはどのような設定が必要なのでしょう。

ローテーションの設定項目


ローテーションを行うために必要な設定項目を説明していきます。

①ローテーション方式

ローテーションの方式をlogrotateで利用可能なcopytruncate方式または、create方式を指定します。

copytruncate方式 … ログファイルをコピーして、コピー元(更新中)のログファイルを空にする

create方式 … ローテーション直後に新しいログファイルを作成する

以上2点の主な違いは、iノード番号と呼ばれる内部IDを維持するかどうかです!

図にするとこんな感じ。

②管理数

どれくらいのログを残し、どこからのログを削除するのかを決めます。

残したり消したりするログの量を「~世代」と表します。

③ローテーション頻度

ローテーションの実行頻度を指定します。

日時、週次、月次などログの容量に合わせて設定します。

④ローテーション後のファイル命名規則や圧縮の可否

ローテーション後のファイル名の末尾にyyyymmddなどの日付をつけるという設定ができます。

またファイルを圧縮するかどうかの設定をします。

⑤その他前後処理や容量上限の設定

ログファイルの容量の上限を設定したり、ログローテーション前後の処理を定義します。

では実際これらの設定はどこで行うのでしょうか。

logrotateの設定を行うファイル


今回はLinuxのlogrotationを例に説明していきます。

まずは設定をする場所について説明します。

logrotateの設定を行うファイルは以下2つです。

/etc/logrotate.conf  → ログローテーション全体の設定ファイルであり、デフォルトの設定が書かれています。

/etc/logrotate.d/*  → 各サービスごとの設定ファイルで、/etc/logrotate.d配下に配置したファイルごとに設定をすることができます。

では実際にどのように設定を書くのでしょうか。

設定の書き方


次に設定ファイルへの設定をどのように書くかを説明します。

設定内容を定義するものをオプションもしくはDirectiveと言います。

実際に設定されたファイルの中身を見てみましょう。

まずは、一番上に設定するファイル名を記入します。

今回の場合だと/book/log/test.logという名前のファイルに対しての設定となります。

ログファイルに対しての設定については{}で括ります。

Directiveについて


次に、上記の例で設定しているDirectiveについて説明します。

daily

dailyと指定することで毎日ローテートを行います。

weeklyであれば毎週、monthlyなら毎月、yearlyなら毎年と設定することができます。

rotate 7

rotate 7は、今日を含め7日分ファイルを保存するということです。

「8日以前のログは削除する」ということになります。

copytruncate

ログファイルをコピーして、コピー元のログファイルを空にします。

dateext

ローテーションしたログファイル名に日付8桁(-YYYYMMDD)を加えます。

dateyesterday

dateextで付加される日付に、今日ではなく昨日の日付を指定します。

ifempty

ログファイルが空でもローテーションをすると指定します。

compress

ローテションしたログを圧縮します。

logrotateの実行について


最後にlogrotateを実行する設定方法について説明します。

logrotateをいつどのタイミングで実行するかはcronを使用して設定します。

さいごに

以上ログローテーションの概要についてざっくり説明しました。

詳しい設定方法も後々紹介しようと思います。

ここまで読んでいただきありがとうございました!