外部チェックで30秒以上のキューが滞留する原因について

お世話になります。

下記の環境にて、外部チェック(スクリプト)の30秒以上のキューが滞留する原因について何かわかりますでしょうか?

■現象
ZabbixServerにスクリプトを置いて、スクリプト内部でzabbix_getを使って、windowsサーバにあるzabbixエージェント経由で、あるコマンドを実行しています。
あるコマンドは、実行してから、完了までに、約1.5秒かかります。(コマンドをラップしているスクリプトの実行には、合計1.6秒ほどです)
外部チェックは、1ホストごとに実行しています。

zabbixServer側のStartPorllersを増やしても変化ありませんでした。
(poller数が増えれば、poler busyが減り、キューは、無くなると思ったのですが。)

■動作環境
OS:RedHat5.4
zabbix:v1.8
Mysql:5.0.77

メモリ:8GB
CPU:4コア
HDD:90GB

[zabbix_server.conf]
StartPoller 150
StartTrappers 50
StartPingers 10
CacheSize 100M
HistoryCacheSize 32M
TrendCacheSize 16M
HistoryTextCacheSize 64M
Timeout 30
StartPollersUnreachable 40

[my.cnf]
innodb_file_per_table
innodb_buffer_pool_size=4096M
innodb_log_buffer_size=32M
innodb_log_files_in_group=2
innodb_log_file_size=24M
sort_buffer_size=1M
read_buffer_size=1M
join_buffer_size=256K
read_buffer_size=1M
table_cache=1024
query_cache_size=32M
max_connections = 800
innodb_fast_shutdown=0

[windowsサーバ側のzabbix_agents.conf]
startAgents 60

■Zabbixサーバの状態
今は、試験的に有効にしているホストが少ないですが、増やすとその分、滞留キューも増えます。
キューの状態は、添付画像をアップしました。

Zabbixサーバの起動 はい localhost:10051
ホスト数 (有効/無効/テンプレート) 4264 602 / 3653 / 9
アイテム数 (有効/無効/取得不可) 19251 18641 / 610 / 0
トリガー数 (有効/無効)[障害/不明/正常] 19 0 / 19 [0 / 0 / 0]
ユーザ数 (オンライン) 3 2
1秒あたりの監視項目数(Zabbixサーバの要求パフォーマンス) 134.85 -

■TOPコマンド結果
top - 20:57:44 up 20 days, 22:15, 2 users, load average: 2.15, 1.82, 1.51
Tasks: 390 total, 1 running, 389 sleeping, 0 stopped, 0 zombie
Cpu(s): 7.0%us, 15.8%sy, 0.0%ni, 76.5%id, 0.4%wa, 0.0%hi, 0.2%si, 0.0%st
Mem: 8175316k total, 8121456k used, 53860k free, 115884k buffers
Swap: 8388600k total, 71392k used, 8317208k free, 4670016k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
5004 mysql 15 0 5108m 2.4g 4772 S 4.0 30.3 30:58.93 mysqld
6 root RT -5 0 0 0 S 0.3 0.0 1:47.79 migration/2
5242 zabbix 17 0 355m 8488 6464 S 0.3 0.1 0:00.13 zabbix_server
5475 zabbix 15 0 301m 16m 15m S 0.3 0.2 0:00.62 zabbix_server
5485 zabbix 15 0 301m 16m 15m S 0.3 0.2 0:00.62 zabbix_server
5495 zabbix 15 0 301m 16m 15m S 0.3 0.2 0:00.54 zabbix_server
5576 zabbix 15 0 301m 22m 20m S 0.3 0.3 0:01.24 zabbix_server

以上ですがよろしくお願い致します。

コメント表示オプション

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

1秒あたりの監視項目数が134.85で、StartPollersが150ですので、
その時間のかかる外部チェックの割合にもよりますが、すべてが
1.5秒かかると仮定すると、1秒間に134.85個を処理しきれません
ので、起動されているPollerの数では足りなくなって、キューに
溜まることが予想されます。

1.8系でもテンプレートのTemplate_Zabbix_Serverを利用すれば、
Zabbixの各プロセスの稼働状況が確認できたと思いますので、
例えば、

 Zabbix busy poller processes, in %
  zabbix[process,"poller",avg,busy]

などを確認してみてください。

この値が100%に近いようであれば、やはりPollerの数が不足してい
ると思われますので、StartPollersの値を大きくするか、監視の
間隔を伸ばして対応することになると思います。

StartPollersの値を大きくしても改善しないようであれば、サーバ
自体のパフォーマンスで、OS、DB、ネットワークなどのどこかでボ
トルネックになっている箇所がないか確認してください。

