logrtにてcopytruncate設定の場合2重に読み込みが行われてしまう件の回避策について
お世話になります。
【環境】
Server:CentOS6.5 Zabbix2.2.11
Agent :CentOS6.5 Zabbix2.2.11
【アイテム】
logrt[/var/log/mysql/mysqld.log]
【事象】
Zabbixにてlogrtを用いてログ監視を行っているのですがLinuxOSのlogroteteをcopytruncate設定にてローテーション
した場合必ず2重検知をしてしまう事象が起きています。(新しく出来たログファイルを先頭から読んでしまう)
ソースを見るとLinuxの場合inodeを比較しているのでcopytruncateを使用した場合は2重読み込みが発生してしまう
ように見えますが回避する方法はありますでしょうか?
またプロジェクトの都合上プロセスの再起動ができないためcopytruncate設定を使う必要があります。
TNK - 投稿数: 4755
再検証していませんが、copytruncateの場合、ローテーションの処
理は、既存のログをコピーして、既存のログのサイズを0にすると
いう処理になっていたと思います。
そのようなローテーションが行われるファイルに対してlogrt[]を
使用する場合、コピーしたばかりの過去ログのファイルは、inode
も違いますしファイル名も違うので、新規に出力されたログファイ
ルの1つとして判断されてしまうと思います。
そうすると、コピーしたばかりの過去ログファイルを最初から読み
直してしまうので、そのファイルに障害として検知されるようなロ
グが含まれていたら、再度、そのログを通知してしまうのではない
でしょうか。
copytruncateを利用するのであれば、logrt[]ではなくlog[]を利用
するようにして、さらにアイテムの更新間隔を短めに設定して、な
るべく取りこぼしが無いよう対応されてはいかがでしょうか?
wata - 投稿数: 7
やはりご指摘の通りlog[]を利用するか、logrt[/var/log/mysql/mysqld.log$]とファイル名ピンポイントで指し
間隔短めに設定しかないようですのでそれら踏まえて検討してみます。
ありがとうございました。
wata - 投稿数: 7
追加で確認させてください。
2重にアイテムに取得されるのは許容した場合、トリガーなどで重複してる分については
除外などできるのでしょうか?
たとえば監視時間と取得時間に開きがあり且つ内容が同じものをstr関数などを使って取得した値とヒストリを比べて
はじくかなど。
wata - 投稿数: 7
2重投稿になってしまったため削除