logrotateの簡単設定(RHEL/CentOS)

Linuxサーバ

RHEL系(CentOS)
---

スポンサーリンク

利点

logrotate機能とは
自分で作成したバッチファイルのログ、syslogサーバとしてクライアントから
送信されてきたログを永久に保管すると容量が圧迫します。
そのログファイルを「毎時、日次、週次、月次」単位で分割したり
ファイルサイズ単位で分割したり
古いログを削除してローテーションしたり圧縮したり
して管理することができます。


まずは、すぐに設定する方法を解説します。

最初に準備しておくこと(2つ)

1.ログファイルの保管場所とローテーションしたいログファイルを決める
  例
  保管場所:/var/log/hosts/isleofhoso03
  ログファイル名:/var/log/hosts/isleofhoso03/isleofhoso03_message.log

2.logrotateの設定をどうするか?
  押さえておきたい設定を抜粋(よく利用するものだけを厳選、以下でほぼ網羅できます)
  ※赤色の設定がよく利用するものです。

設定説明
rotateローテーション回数を指定(何世代分のログを残すかを決める)
この数値で古いものがが削除されます


rotate 4
daily
だった場合は5日前のデータが削除されます
dailyログを毎日ローテーションする
※weekly(毎週)・monthly(毎月)・yearly(毎年)に変更も可能
※hourly(毎時)も可能 
 但し、logrotateのcronの設定変更が必要(関連記事でにて記載)
ifemptyログファイルが空でもローテーションできるようにする設定
createローテーション直後(postrotateの実行前)に新しいログファイルを作成する
ファイルの属性とファイル所有者のユーザ名とグループ名を設定できます。


create 0600 root root
 所有者に:「読み書き」権限を付与
 所有者:rootユーザ
 グループ:rootグループ
dateformatローテーションしたファイル名に日付のフォーマットを指定できます。

%Y(年),%m(月),%d(日),%H(時),%s (1970-01-01からの秒数)が使用できます。
※「logrotate-3.8.6-19.el7.x86_64」確認済


■daily設定の時
dateformat .%Y%m%d

■hourly設定の時
dateformat .%Y%m%d-%s <-こちらを利用
or
dateformat .%Y%m%d-%H <-あまり利用しない
missingokログファイルが存在しない場合、エラーとならずに処理を継続する
sharedscriptsログファイルをワイルドカードで指定した場合、スクリプトは一度だけ実行する


/var/log/hosts/message.log
/var/log/hosts/mail.log
と用途が違うログが複数存在している場合
--
/var/log/hosts/*.log {
sharedscripts
postrotate
~
endscript
~
--
を指定すると
postrotateの場合は、message.logとmail.logのローテーション後に1回だけスクリプトを実行する
(prerotateの場合は、ローテーション前に1回だけスクリプトを実行する)
ーーーーーーーーーーーーーーー
■nosharedscriptsの場合
(sharedscriptsの指定がなければnosharedscriptsがデフォルト設定になります)
->1つのサービスに複数のログがあるとスクリプトをそれぞれ実行する
例のようにmessage.logとmail.logがあると
message.logのローテーションでスクリプトを実行して
mail.logのローテーションでスクリプトを実行し、同じスクリプトを計2回実行します
※ローテーションするファイル数に合わせてスクリプトが実行されます
postrotate
endscript
postrotateとendscriptの間で記載されたコマンドをログローテーション後に実行
※コマンドは複数行記載することができます

~
rotate 7
sharedscripts
  postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null || true
  echo test >> /tmp/test.log
endscript
}
ーーーーーーーーーーーーーーー
prerotate~endscript間で記載されたコマンドはログローテーション前に実行
maxsize
minsize
size
単位としてk(キロバイト)、M(メガバイト)、G(ギガバイト)も利用可能
※kは小文字
■[maxsize]はsize指定以上もしくは、間隔指定(dailyなど)のどちらが該当で実行(or条件)
例えば
 size 10M と dailyを指定した場合
 10Mを超えた場合にローテーションされます。
 また、10M以下であってもdaily(1日)を経過していたらローテーションされます

■[minsize]はsize指定以上と間隔指定(dailyなど)のどちらとも該当で実行(and条件)
例えば
 size10Mとdailyを指定した場合
 10Mを超えおり、かつ、daily(1日)を経過していた場合のみローテーションされます
 
[size]はsize指定以上と間隔指定(dailyなど)があれば間隔指定は無効として実行(間隔指定無視)
例えば
 size 10M と dailyを指定した場合
 10Mを超えた場合にローテーションされます。
 daily(1日)は無効でlogrotateの実行時に10Mを超えた場合のみローテーションされます
 ※10M以下であれば、daily(1日)を経過してもローテーションされません
copytruncateログファイルをコピーして、コピー元(更新中)のログファイルを空にします。
※ログファイルがなくならないので、ログファイルをクローズせずにログを書き込み
 するようサービスで利用しているログファイルのローテーションに便利
--注意--
ファイルコピーとファイルを空にする一瞬の間にログが書き込まれるとログデータが
失われてしまう場合があります。
compressローテーションしたログを圧縮します

logrotateの設定

事前準備にてローテーションしたいログファイルとローテーション設定の
内容をある程度まとめたら「/etc/logrotate.d/」配下にファイル(任意)を
作成してローテーション設定を記述します。
※今回は「isleofhoso03」というファイルに設定を記載します。

#vi /etc/logrotate.d/isleofhoso03

以下のように設定する
※設定の意味については上記に記載

rotate 31          #31世代分のファイルを残す
daily            #毎日ローテーションする
ifempty           #ログファイル空でもローテーションする
create 0600 root root     #rootのユーザ、rootグループで0600なので「-rw-------」
dateformat .%Y%m%d-%s   #日付フォーマット設定(isleofhoso03_messages.log.20201010-1602320018)
missingok          #ログファイルがなくてもエラーとしない
sharedscripts        #スクリプトを一回でけ実行
postrotate         #ローテーション後にpostrotate~endscriptまでのスクリプトを実行
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript

ファイルを保存して設定が完了したら
以下のコマンドを実行して設定ファイルの正常性を確認します。

■正常性の確認
#logrotate -dv /etc/logrotate.conf

■ファイル作成での注意
ファイル(/etc/logrotate.d/isleofhoso03ファイル)の
パーミッションを間違えると設定ファイルを読み込まず
ログローテーションしないので注意してください。


#chmod 644 /etc/logrotate.d/isleofhoso03
としてパーミッションを設定しておく

ファイルのパーミッションは「0644」or[0444」にすること
パーミッションを間違えると以下のエラーが出力されログローテーションが
実行されません。

logrotate -dv /etc/logrotate.conf
で確認すると以下のエラーが表示されます。
error: Ignoring isleofhoso03 because of bad file mode - must be 0644 or 0444.


ファイル設定に間違いなければ、時間がくればローテーションされます。
※サービス再起動などはlogrotateでは必要ありません。

今すぐlogrotateを実行して確認(強制実行したい場合)

■ローテーション強制実行
# logrotate -f /etc/logrotate.conf

強制的にログローテーションが実行されます。
他のローテーションにも影響がある場合があるので注意が必要です

コメント

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