Zabbix自体の処理の影響が大きい場合は、より新しいバージョンの
Zabbixを利用することで処理パフォーマンスが著しく改善されてい
ますので、バージョンアップすることもご検討ください。

ユーザー hiroyuki の写真

TNKさん

返信ありがとうございます。

StartPollersが150の時に、
>zabbix[process,"poller",avg,busy]
は、20%~30%でした。

試しに、StartPollersを、300と600にしてみましたが、キューはあまり変化ありませんでした。
(StartPollersの数をある一定値超えたところで、いくら増やしても効果はないのかなと思いました。)

監視間隔を1分から3分に伸ばすとキューは減ります。。。

外部チェックで実行しているスクリプトは、zabbix_getを使って、1台のwindowsサーバに対して、全ホスト分(2000回)のリクエストを送信しています。
そのwindowsサーバのzabbix_agentは最大値の62なので、単純にpollerの数よりzabbix_agentの数が少ないのでそこがボトルネックになっているのではないかと考えているのですが如何でしょうか?

もし、その可能性があるとしたら、zabbix_agentを複数インストールしたいのですが、そのようなことは可能でしたでしょうか?
windows側のリソースにはまだ余裕があります。

ユーザー TNK の写真

そういう構成であれば、そのWindowsサーバがボトルネックになっ
ていると思われます。
Zabbixサーバ側のStartPollersの値を大きくしても改善はしないで
しょう。

Zabbix 2.2.4であれば、StartAgentsは100まで上げられますが、
多少改善できる程度だと思われます。

あと、理論的にはWindows上で、

 ・別のサービス名
 ・別のconfファイル
 ・別のポート番号

で起動すれば、複数は起動できるはずですが、標準のコマンドの機
能だけでは、設定ファイルを分けて異なるポート番号で起動するよ
うにすることはできたとしても、サービスへの登録処理で同じサー
ビス名でしか登録できなかったと思います。

コマンドプロンプトで、引数で別のconfファイルを指定して起動す
る形であれば、ポート番号の異なる複数のエージェントが起動でき
るかもしれません。
起動できたとしても、zabbix_getを利用して呼び出す際に、それ
ぞれのポート番号のエージェントに分散させて呼び出すようなこ
とが必要となると思いますのでご注意ください。

ユーザー hiroyuki の写真

なるほどです。
複数インストールできるところまで確認できました。

ZabbixサーバとWindowsサーバ間のネットワーク経路のポート解放に業務上時間がかかる為、
先に、Zabbix 2.2.4のエージェントでstartAgetntsを100に上げて、どのくらい変化があるのか確認してみました。
エージェント起動時に下記のエラーが出力され、起動しませんでした。

2972:20140627:180353.376 agent #88 started [listener #88]
2776:20140627:180353.376 One thread has terminated unexpectedly (code:4294967295). Exiting ...
3424:20140627:180353.376 agent #90 started [listener #90]
1844:20140627:180353.376 agent #91 started [active checks #1]

C:\Program Files\Zabbix Agent>zabbix_agentd.exe -V
Zabbix Agent Win32 (service) v2.2.4 (revision 46770) (23 June 2014)
Compilation time: Jun 23 2014 15:34:17

startAgetntsの上限を超えた時に出力されるエラーと同じなのですが、Windowsのエージェントの上限値は100であってますでしょうか?
もしくは、何か設定等が必要でしたでしょうか?

ユーザー kng の写真

hiroyukiさん

横から失礼します。

まだ、マニュアルがまだ2.2.4対応になっていないようですが(すみません2.2.4は、まだ触ってない為、未確認です。)

https://www.zabbix.com/documentation/2.2/manual/appendix/config/zabbix_a...

を見る限りでは、ServerActiveとStartAgentsを足して64以内(よってStartAgentsは63がMAX)となっています。

active checks のプロセスが存在するようですので、上限を100とすると、StartAgentsは99が最大値になるのでは
ないでしょうか。

※未確認情報ですみません・・・

ユーザー TNK の写真

2.2.4のWindows用Zabbixエージェントのサンプル設定ファイル内に
最大値が100と書いてあったので、100が設定可能かと思って回答さ
せて頂いたのですが、kngさんからあった通り、マニュアルの方が
正しいのであれば、63までのようです。

申し訳ありません。

ユーザー hiroyuki の写真

kngさん

ありがとうございます。
やはり、windowsは63が上限なのですね。

>Zabbix 2.2.4であれば、StartAgentsは100まで上げられます
と、ありましたので、念のため確認させていただきました。(linux用も100ですし。)

ネットワーク経路上のポート解放後に、エージェントを複数インストールして再試験してみます。
TNKさん、kngさん、ご教授ありがとうございました。