監視ができなくなる現象について

ZABBIX2.0.6でサーバを17台ほど監視しています。
ZABBIX_SERVERはCentOS5.9上で動作しており、使用しているDBはMySQLの5.0.95です。
DBの設定はほぼほぼデフォルトのままです。

この状態で6月15日までほぼ不具合なく動作していたのですが、15日に断続的にアイテムを収拾できない現象が発生しました。
添付した画像のように、ほぼ全てのサーバでデータが欠落しています。

なにか、原因などわかりますでしょうか。

気になった設定値としては
StartTrappers=20
ぐらいでしょうか。

サーバ上では次のようなログが出ていました。
31445:20130615:064349.534 Zabbix agent item [net.tcp.service[ssh]] on host [XXXX] failed: first network error, wait for 15 seconds
31446:20130615:064349.929 Zabbix agent item [net.tcp.service[smtp]] on host [XXXX] failed: first network error, wait for 15 seconds
31451:20130615:064404.506 resuming Zabbix agent checks on host [XXXX]: connection restored

クライアント上では以下のログを繰り返しています。(192.168.0.6はZABBIXサーバー)
3025:20130615:062539.392 active check data upload to [192.168.0.6:10051] started to fail ([connect] cannot connect to [[192.168.0.6]:10051]: [4] Interrupted system call)
3025:20130615:062547.400 active check data upload to [192.168.0.6:10051] is working again
3025:20130615:065539.119 active check data upload to [192.168.0.6:10051] started to fail ([connect] cannot connect to [[192.168.0.6]:10051]: [4] Interrupted system call)
3025:20130615:065543.255 active check data upload to [192.168.0.6:10051] is working again

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

コメント表示オプション

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

全体でどの位のアイテム数で監視していて、どの程度Zabbixサーバ
に負荷がかかっている状態なのかがわかりませんが、単純にネット
ワークの経路や、Zabbixエージェントの負荷などによってZabbixサ
ーバからの要求に対してZabbixエージェントが応答するまでのレスポ
ンスが低下していたのであれば、両側のTimeoutの値を調整すること
で対応できる場合があります。

Zabbixサーバ側のzabbix_server.conf、Zabbixエージェント側の
zabbixagentd.conf内のTimeoutの値を、デフォルトの3秒から10秒
とな長めの値に変更して、それぞれのプロセスを再起動してみてく
ださい。

ユーザー minashiro の写真

>TNK様
ありがとうございます。

ただ、ZABBIXサーバが入っているマシンにあるエージェントからも取れなくなっていたため、ネットワーク経路ではないと考えています。
(ただし、同じマシンでも127.0.0.1ではなくて、192~で指定)

Timeout値は延ばしてみようかと思います。

全体のアイテム数は1014で、1秒あたりの監視項目数は69.8です。
取得不可アイテムは0にしてあります。

ユーザー TNK の写真

Zabbixサーバ自体への負荷状況はいかがですか?

負荷が高いのであれば、その負荷を下げる何らかの対応が必要でし
ょう。
どのくらいのスペックのサーバで運用されているのかわかりません
が、DBMSのチューニングも必要になるかもしれません。

負荷が高くないのであれば、Pollerの数を増やした方が良いかもし
れません。
秒間70項目くらいのようですから、同時に値をより多く取得できる
ようにStartPollersの値も増加させた方が良いかもしれません。
このあたりは、キューにどれくらい溜まっているかにも依存するの
で、Webフロントエンドの「管理」->「キュー」などを確認してみ
てください。

つまり、タイムアウト値の調整で対処できたとしても、ベースとな
る各種設定も改善の余地があるかもしれませんので、それぞれのサ
ーバの余計な負荷を軽減して、きちんと監視できるように調整して
いきましょう。

ユーザー fripper の写真

サーバ自身の CPU および ディスク IO の負荷状況はいかがでしょうか?

私が管理しているサーバで、DBのデータ量が増えたことによって select / insert に掛かる
負荷が上昇してしまい、エージェントからの受け取りデータの書き込みが追いつかなくなってしまい
監視データを取りこぼしてしまった経験があります

ユーザー minashiro の写真

>TNK様
現時点でのキュー待ちは0ですので、通常時は問題ないようです。
StartPollersの目安としてはなにか指標?見たいなものはありますのでしょうか。
もしあればご教示いただけますと幸いです。

>fripper様
ありがとうございました。
DiskIOはとっていなかったのでCPUから見てみましたところ、
当日Idelが平均的に60->30に、iowaitが20->30ぐらいに
CPULoad5も1.25から2.0ぐらいに上昇していました。
ZABBIX以外では、バックアップぐらいしかしていないので上昇した原因は不明ですが・・・。
これによる取りこぼしかもしれません。

ユーザー TNK の写真

Zabbixサーバのパラメータはいくつかあるのですが、Zabbixエージ
ェントを利用した監視を同時にいくつ実行できるかを調整すること
ができます。
それが、「StartPollers」で調整できる値です。
# 他にも役割に合わせて調整できます。

起動された各Pollerは、分担して値の取得処理を実行します。

