Zabbix-1.8.9 でログ監視をしようと検証しています。 Zabbixサーバーが OS ごと再起動した場合、ログを先頭から読み込み、 古いログにトリガーがひっかかってしまうような挙動に見えるのですが、 回避する方法はございませんでしょうか。
Zabbixのログ監視では、ZabbixサーバをOSから再起動したとしても、 監視対象のログファイル毎に、ログファイルのタイムスタンプや、 読み込んだファイルの位置までDBMS上に保存しているので、通常で あれば、以前読み込んだ次の文字から読み込むようになっています。
例外としては、以前読み込んだ位置よりもファイルサイズが小さい 場合は、新規に新しくログファイルが作成されたと判断して、ファ イルの最初から読み込みなおします。
あとは、logrt[]を利用されている場合は、同じディレクトリ内で、 指定したファイル名のパターンに該当するすべてのファイルのタイ ムスタンプをチェックして、以前チェックしたときよりも新しいも のに関しては、新しいファイルだと判定されて頭から読み込むよう になっていたと思います。
例えば、OS再起動時にアプリケーションなどで独自のファイルのロ ーテーションを行って、ファイルのタイムスタンプが変わってしま うようなものであったりすると問題が発生するかもしれません。
ログ監視のアイテムの設定はどのようにされてますでしょうか?
もし、logrt[]を利用されている場合は、対象のログファイルのフ ァイル名がどのような命名規則で生成されるようになっているのか 教えて頂けませんでしょうか? あと先に書かせて頂いたようなファイルのタイムスタンプが変更さ れるような状況が発生するようなログファイルであるかもご確認頂 けませんでしょうか?
回答ありがとうございます。
ZabbixサーバーとZabbixエージェントが同一ホストなのですが、 ログを先頭から読み込む現象が発生するのはZabbixエージェントの再起動でした。
**アイテム キー: log[/tmp/testlog,"Failed","UTF-8",]
**トリガー 条件式: (({HOST:log[/tmp/testlog,"Failed","UTF-8",].regexp(Failed)})#0) イベント生成: ノーマル
トリガーで障害検知し、zabbix_sender を実行して正常に戻すことを考えています。 zabbix-agent を2度再起動すると、ヒストリは以下のようになります。
タイムスタンプ ローカル時間 値 [2012.1月.13 16:46:01] - 2012/01/13 16:38:55 Failed [2012.1月.13 16:46:01] - 2012/01/13 16:30:40 Failed [2012.1月.13 16:45:21] - 2012/01/13 16:45:21 RECOVERED [2012.1月.13 16:43:48] - 2012/01/13 16:38:55 Failed [2012.1月.13 16:43:48] - 2012/01/13 16:30:40 Failed [2012.1月.13 16:42:44] - 2012/01/13 16:42:44 RECOVERED [2012.1月.13 16:40:53] - 2012/01/13 16:38:55 Failed [2012.1月.13 16:40:53] - 2012/01/13 16:30:40 Failed
"RECOVERED" は zabbix_sender で送ったものです。 値の日時文字列を見てもらうとわかると思いますが、Failed の2行が zabbix-agent 再起動のたびに読み込まれています。
デバッグログで確認してみましたが、zabbix_senderを利用して登 録されているキーに値を送った後で、zabbix_agentdを再起動する と、zabbix_agentdがzabbix_serverからアクティブチェックのリス トを受け取る部分でlastlogsizeというどこまでログファイルを読 んだかを示す値が0になってしまっているように見受けられます。
このため、ログファイルが頭から再度読み込まれてしまっているよ うです。
考えられる原因としては、zabbix_senderを利用してZabbixサーバ に送り込んだ際にlastlogsizeを指定して渡せていないので、該当 するログ監視のアイテムのキーに対するlastlogsizeが0に初期化さ れてしまっていることが考えられます。
zabbix_senderでZabbixサーバにエラーリセット用の値を送った後 でもlastlogsizeがクリアされないようにできないかもうちょっと 調べてみます。
とりあえず現時点では、zabbix_agentdの再起動だけであれば、再 起動を行っても再度ファイルの頭から読み込まれることはないよう ですので、zabbix_agentdもしくはサーバ機自体の再起動が必要で あるならば、再起動を行って正常確認が終わった後でzabbix_sender を利用するようにしてみてはいかがでしょうか?
zabbix_sender を使わずに、障害→正常を示す文字列を決めて、ログに追記するなどで対応しようと思います。
アカウント名 yanta1
Zabbix関連
TNK - 投稿数: 4769
Zabbixのログ監視では、ZabbixサーバをOSから再起動したとしても、
監視対象のログファイル毎に、ログファイルのタイムスタンプや、
読み込んだファイルの位置までDBMS上に保存しているので、通常で
あれば、以前読み込んだ次の文字から読み込むようになっています。
例外としては、以前読み込んだ位置よりもファイルサイズが小さい
場合は、新規に新しくログファイルが作成されたと判断して、ファ
イルの最初から読み込みなおします。
あとは、logrt[]を利用されている場合は、同じディレクトリ内で、
指定したファイル名のパターンに該当するすべてのファイルのタイ
ムスタンプをチェックして、以前チェックしたときよりも新しいも
のに関しては、新しいファイルだと判定されて頭から読み込むよう
になっていたと思います。
例えば、OS再起動時にアプリケーションなどで独自のファイルのロ
ーテーションを行って、ファイルのタイムスタンプが変わってしま
うようなものであったりすると問題が発生するかもしれません。
ログ監視のアイテムの設定はどのようにされてますでしょうか?
もし、logrt[]を利用されている場合は、対象のログファイルのフ
ァイル名がどのような命名規則で生成されるようになっているのか
教えて頂けませんでしょうか?
あと先に書かせて頂いたようなファイルのタイムスタンプが変更さ
れるような状況が発生するようなログファイルであるかもご確認頂
けませんでしょうか?
yanta1 - 投稿数: 15
回答ありがとうございます。
ZabbixサーバーとZabbixエージェントが同一ホストなのですが、
ログを先頭から読み込む現象が発生するのはZabbixエージェントの再起動でした。
**アイテム
キー: log[/tmp/testlog,"Failed","UTF-8",]
**トリガー
条件式: (({HOST:log[/tmp/testlog,"Failed","UTF-8",].regexp(Failed)})#0)
イベント生成: ノーマル
トリガーで障害検知し、zabbix_sender を実行して正常に戻すことを考えています。
zabbix-agent を2度再起動すると、ヒストリは以下のようになります。
タイムスタンプ ローカル時間 値
[2012.1月.13 16:46:01] - 2012/01/13 16:38:55 Failed
[2012.1月.13 16:46:01] - 2012/01/13 16:30:40 Failed
[2012.1月.13 16:45:21] - 2012/01/13 16:45:21 RECOVERED
[2012.1月.13 16:43:48] - 2012/01/13 16:38:55 Failed
[2012.1月.13 16:43:48] - 2012/01/13 16:30:40 Failed
[2012.1月.13 16:42:44] - 2012/01/13 16:42:44 RECOVERED
[2012.1月.13 16:40:53] - 2012/01/13 16:38:55 Failed
[2012.1月.13 16:40:53] - 2012/01/13 16:30:40 Failed
"RECOVERED" は zabbix_sender で送ったものです。
値の日時文字列を見てもらうとわかると思いますが、Failed の2行が
zabbix-agent 再起動のたびに読み込まれています。
TNK - 投稿数: 4769
デバッグログで確認してみましたが、zabbix_senderを利用して登
録されているキーに値を送った後で、zabbix_agentdを再起動する
と、zabbix_agentdがzabbix_serverからアクティブチェックのリス
トを受け取る部分でlastlogsizeというどこまでログファイルを読
んだかを示す値が0になってしまっているように見受けられます。
このため、ログファイルが頭から再度読み込まれてしまっているよ
うです。
考えられる原因としては、zabbix_senderを利用してZabbixサーバ
に送り込んだ際にlastlogsizeを指定して渡せていないので、該当
するログ監視のアイテムのキーに対するlastlogsizeが0に初期化さ
れてしまっていることが考えられます。
zabbix_senderでZabbixサーバにエラーリセット用の値を送った後
でもlastlogsizeがクリアされないようにできないかもうちょっと
調べてみます。
とりあえず現時点では、zabbix_agentdの再起動だけであれば、再
起動を行っても再度ファイルの頭から読み込まれることはないよう
ですので、zabbix_agentdもしくはサーバ機自体の再起動が必要で
あるならば、再起動を行って正常確認が終わった後でzabbix_sender
を利用するようにしてみてはいかがでしょうか?
yanta1 - 投稿数: 15
回答ありがとうございます。
zabbix_sender を使わずに、障害→正常を示す文字列を決めて、ログに追記するなどで対応しようと思います。