Linux

logrotateのテスト方法

投稿日:

logrotateの設定ファイルを修正したり、あるいは新たに追加した場合にはログのローテーションをテストする必要があるでしょう。

ここではそのログローテーションのテストの方法を説明します。

Linuxシステムのログローテーション

まずはLinuxなどのシステムが、どのようにログのローテーションを行なっているか確認することから始めます。

システムでは「/etc/cron.daily/logrotate」でログのローテーションを行なっています。

#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
    /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit $EXITVALUE

このようにcronによって毎日次のコマンドが実行されていることがわかります。

/usr/sbin/logrotate /etc/logrotate.conf

システムのログのローテーションの基本的なことについては「logrotateの設定の仕組みを解説する」の記事を参照してみてください。

ログローテーションのテスト方法

システムのログローテーションの実行方法がわかったところで、これをどのようにテストするか、その方法を説明していきます。

logrotateコマンドをデバッグモードで実行する

logrotateコマンドにはデバッグモードがあります。デバッグモードで実行した場合は何も変更されないので安心して実行できます。

システムが実行しているのと同じことをデバッグモードで実行してみましょう。デバッグモードで実行するには「-d(--debug)」オプションを使います。

# logrotate -d /etc/logrotate.conf

デバッグモードではどのようにログローテートを行なっているか、その詳細なメッセージが表示されます。

エラーになっているものがないか、このメッセージから確認できます。

-vオプションで詳細を表示する

実際にログをローテートさせるときは、「-v(--verbose)」オプションを付けると、デバッグモードと同じように何が行われているか詳細を表示してくれます。

ただしローテーションが行われると、古いファイルは削除されてしまうので注意してください。

# logrotate -v /etc/logrotate.conf

-fオプションで強制的にログをローテートする

先ほどの「-v」だけを指定しただけでは、ローテートする必要がないログファイルはローテーションが行われません。

「-f(--force)」オプションを使うとローテーションが必要ない場合でも、強制的にローテーションをさせることができます。

# logrotate -fv /etc/logrotate.conf

ここでは何が行われているかわかるように-vオプションも指定しています。

しかし、強制的にローテーションを行なっても、例えば日付をサフィックスに持つ古いファイルがあると、同じようなファイルが作成できないなどのエラーが出力される場合があります。そのような点を意識してテストします。

logrotate.statusファイルを確認する

logrotateコマンドを実行した際のメッセージを見ればわかるとおり、コマンドを実行すると「/var/lib/logrotate/logrotate.status」ファイルからローテーションの状態を読み込みます。

ローテートを実行したあとは、このファイルでローテーションの状態が確認できます。

# cat /var/lib/logrotate/logrotate.status
logrotate state -- version 2
"/var/log/sssd/sssd_implicit_files.log" 2022-1-6-2:0:0
"/var/log/mytest.log" 2022-1-7-19:55:19
"/var/log/dnf.librepo.log" 2022-1-7-19:55:19
...

また、logrotateコマンドはこのファイルを参照して前回のローテート状態を確認してローテーションの必要性を判断しています。そのためこのファイルを編集して日付を偽る(過去に戻す)ことによってローテートさせることもできます。

個別の設定ファイルで確認する

ここまでシステムのログローテーションと同じように「logrotate.conf」を引数としてlogrotateコマンドを実行してきました。

しかし、/etc/logrotate.dディレクトリの一部のファイルを修正したり、このディレクトリにファイルを追加した場合などに毎回全ての設定(logrotate.conf)を読み込むのは非効率かもしれません。

このような場合、修正したファイルだけを指定して実行します。

# logrotate /etc/logrotate.d/syslog

ここではsyslogファイルだけを引数に渡して実行しています。

ただしこの方法は少し注意が必要です。

logrotate.confを読み込んでいないため、そこに設定されているディレクティブも読み込まれていません。そのため、logrotate.confを引数として実行した場合と動作が異なることがあります。

したがって最終的にはlogrotate.confを読み込んでテストした方が良いでしょう。

まとめ

きちんとログがローテートされないとログが肥大化して最終的にはシステムのディスクの領域を埋め尽くしてしまうかもしれません。

ログローテーションのテスト自体は楽しいものではありませんが、重要なものですのできちんとテストを実施しましょう。

またログのローテーション基本が知りたい場合には「logrotateの設定の仕組みを解説する」の記事を参照ください。

-Linux

Copyright© アナグマのモノローグ , 2022 All Rights Reserved Powered by STINGER.