zabbixのpol​lerの使われ方につ​いて

お世話になります。

マニュアル等を読んでも情報が見つけられなかったため質問させてください。

--環境
 RHEL 6.1 Zabbix Server 1.8.16

zabbixにてネットワーク機器のSNMP情報を収集しております。
この場合、zabbix内部の動きとしてpollerプロセスを使って
各アイテムのデータ収集をしていて、pollerの割当てアルゴリズムは
http://www.zabbix.jp/node/430に記載されている内容から推測するに
itemidに依存しているという認識です。

ここでよく分からないのが一部の監視対象が無応答となった場合のzabbix
の振る舞いです。

例えば、監視対象が100アイテム、pollerが5だとするとitemidが1のアイテムが
無応答となるとプロセス1が占有され、itemidが6のアイテムがキューに溜まって
しまうのだと思いますが、ここでプロセス1が開放されるのはいつになるので
しょうか?zabbix_server.confのTimeoutに設定している3秒でタイムアウトして
開放されるのでしょうか?

また、タイムアウトした場合はリトライをするのでしょうか?

さらにプロセス1が占有されているなら空いているプロセス0等で処理することは
できないのでしょうか?

一部の監視対象が障害で無応答となってしまった場合にキューが溜まってしまい
正常な機器の情報収集もできなくなってしまうため、その回避方法を考えています。

何か情報がありましたら是非教えてください。

コメント表示オプション

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

アイテムを取得しようとして、Timeoutで指定した時間内に応答が無い場合は、
そのアイテムは取得不可とマークされて、次のアイテム取得予定時刻が設定
され、次のアイテムの値取得処理を行います。

応答が無いからといって、プロセス1つを占有し続けることはありません。

なぜキューに溜まってしまっているのか、書かれている内容だけでは判断
できませんが、応答が3秒以上かかってしまう場合が考えられるのであれば、
Timeoutの秒数を長めに設定することで解決できる場合があります。

取得に時間がかかってしまう監視対象が多く、単位時間内に処理できない
ような状況であるならば、Pollerのプロセス数を増やすことで対応できる
かもしれません。

ユーザー k-kyo の写真

TNK様ご回答いただきありがとうございます。

Timeoutを増やすことやPollerを増やすことを検討はしているのですが
単純にTimeoutを増やすとキューが溜まりやすくなってしまうのではないか?
と懸念しております。

例えばアイテム取得間隔が60秒だとして、itemid(1)が応答しない状態と
仮定します。

この場合、プロセス1でitemid(1)の取得を実行して無応答だと3秒後にタイムアウト
し、プロセス1は開放されて次のitemid(6)の取得を実行します。
そして、itemid(1)は60秒後に再度プロセス1で取得を実行しようとするという
理解で正しいでしょうか?

ここで理解できていないのはキューというのは1つなのか?それともプロセス(Poller)ごと
にあるのか?というところです。

キューが1つでitemidに関係なく、空いているプロセスを使用するならば問題ない
と思うのですが、キューとプロセスが対になっていてitemidで固定化されてしまう
のであればitemidとPoller数の剰余が一致するアイテムが複数無応答になると
キューがどんどん溜まってしまうのではないかと思いますが正しいでしょうか?

ユーザー TNK の写真

単純にTimeoutだけを延ばしたならば、現時点でキューに溜まってしまう状況が
改善せずに、さらにキューに溜まることになるでしょう。
ですので、Pollerの数も増やして並列して処理できる数を増やすことが必要になる
と思います。

それで処理しきれないのであれば、そのサーバ機器や設定では、その規模の監視
を行うことができないのかもしれません。
その場合は、アイテムを減らすか、監視間隔を延ばすか、Zabbix Proxyも活用して
より並列度を高める方法で改善できるかもしれません。
それ以前に、Zabbixサーバのパフォーマンス改善のチューニングの余地がまだまだ
あるかもしれません。

繰り返しになりますが、特定のitemidとプロセスが固定的に結びついて処理され
るわけではありません。
もう少し具体的に書くと、Pollerの処理を開始する際に、値を取得すべきタイミン
グになっているアイテムの一覧を取得して、それを各Pollerに分配して処理させる
ようになっています。
詳細はソースを確認して頂きたいのですが、処理的にはキューが1つに近い処理
になりますので、特定のアイテム必ずしも同じPollerに割り振られるわけではあり
ません。

注意点としては、取得不可になったアイテムは、アイテムの更新間隔ではなく、
取得不可になったアイテムのリトライ間隔に変更されるので、確かデフォルト
では5分以上後回しにされたと思います。

ユーザー k-kyo の写真

TNK様

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

itemidとプロセスが固定的に結びついてはいないということでできるだけ
Pollerを増やすことで対応したいと思います。

ありがとうございました。