snmp監視のQueueが滞留

いつも、お世話になっております。

snmpV1エージェント監視のキューの滞留が解消しなくて、困っております。
確認すべき箇所、原因、対処法などご存じでしたら、ご教授頂けませんでしょうか?

原因になっているアイテムがどれなのか、特定ってできるでしょうか?

■Zabbix環境
StartPollers=25
Zabbixのバージョン:1.8.17

メモリ64GB

■TOPコマンドの状況
top - 21:23:04 up 349 days, 6:34, 3 users, load average: 1.82, 2.21, 2.05
Tasks: 309 total, 2 running, 307 sleeping, 0 stopped, 0 zombie
Cpu(s): 31.3%us, 5.7%sy, 0.0%ni, 61.7%id, 0.0%wa, 0.2%hi, 1.0%si, 0.0%st
Mem: 65881732k total, 65255432k used, 626300k free, 214160k buffers
Swap: 18874352k total, 108k used, 18874244k free, 20248912k cached

PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
14091 mysql 21 0 39.1g 36g 5184 S 100.4 57.5 77019:20 mysqld
16637 apache 16 0 683m 440m 3920 S 13.6 0.7 5:50.95 httpd
1310 apache 16 0 1065m 822m 3892 S 2.7 1.3 10:03.47 httpd
16640 apache 15 0 1076m 833m 3900 S 2.3 1.3 9:29.04 httpd
10165 root 23 0 142m 3556 1520 S 2.0 0.0 3:22.15 snmptrapd
1062 zabbix 15 0 319m 23m 21m S 0.7 0.0 0:06.89 zabbix_server
1067 zabbix 15 0 319m 22m 20m S 0.7 0.0 0:07.03 zabbix_server
1085 zabbix 15 0 319m 21m 19m S 0.7 0.0 0:05.84 zabbix_server
14 root RT -5 0 0 0 S 0.3 0.0 33:55.98 migration/4

zabbix_serverプロセス再起動は実施しましたが、あまり変化ありません。

キューの状態は、添付ファイルのような状況で、「SNMPv1エージェント」の10分以上が2000以上溜まっている状態です。

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

コメント表示オプション

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

ファイル添付します。

ユーザー hiroyuki の写真

mysqlの再起動をしたところ、キューが2000から、800まで減りました。
しかし、また、増加し始めて、1000以上にキューが滞留し始めた為、
何か、原因となるアイテム等が居るのではないかと思いますが、特定できていない状況です。。

ユーザー hiroyuki の写真

Zabbixサーバの状態

パラメータ 値 詳細
Zabbixサーバの起動 はい localhost:10051
ホスト数 (有効/無効/テンプレート) 4262 2940 / 1320 / 2
アイテム数 (有効/無効/取得不可) 48446 28067 / 20297 / 82
トリガー数 (有効/無効)[障害/不明/正常] 216227 210340 / 5887 [206 / 142284 / 67850]
ユーザ数 (オンライン) 40 6
1秒あたりの監視項目数(Zabbixサーバの要求パフォーマンス) 467.78 -

ユーザー TNK の写真

1秒あたりの監視項目数が467.78で、StartPollersが25ですので、おおよそ
1つのPollerプロセスで、1秒間に約18.7個のアイテムを処理しなければなら
ない状態であると思われます。

ネットワーク構成や機器にもよりますが、SNMPでの監視の場合、応答時間が
秒単位になる可能性も考えられますので、処理しきれていないのではないで
しょうか?

各アイテムの監視間隔を延ばすか、StartPollersの数を増加させるなどの対応
が必要だと思われます。

ご確認ください。

ユーザー hiroyuki の写真

TNKさん

夜分遅くにも関わらず、迅速に返信下さりまして、ありがとうございます。

StartPollersの数を25から増加させてみました。

50:変化なし
75:変化なし
100:zabbix-serverプロセスを起動後、すぐにzabbix-serverプロセスダウン。

でした。

キュー -> 詳細 から滞留していると思われるホストを一旦、全て無効にしたところ、キューの滞留は無くなりました。しかし、しばらくするとまた増え始めました。
現在50程度(10分以上)の滞留状況です。。。

ユーザー TNK の写真

100:zabbix-serverプロセスを起動後、すぐにzabbix-serverプロセスダウン。

何のログも出力されずにプロセスダウンですか?
何らかのログが出力されていないか確認してください。

OSやディストリビューション、バージョンによっては、プロセス数
を増やすと共有メモリなどカーネルパラメータのデフォルト値から
調整することも必要になる場合もあると思います。

プロセス数が増やせない状態では、限られたプロセスで監視するた
めに監視間隔を伸ばすか監視項目を減らさなければ処理しきれない
状態なのだと思われます。

