BufferSendの意味について
BufferSendの意味についてご教授願います。
オンラインマニュアルに、
「バッファにデータを保持する期間(秒単位)を指定します。」
との記載がありますが、これは、
「現在時刻より指定期間(秒)の過去データを保持する。」
の意味でよろしいのでしょうか。
Zabbix2.0.6において、現在、以下の挙動を確認しております。
#Zabbixサーバ+Zabbixエージェント(アクティブ)
1)BufferSend=10に設定、他は標準値
2)Zabbixエージェントからサーバへの監視データ正常送信をエージェントログで確認
3)サーバプロセスを停止
4)監視データ送信失敗をエージェントログで確認
[0x0000274D] 対象のコンピュータによって拒否されたため、接続できませんでした。
5)サーバプロセスを起動
6)監視データ送信成功をエージェントログで確認
JSON before sending [{
"request":"agent data",
"data":[
...
JSON back [{
"response":"success",
"info":"Processed 28 Failed 0 Total 28 Seconds spent 0.000252"}]
3)から5)の期間を5分取った場合、4)時点で送信失敗した監視データが欠落すると考えていたのですが、エージェントログを見る限り、3)から送信不可となった全監視データが6)で送信されています。
http://www.zabbix.jp/node/1487
を参照させていただきましたが、BufferSendの指定が何に影響しているかを理解できておりません。
情報をお持ちの方、よろしくお願いいたします。
TNK - 投稿数: 4740
BufferSendは、アイテムのタイプとして「Zabbixエージェント(ア
クティブ)」を選択していた場合に、Zabbixエージェントから
Zabbixサーバ側に取得したデータを送る時間間隔と考えて頂けば良
いと思います。
ソースを見るかぎり、キューがたまっておらず、前回送信した時か
らの時間経過がBufferSendで指定した値よりも小さい場合は、送信
処理をスキップしているようです。
恐らく、頻繁にZabbixサーバへの送信が行われるよりも、ある程度
間隔を空けて、まとめてZabbixサーバへ送ることで、Zabbixサーバ
への負荷を抑えるようにと考慮されているのだと思われます。
他にもBufferSizeという設定があったかと思いますが、アイテムの
タイプとして「Zabbixエージェント(アクティブ)」を選択していた
場合は、ZabbixエージェントからZabbixサーバに値を引き渡すとき、
Zabbixサーバに接続できずに送れないと、BufferSizeに指定した範
囲内であれば、バッファにキューイングされ、次の送信タイミング
でリトライが行われます。
送信できない値の数が、BufferSizeを超えてしまうような場合は、
バッファに新規データを追加できずにZabbixサーバ側に送るべきデ
ータが欠損することになります。
頻繁に、ZabbixサーバとZabbixエージェント間で通信ができないよ
うなことが発生するようであれば、それにかかる時間を考慮して、
BufferSizeを拡大しておくことが有効かもしれません。
misasaki - 投稿数: 2
コメントありがとうございます。
TNK様のおっしゃる通り、送信処理をスキップしているログは確認できました。
#BufferSendは10に設定しています。
7669 4228:20130614:124512.965 In send_buffer() host:'192.168.222.130' port:10051 values:1/100
7670 4228:20130614:124512.965 Will not send now. Now 1371181512 lastsent 1371181503 < 10
7671 4228:20130614:124512.965 End of send_buffer():SUCCEED
なお、実際に送信されるタイミングはItem登録時に指定する「更新間隔(秒)」に沿っています。
例えば、更新間隔を30秒に設定し、毎分0秒と30秒に送信されている場合、上記ログが毎分50秒と20秒から出力され始めるという感じです。
ですので、送信タイミングは更新間隔とBufferSendの両方を満たす場合に送信する、という感じでしょうか。
サーバが障害から復旧した際、エージェントがどこまでデータを保持でき再送できるか、BufferSendを変更しつつ確認していた次第です。いただいたコメントより、BufferSendよりもBufferSizeの方が目的に合致するようですね。
更新間隔が30秒、BufferSizeが100で監視項目が1つの場合、単純計算で50分(30秒×100÷60秒)ほどは過去データを保持できそうだということだと理解しました。
以上、ありがとうございました。