例えば、1秒間に10アイテム取得する必要があって、Pollerの数が
デフォルトの5個だったとします。
そうすると、それぞれのアイテムが平均0.5秒以内に終わらないと、
取得しなければならない値が取得できずにキューに溜まっていって
しまうことになります。

そこで、Zabbixサーバ自体の負荷状態やリソースの空き状態に問題
が無ければ、Pollerの数を増やすことで、同時に値を取得すること
ができる数を増やすことができますので、キューに溜まりにくくな
るわけです。
キューに溜まってしまわないよう、各監視項目の値取得でどの位の
時間がかかるかを考慮しつつ、1秒あたりの監視項目数をこなせる
だけのPollerの数を調整することになるでしょう。

Zabbixサーバ自体の負荷に問題がある場合は、Zabbixサーバの負荷
を下げるようなチューニングが必要となってきます。
MySQLなどのミドルウェアでも改善できる箇所があるかもしれませ
んが、サーバのスペックが低い場合は、監視間隔を広げたり項目を
削減しなければならない場合もあります。

また、バックアップを実施する場合、そのバックアップのためのデ
ータの読み取りと、取得したバックアップデータを書き込む先が同
じディスクであったりすると、読み書きの処理の終了待ち(iowait)
の割合が上昇してしまって、システム全体としては処理パフォーマ
ンスが著しく低下してしまう場合があります。

今回の場合は、バックアップの処理で負荷がかかり、通常であれば
タイムアウトが発生しない状況であったにも関わらず、Zabbixサー
バ自体も処理パフォーマンスが低下してタイムアウトが発生してし
まっていた可能性もありそうです。

ユーザー minashiro の写真

pollerは大まかに、"全体の数/一秒あたりの処理数"と言う具合でしょうか?
それに余裕をもたせて20にしてみたところ、ネットワークの遅延以外ではキュー待ちが出てないようです。(一部ルータ越え&外部ネットワークのサーバがあります)

あと、サーバ自体に問題がある場合、Zabbix-Proxyで負荷を分際したりというのも対策になりますでしょうか。

いろいろとご説明ありがとうございます。

ユーザー TNK の写真

pollerは大まかに、"全体の数/一秒あたりの処理数"と言う具合でしょうか?

全体の数と書かれているのが何を示されているのかわかりませんが、

 1秒あたりの監視項目数 /
  1秒あたりに1つのPollerが処理可能な監視項目数

ということであれば、おおよそそのような値になってくると思いま
す。

先に書かせて頂いた説明がわかりにくかったかもしれませんが、
懲りずに例示させて頂くと、以下のような感じです。

「1秒あたりの監視項目数」が50であったとします。
1つの監視項目の値を取得するのにかかる時間の平均が1秒で、
StartPollersの値がデフォルトの5だったとすると、

  50(個) x 1(秒) / 5(個) = 10(秒)

となって、1秒内では処理しきれないため、キューにたまり続けて
しまいます。

今度は、1つの監視項目の値を取得するのにかかる時間の平均が0.1
秒で、StartPollersの値がデフォルトの5だったとすると、

  50(個) x 0.1(秒) / 5(個) = 1(秒)

となって平均約1秒で処理できるようになり、キューにはほとんど
たまらなくなると思います。

このように、それぞれの監視項目の値取得にどれだけの時間がかか
るかに左右されます。
同じPollerの数でも、より短時間で値を取得できるのであれば、よ
り多くの監視項目を監視できます。値を取得するのにより長い時間
がかかってしまうのであれば、Pollerの数を増やして同時に処理で
きる数を増やしてあげないと、処理しきれずにキューに溜まってし
まうわけです。

つまり、監視項目や対象の機器、ネットワークの構成などによって、
値取得までにかかる時間は様々ですので、キューの状態やZabbixサ
ーバの負荷状況を確認しながら、StartPollersだけではなく、IPMI
やHTTPなどアイテムのタイプやキーに合わせた各パラメータをその
環境に合わせた値に調整するようにしてください。

ただし、むやみにPollerの数を増やすと、メモリ不足が発生するな
どの障害が発生してzabbix_serverを起動できなくなったり、DBMS
へのアクセスを処理しきれなくなってしまったりするのでご注意く
ださい。

あと、サーバ自体に問題がある場合、Zabbix-Proxyで負荷を分際したりというのも対策になりますでしょうか。

どのような問題があるか次第です。

Zabbix Proxyを利用した場合、監視対象から値を取得してくる処理
の部分を分散して改善できますが、最終的に取得した各データは、
Zabbix Serverが接続しているDBMSに保存されますので、DBMSの部
分での問題である場合は、Proxyだけでは改善できないと思います。

離れたネットワークが存在し、その離れたネットワーク上に監視対
象が多く存在する場合は、その離れたネットワーク上にProxyを設
置することで、ネットワーク遅延による影響を少なくすることは期
待できると思います。

ユーザー minashiro の写真

>  1秒あたりに1つのPollerが処理可能な監視項目数
を得る方法は、ぎりぎりまでPollerを削って、キューにはみ出すぐらいにまで攻めてみないとわからないものでしょうか?
キューにはみ出していない状況であれば問題ないという見方もありますが・・・。

全体的に見直した結果、どうもDB部分で遅滞が発生していたようなので、my.confを見直してみました。
これでしばらく様子を見てみます。

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