【logrt[]】ログローテーション後に過去ログを読み込んでしまう事象の対処

以下の環境および条件下にて、対象ファイルのローテーション後に、
前日分のログを先頭から全て読み込んでしまい、重複して通知が発生しております。

■環境    : zabbix server 2.4.6 / zabbix agent 2.4.6
■アイテム : logrt[/var/log/messages,@Linuxfilter]
■間隔    : 60秒
■トリガー  : {hostname:logrt[/var/log/messages,@Linuxfilter].iregexp(.*,65)}=1

■対象ファイル(/var/log配下):
 messages
 messages.yyyymmdd
 ・・・
 過去7日間分保持しています

■ローテーション方法:
 messagesを前日日付でコピーし、messagesをクリア(dev/null)
 ※独自のシェルにて、日替わりの0時5分に起動しています

バグや他の方の投稿などを確認しているのですが、
同様の事象であるかの判断がつかないため、投稿させて頂きました。
本事象の原因および対策についてご教示頂ければと思います。

コメント表示オプション

お好みのコメント表示方法を選び「設定の保存」をクリックすると変更が反映されます。
ユーザー TNK の写真

下記のURLで書かれているlogrotateのcopytruncateと同じ状態に
なってしまっていると思います。

1つの案として、以下のURLでも書かせて頂いていますが、logrt[]
ではなくlog[]を利用するようにして、さらにアイテムの更新間隔
を短めに設定して、なるべく取りこぼしが無いよう対応されてはい
かがでしょうか?

ご参考:
http://www.zabbix.jp/node/3669
http://www.zabbix.jp/node/3995

ユーザー fjnaga の写真

TNK様

ご回答ありがとうございます。

logrt[]はローテーションするログに対する監視に利用するものだと思いますが、
copytruncateと同様のローテーションでは事象が発生してしまう場合、
logrt[]が正常に動作するローテーションはどのようなものにするべきなのでしょうか。
この事象自体がバグ等によって引き起こされている場合は、Fixされたagentのバージョンはありますでしょうか。

ユーザー TNK の写真

logrt[]はローテーションするログに対する監視に利用するものだと思いますが、
copytruncateと同様のローテーションでは事象が発生してしまう場合、
logrt[]が正常に動作するローテーションはどのようなものにするべきなのでしょうか。

logrotateのデフォルトでは、

 1. ログファイル名を変更する
 2. デーモンにシグナルを送って新しいログファイルに出力させる

というような処理が行われていたと思います。

/var/log/messagesということであれば、rsyslogdやsyslogdを使用
されていと思いますので、ファイル名を変更後にそのデーモンにHUP
シグナルを送れば良いと思います。

例えば、CentOS 7.4のrsyslogdの場合、logrotateの設定は以下の
ファイルに記載されています。
/etc/logrotate.d/syslog

この事象自体がバグ等によって引き起こされている場合は、Fixされたagentのバージョンはありますでしょうか。

バグではないと思います。
ローテーションの方式を見直すか、先ほど書いたような対策をご検
討ください。

広瀬です

少々補足です
copytruncateは処理の関係上、対象ファイルの最終inode情報が更新されません。
対して、logrt[]アイテムキーはファイル変化状態を追い続ける場合にinode情報を見ています。

copytruncateはローテーションされたファイル(つまり1世代前のファイル)の最終inode情報が
Zabbix側で記憶されている最終inode情報が同じですから、再度舐めてしまいます。

copytruncateの処理はつまりは、以下の処理と同じです

 cat hogehoge.log > takotako.log && echo -n > hogehoge.log

ローテーションされた瞬間にOSバッファーに残っている情報が1世代前のファイルに
書き込まれてしまう場合は多々あります(上記の場合だと、&&以降の処理に移る瞬間など)

バグではなく仕様です。LinuxでもWindowsでもOS問わずその辺のハンドリングは同じ
事が言えます。ログ出力方式を変えるか、ログ監視方式を変える以外に現時点で有効な
打開策は無いと思います。これはZABBIX以外の監視でも同じ事が言えます