zabbixエージェント監視のタイムアウトについて

zabbixエージェントによる監視を行っている場合に監視値が取得できずにタイムアウトしてしまった場合、zabbixサーバーで見える監視値は何になりますか?

エージェントに関するタイムアウトはエージェント内でのタイムアウト、zabbixサーバーにsenderする際のタイムアウトのおそらく2つがあると思いますが、各場合で教えて下さい。

ちなみにタイムアウトについて

zabbix_agentd.confでは

Timeout=30

zabbix_server.confでは

Timeout=30

と設定しています。

コメント表示オプション

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

すいません。
上のタイムアウトを取得するトリガも教えて下さい。

ユーザー TNK の写真

長時間受け取れなかったことを判断するなら、関数nodata()を利用すればよいのではないでしょうか?
指定した時間以上、データが取得できなかった(Serverが受け取れなかった)時に1になると思います。

例:30秒
<code>
{ホスト名:アイテム.nodata(30)}=1
</code>

あと、別の質問の返信で書かせて頂いていますが、AgentからServerへの通知の為のタイムアウトは、「Timeout」に指定するのではなく、「BufferSend」に指定するのだと思います。(注:Zabbix 1.6以降)
http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=395&forum=8

ユーザー KAZ の写真

peyonさん、TNKさん

長文すいません。

■「zabbixエージェントがタイムアウトした」について

「zabbixエージェントがタイムアウトした」と言う前提ですが、接続タイムアウトと通信中のタイムアウトのどちらでしょう?

接続タイムアウトと言う状態は、エージェント監視が不可能です。エージェント監視が可能かは[設定]-[ホスト]で確認できます。

・本家のzabbix(1.8は確認してません。すいません。)
<code>
状態: 有効/無効/不明
</code>

・zabbix-jp 1.6.7-1以降のrpm
<code>
エージェントの状態: 利用可能/利用不可/不明
</code>

zabbixエージェントが通信不可能の状態は下記で取得可能です。

<code>
items
Type:ZABBIX Internal
key :zabbix[log]
</code>

設定すると下記のログが取得できます。
<code>
Host [ホスト名]: first network error, wait for 15 seconds
</code>
これを検知するトリガーを作れば良いかと。

■Timeoutについて
1.6.8のソースを読んだ限りでは…

1)ZABBIXエージェント(active)からZABBIXサーバへのコネクトタイムアウト値になってます。
init_config関数 92行目 confファイルのTimeoutの値をCONFIG_TIMEOUTに設定
<code> {"Timeout",&CONFIG_TIMEOUT,0,TYPE_INT,PARM_OPT,1,30},
</code>
refresh_active_checks関数 312行目 CONFIG_TIMEOUTは接続タイムアウト値として使用
<code>
if (SUCCEED == (ret = zbx_tcp_connect(&s, CONFIG_SOURCE_IP, host, port, CONFIG_TIMEOUT)))
</code>

send_buffer関数 470行目 CONFIG_TIMEOUTは接続タイムアウト値として使用
<code>
if (SUCCEED == (ret = zbx_tcp_connect(&s, CONFIG_SOURCE_IP, host, port, MIN(buffer.count*CONFIG_TIMEOUT, 60)))) {
</code>

2)ZABBIXサーバから各データ取得時のタイムアウト値?になってます。
main_poller_loop関数でSIGALARMを設定し、アラームが発生するとchild_signal_handler関数が呼ばれるように設定。
その後、get_values関数→get_value関数と呼ばれ、CONFIG_TIMEOUTの時間経過するとアラームが発生するように設定し各監視タイプ単位のデータ取得関数を呼びます。
只、child_signal_handler関数では下記を実行するだけでそれ以降特別に処理が変わったりはしません。
<code>
zabbix_log( LOG_LEVEL_DEBUG, "Timeout while answering request");
</code>

3)ZABBIXエージェント(active)からZABBIXサーバへデータ送信時に使用してますが…
サーバのようにアラーム発生する要なっているのですが、それだけです。
昔の名残でしょうか…

一応、2)が通信中のタイムアウトなのですが、ログ出力以外何もしてませんね。
ちなみに、タイムアウト以外の通信障害は別途エラールートに流れます。

■nodata()について
nodata()は指定間隔の間データがないかを判断します。
但し、トリガーは監視可能な状態でないと実行されないので、zabbixエージェントが接続タイムアウトしているとその時点では実行されないと思います。

■BufferSend、BufferSizeについて
zabbix_agentd.confのパラメータで、ZABBIXエージェントからサーバへのデータ送信をバッファリング(ため込んで送信)する設定です。

と書きながらも設定方法がいまいち不明だったので、ソースを読んでみました。
BufferSendはどれだけの間ZABBIXエージェント側でデータをため込むかを指定する値かと。

最大1時間ため込めるようです。

ユーザー peyon の写真

ありがとうございます。
早速KAZさんのレスにありますzabbixサーバーログ監視のアイテムを設定しましたが、取得できていません。

名前: ZabbixLog
タイプ:ZABBIXインターナル
キー:zabbix[log]
データ型:文字
更新間隔(秒):30
例外の更新確認(秒):例外の更新間隔はありません
例外の更新間隔の作成:なし
ヒストリの保存期間(日):90
ステータス:有効
値のマッピングの使用:なし
アプリケーションの作成:空白
アプリケーション:なし

設定ミスでしょうか?

ユーザー kodai の写真

こんにちは。

データ型を「ログ」に設定すると監視できないでしょうか。

ユーザー peyon の写真

遅くなりまして、すみません。

いつも、ありがとうございます。

データ型「ログ」に設定しても監視できませんでした。
たしかに「ログ」に設定すれば監視できると思ったのですが、できませんでした。
なぜでしょう?

ユーザー TNK の写真

私の手元の環境では、

 タイプ : ZABBIXインターナル
 キー  : zabbix[log]
 データ型: 文字

で、

 Host [ホスト名]: first network error, wait for 15 seconds

などの値が取得できています。

設定された後にエラーは発生していますか?
そして、通常のログファイル(/var/log/zabbix/zabbix_server.log)の方に上記のようなエラーログが出力されていますか?

ユーザー peyon の写真

ありがとうございます。

first network errorは以前は出ていたのですが、最近は出ていません。

Send list of active checks to [::ffff:xxx.xxx.xxx.xxx] failed: host [ホスト名] not found

というエラーは出ていますが、これも取得できますか

ユーザー KAZ の写真

peyonさん

first network errorは以前は出ていたのですが、最近は出ていません。

以前出ていたマシンは、今は監視可能になってないですか?
「first network errorは〜」は監視不能の時にでます。

Send list of active checks to [::ffff:xxx.xxx.xxx.xxx] failed: host [ホスト名] not found

ログにでていれば監視可能かと思いますが、それはフロントエンドのホスト名とzabbix_agentd.confのhostnameが一致してないってエラーなので、直した方が良いかと。

ユーザー peyon の写真

すみません。

first network errorはzabbix_server.confでDebugLevel=4だとログに出ませんか?

ユーザー KAZ の写真

peyonさん

「first network error」ですがソースでLOG_LEVEL_WARNINGになってますのでDebugLevelが3、4ならば出ます。

ユーザー peyon の写真

「first network error」出ました。
ありがとうございました。

もう一つ質問があるのですが、エージェント監視のタイムアウトが検知できることはわかりました。
では、system.cpu.utilやsystem.runなどのエージェントの各アイテムのタイムアウトはどのようにすれば検知できますか?