logrtの挙動について
いつもお世話になっております。
logrtキーの挙動について教えてください。
【構成】
OS:CentOS6
ZabbixServer:1.8.15
ZabbixAgent:1.8.15
例えば「/var/log/test.log」というログがあり、毎日OSのログロテート機能でAM4時にロテートされているログがあります。
ロテートされると「/var/log/test.log-yyyymmdd」というファイルになります。
アイテムのキーは
logrt["/var/log/test.log(|-[0-9]{8})",,UTF-8]
という感じです。
そのロテート直前に書込みがあった後、ロテートされると、
「test.log-yyyymmdd」のタイムスタンプは4:00:00となり、
createされた現行の「test.log」のタイムスタンプも4:00:00となります。
要は
# ls -l /var/log/test.log*
-rw------- 1 root root xxxxx 2014-xx-xx 04:00:00 /var/log/test.log
-rw------- 1 root root xxxxx 2014-xx-xx 04:00:00 /var/log/test.log-2014mmdd
となるわけです。。。
監視間隔は5分なのですが、その「test.log」に5分間何も出力されていない場合、
logrtキーは「test.log-yyyymmdd」の最初の行から読み始める挙動をします。
これを回避するために、ロテートのファイルに
postrotate
/bin/kill -HUP `cat /var/run/rsyslogd.pid 2> /dev/null` 2> /dev/null || true
sleep 1
logger -p mark.info log rotated, begin logging new file
endscript
という感じでsleep1してからログを書き込む処理を入れております。
※これでもその1秒のsleepを入れている間に監視タイミングが来ると再読み込みしてしまうのですが。。。
要は
# ls -l /var/log/test.log*
-rw------- 1 root root xxxxx 2014-xx-xx 04:00:01 /var/log/test.log
-rw------- 1 root root xxxxx 2014-xx-xx 04:00:00 /var/log/test.log-2014mmdd
となります。
このほかに何か有効な回避方法は無いでしょうか。
KAZ - 投稿数: 1085
hajimeさん
ログの再読み込み関連ですが、色々な再読み込みに関する問題があってZabbix2.0.13、Zabbix2.2.4で対応となっています。
※:Zabbix2.0.13はまだリリースされてません。
fripper - 投稿数: 495
logrotate の設定ファイル内に、olddir 設定を入れて、旧ログファイルを別ディレクトリへ
移動させてしまうのは如何でしょうか?
この方法では、ローテート直前に吐かれたログの一部が監視対象から漏れてしまう
可能性はありますが、ローテート後に生成された -yyyymmdd ファイルを
再読込してしまう現象だけは回避できるのではないかと思います
hajime - 投稿数: 57
KAZ様、fripper様
返信ありがとうございます!
KAZ様>
バージョン1.8では対応なさそうですね。。。
その改修があれば、log4jを使用してるJavaAPのログなども
正常に監視できそうですね。
fripper様>
その案とlogキーを監視間隔を1秒にして・・・など考えたのですが、なんせシビアなお客様なもので。。。
今回別の問題で、DBへの書込みの際にcommitする順番の問題だったり、
Data_senderのタイミングの問題だったりで、データ欠けが発生したのですが、
たまたまデータ欠けしたログがクリティカルなアラートでかなり怒られてしまいました。。。
バージョンアップするしかなさそうですね。