繰り返しになりますが、特にSNMPで規模の大きいネットワークを監
視する場合、ネットワークの距離や機器の性能などによって、SNMP
の応答に時間がかかる場合がありますので、プロセス数が少ないと、
単位時間あたりに処理できる監視項目数を増やすことができません。

ご確認ください。

ユーザー hiroyuki の写真

Zabbixサーバの状態

パラメータ 値 詳細
Zabbixサーバの起動 はい localhost:10051
ホスト数 (有効/無効/テンプレート) 4262 2865 / 1395 / 2
アイテム数 (有効/無効/取得不可) 43956 25661 / 18213 / 82
トリガー数 (有効/無効)[障害/不明/正常] 209021 203284 / 5737 [192 / 139630 / 63462]
ユーザ数 (オンライン) 40 5
1秒あたりの監視項目数(Zabbixサーバの要求パフォーマンス) 427.68 -

ユーザー hiroyuki の写真

試しに、zabbix_server.confのTimeout値を30から5にしてみましたが、解消されませんでした。
(snmpgetをすぐにタイムアウトさせて、次々とポーリングさせることを期待してました。)

キューの詳細に表示されているホストを無効にしたところ、なぜか新たなホストがキューに滞留しています。
(無効にしたタイミングで、キュー画面に表示されてなかったアイテムが新たに監視され始めて、キューになっている?)

>各アイテムの監視間隔
は、要件で、現段階では変更できないのです。(伸ばしたいですが。。)

原因が、キャパオーバー(mysql?Zabbix?)なのか、DBのデータが壊れているのか、特定のアイテムが悪さしているのか、mysqlのチューニングで何とかなるのか? 可能であれば分かればと思っています。
(事象が発生する1日前あたりに、1.8.16から1.8.17へバージョンアップしましたが関連性があるかどうかは不明です)

もし、何か分かるようでしたら、アドバイス頂けると幸いです。

■参考までにmy.cnf設定を貼り付けます。
# egrep -v ^# /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1

log-bin
expire_logs_days=2

default-table-type=InnoDB
default-character-set=utf8
skip-character-set-client-handshake

innodb_file_per_table
innodb_buffer_pool_size=1536M
innodb_log_file_size=256M
innodb_log_buffer_size=32M
innodb_log_files_in_group=2
sort_buffer_size=1M
read_rnd_buffer_size=1M
join_buffer_size=256K
read_buffer_size=1M
table_cache=1024
query_cache_size=32M
max_connections = 200

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

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

ユーザー TNK の写真

試しに、zabbix_server.confのTimeout値を30から5にしてみましたが、解消されませんでした。
(snmpgetをすぐにタイムアウトさせて、次々とポーリングさせることを期待してました。)

1秒間に1つのプロセスが18個のアイテムを処理させるような設定に
されているのですから、Timeoutの値を変えたところで焼け石に水
です。

>各アイテムの監視間隔
は、要件で、現段階では変更できないのです。(伸ばしたいですが。。)

プロセス数を増やす努力を再度されましたか?
プロセス数を増やせないなら、アイテムの監視間隔を伸ばすか、ア
イテム数を減らさなければ改善しない可能性が高いと思われます。

my.cnfをご提示頂きましたが、強いて挙げれば、メモリを64GB搭載
されているサーバであるならば、innodb_buffer_pool_sizeのもう
少し大きくしても良いかもしれません。
64GBのメモリを搭載したサーバがZabbix専用であるならば、半分以
上のメモリを割り当てても良いでしょう。

あとは、現時点のZabbixサーバ自体の負荷状況として、ロードアベ
レージが2程度で、iowaitの割合もほとんどない状態のようですの
で、mysqldのCPU利用率は100%などと高いもののディスクのI/Oが
ボトルネックになっているわけでもなさそうです。

繰り返しになりますが、やはりプロセス数を増やす努力をされてみ
てはいかがでしょうか?

極端な例をあげるとすると、SNMPで値を取得するするのにすべて1
秒かかっているような環境であった場合、StartPollersで25のまま
ですと、秒間25アイテムしか処理できません。

1秒あたりの監視項目数(Zabbixサーバの要求パフォーマンス) 467.78 -

というようなアイテム数は処理することは不可能です。

極端な例をあげましたが、1つのアイテムの値を取得するのに時間
がかかるような環境であった場合、Pollerの数を増やさなければ、
1秒当たりの監視項目数が多い環境を監視することはできません。

ユーザー hiroyuki の写真

了解しました、
StartPollers=75 にした状態で、様子を見てみます。

すみません、my.cnfの設定を張り間違えてました。 正しくは下記です。

# egrep -v ^# /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
old_passwords=1

log-bin
server-id=1
expire_logs_days=2

default-table-type=InnoDB
default-character-set=utf8
skip-character-set-client-handshake

innodb_file_per_table
innodb_buffer_pool_size=32G
innodb_log_file_size=512M
innodb_log_buffer_size=64M
innodb_log_files_in_group=2
innodb_additional_mem_pool_size=128M
sort_buffer_size=4M
read_rnd_buffer_size=2M
join_buffer_size=256K
read_buffer_size=1M
table_cache=1024
query_cache_size=32M
max_connections = 200
max_allowed_packet=4MB

[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

ユーザー TNK の写真

75で溜まってしまっているのですよね?
なぜそれ以上のプロセスが起動できるようにできないかをお調べに
ならないのですか?

ユーザー yas の写真

同様のパターンで即プロセスが落ちたことがありましたが、共有メモリの不足が原因でした。
動作環境が分かりませんので方法は調べていただく必要があると思いますが、
共有メモリを増加させた上でプロセス数を増やしてみてはどうでしょうか?

ユーザー hiroyuki の写真

>TNKさん

100にして、mysql最大接続数を超えて、止まっているようでしたので、my.cnfのmysql最大接続数を200から400に上げてZabbix-serverを起動したところ、起動しました。
その状態でキューを確認したところ、変化無かった為、150にしてみましたが、解消されませんでした。

結果、75から150にして変化が無かったようなので、それ以上の数値にはしていません。
とりあえず、StartPollersは、元の75に戻しました。

>yasさん
アドバイスありがとうございます。
今回は、メモリ不足ではなかったので、上記の対応を致しました。

ユーザー TNK の写真

あとは、監視されているZabbixサーバの各値の状況を確認して頂い
て、何の処理に負荷がかかっていたり、ボトルネックになっていた
りするのかを突き詰めていくしかないと思います。

例えば、デフォルトのZabbixサーバ用テンプレートで入っていたと
思いますが、

 Zabbix busy 役割名 processes, in %

で、busy率が高いものがありませんか?

pollerプロセスのbusy率が高いのであれば、やはりpollerプロセス
の数に対して監視項目が多かったり、監視間隔が短かったりという
状況が変わっていないのだと思われます。

再度、Zabbixサーバのどのような部分に負荷がかかっているのか、
ご確認ください。

ユーザー hiroyuki の写真

TNKさん

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

UnreachablePollerのビジー率(zabbix[process,"unreachable poller",avg,busy])が100%でしたので、
StartPollersUnreachableを下記のように変更しました。

StartPollersUnreachableの値:ビジー率
1(デフォルト):100%
10:60%
25:23%
40:12%

結局、今は、下記のようになっています。
StartPollers=75
StartPollersUnreachable=40
Timeout=3

キューは、添付画像のような状態で、ちょくちょくSNMPv1のキューが1分以上に載ります。
(30秒程度は許容範囲だとして、1分以上を無くせればと考えています)

■現在のZabbix負荷状況
history syncer busy 2014 3月 18 14:57:13 1.41 % -0.38 %
Network Interface I 2014 3月 18 14:57:27 472.13 Kbps -71.62 Kbps
Network Interface OUT 2014 3月 18 14:57:30 884.48 Kbps -84.33 bps
poller busy (MAX) 2014 3月 18 14:57:15 26.23 % +6.32 %
poller busy (MIN) 2014 3月 18 14:57:17 0 % -
Total disk read bytes 2014 3月 18 14:57:23 5.8 KBps -4.6 KBps
Total disk write bytes 2014 3月 18 14:57:25 5.29 MBps -7.31 MBps
unreachable poller busy 2014 3月 18 14:57:21 9.67 % +0.96 %
unsupported Items 2014 3月 18 14:57:19 74 -
busy icmp pinger process % 2014 3月 18 14:57:06 38.36 % +0.14 %
busy poller process % 2014 3月 18 14:57:07 4.87 % -0.03 %
busy trapper process % 2014 3月 18 14:57:08 0.01 % 0 %
buffer cache free % 2014 3月 18 14:57:10 92.88 % -
history cache free % 2014 3月 18 14:57:10 99.61 % -0.19 %
zabbix queue 2014 3月 18 14:57:09 1291 -30

StartPollersと、StartPollersUnreachableを100にしてみましたが、キューの状況は変わりませんでした。

何か他にチューニングすべき箇所等ありますでしょうか?

ユーザー hiroyuki の写真

ダッシュボードの、「Zabbixの状態」を画像で添付します

ユーザー hiroyuki の写真

当初のキュー滞留や、snmp取得しに行かない問題自体は無くなり、多少のキュー残りは運用に問題ないレベルなので、これで様子見させて頂きたいと思います。
色々と調査、返信して頂き誠にありがとうございました。

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