DebugLevelを4にして「Zabbix trapper processes more than 75% busy」出たタイミングでログを確認したところ、logキーで取得したアイテムがずらっと出てました。
ログが大量に出過ぎていて載せられませんが、出ていたのはほぼすべてlogキーで取得した値です。
一度コネクトするとgetpeername関数で接続している相手ソケットの名前を取得する事ができます。
Cannot get socket IP address〜のメッセージはgetpeername関数がエラーに成った場合でていて、
エラー[107] Transport endpoint is not connectedは、「ソケットが接続していない。」つまり切断されたことを意味しています。
KAZ - 投稿数: 1085
Ryo Sugisakiさん
SNMP監視してますか?
Ryo Sugisaki - 投稿数: 139
KAZさん
SNMP監視しております。
TeraStationやスマートスイッチの監視で使っているので。
KAZ - 投稿数: 1085
失礼しました。
使用量上がってるプロセスZabbixトラッパーですよね。
zabbix_sender絡みの処理が増えてないか確認して下さい。
Ryo Sugisaki - 投稿数: 139
>zabbix_sender絡みの処理が増えてないか確認して下さい。
無知ですみません。zabbix_sender絡みの処理はどうやって確認すれば良いでしょうか?
KAZ - 投稿数: 1085
Ryo Sugisakiさん
アイテムでZABBIXトラッパーの数が増えたりしていると、zabbix_senderからの収集増えているかなと…
うーん、Zabbixサーバのログですかね?
通常のログレベルでは出てこないと思うのででバックログにしないとわからないかもしれません。
すいません。
Ryo Sugisaki - 投稿数: 139
KAZさん
/etc/zabbix/zabbix_server.conf の DebugLevel のことでしょうか?
DebugLevelは3でいいですか?
KAZ - 投稿数: 1085
Ryo Sugisakiさん
DebugLevelです。
4にしてください。
Ryo Sugisaki - 投稿数: 139
KAZさん
DebugLevelを4にしました。
少し様子を見て、ログ内容をお知らせします。
よろしくお願いします。
Ryo Sugisaki - 投稿数: 139
KAZさん
DebugLevelを4にして「Zabbix trapper processes more than 75% busy」出たタイミングでログを確認したところ、logキーで取得したアイテムがずらっと出てました。
ログが大量に出過ぎていて載せられませんが、出ていたのはほぼすべてlogキーで取得した値です。
KAZ - 投稿数: 1085
Zabbixサーバ動いているところで「ps -ef|grep zabbix_server」を実行すると以下の様な情報が出ます。 trapper #1〜#5がトラッパーのプロセスです。
2行目の値がPIDです。
trapper #1を調べるときは下記のようにPIDでログを絞ると量が減ります。
因みに、grepする時、PIDの前の半角空白と後ろの":"重要です。A(^^;
Ryo Sugisaki - 投稿数: 139
KAZさん
同じようにやってみましたところ、以下のメッセージが多く見受けられました。
Cannot get socket IP address: [107] Transport endpoint is not connected
1989:20141119:025934.495 Cannot get socket IP address: [107] Transport
簡単に訳すとソケットIPアドレスを取得できませんでした。というような感じでしょうが、これが原因なのでしょうか?
あと、これを改善するにはどうすればよいのでしょうか?
KAZ - 投稿数: 1085
Ryo Sugisakiさん
うーん、ソケットが足りなくなっているかも…
↓これをじっこうするとTIME_WAITしている数が取れます。
]# netstat -anp|grep TIME_WAIT|grep -v grep|wc -l
これがいっぱいあるようなら(1万とか)ソケット不足だと思われます。
Ryo Sugisaki - 投稿数: 139
KAZさん
183でした。そんなに多くない感じです。
# netstat -anp | grep TIME_WAIT | grep -v grep | wc -l
183
KAZ - 投稿数: 1085
Ryo Sugisakiさん
3時ぐらいからエラーが出てますね。
↓こんな感じのシェル作ってcronで3時~4時を10分間隔でログとることできますか?
#!/bin/sh
echo "-----start-----" >> /tmp/netstat.log
netstat -anp | grep TIME_WAIT | grep -v grep >> /tmp/netstat.log
echo "-----end-----" >> /tmp/netstat.log
シェルは試してないので、すいませんが動くか試していただけますか?
KAZ - 投稿数: 1085
Cannot get socket IP address
これはZabbixのエラーメッセージでした。
zbx_tcp_recv_ext関数で該当のエラーを出力しているようです。2014-11-21 1043get_ip_by_socket関数で該当のエラーを出力しているようです。
[107] Transport endpoint is not connected
これはOSが返却しているエラーのようです。
もう少々追ってみます。
エラー的には「ENOTCONN ソケットが接続していない。」です。 2014-11-21 Add
ソケットが足りなくなって接続できなくなっているような感じですね…
夜間の処理でソケットを消費するような処理がないでしょうか?
Ryo Sugisaki - 投稿数: 139
KAZさん
シェル作ってcron設定しておきました。
シェルが正常に動くことも確認済みです。
夜間も昼間も同じように監視しており、夜間に特別な処理を走らせているということはありません。
とりあえず、ログが取れましたら再度ご連絡します。
いろいろと調べていただき、誠にありがとうございます。
Ryo Sugisaki - 投稿数: 139
KAZさん
遅くなり申し訳ありません。
ログを添付します。
よろしくお願い致します。
KAZ - 投稿数: 1085
Ryo Sugisakiさん
TIME_WAIT多くないですね…
で、socketエラーは出る…
接続している方が多い?
うーん、TIME_WAITに絞らないログを取得お願いできますか?
#!/bin/sh
echo "-----start-----" >> /tmp/netstat.log
netstat -anp >> /tmp/netstat.log
echo "-----end-----" >> /tmp/netstat.log
OSって、RedHat/CentOS系ですか?
CentOSだとデフォルトで32768から61000の28232ポート使えます。(確か64bitの話で32bitはどうだったか不明です。)
これ以上だと、上限を上げてやるしか無いです。
Ryo Sugisaki - 投稿数: 139
KAZさん
お返事が遅くなり申し訳ございません。
OSはCentOS系です。
TIME_WAITに絞らないログを添付します。
よろしくお願いします。
KAZ - 投稿数: 1085
Ryo Sugisakiさん
ログ拝見しました。
TIME_WAITになっているの基本的にZabbixの接続ですね…
もしかするとこれが原因かも…
一度コネクトするとgetpeername関数で接続している相手ソケットの名前を取得する事ができます。
Cannot get socket IP address〜のメッセージはgetpeername関数がエラーに成った場合でていて、
エラー[107] Transport endpoint is not connectedは、「ソケットが接続していない。」つまり切断されたことを意味しています。
TIME_WAITですが…
サーバがTCPセッションを受け付けcloseすると、TIME_WAIT状態になりますが、
TCPクライアント側で先にcloseを実行すると、サーバ側ではTIME_WAITは発生しません。
つまり、zabbix_senderがZabbixサーバ接続して来たが、何らかの要因でZabbixサーバがソケットクローズしてしまった可能性が考えられます。
考えられるのはタイムアウトでしょうか…
<<上記より考えられる対策???>>
★★★ Zabbixサーバの設定変更 ★★★
/etc/zabbix/zabbix_server.confの下記を確認して下さい。
■Timeout
デフォルトがTimeout=3です。
デフォルトの場合、MaxのTimeout=30に上げてください。
これで落ち着いてくれると良いのですが…
■StartTrappers
デフォルトがStartTrappers=5です。
TNKさんの指摘でStartTrappersは15に上げたということで良いでしょうか?
StartTrappers=15ならとりあえずは様子見でそのままにしてください。
★★★ MySQLの設定を変更 ★★★
/etc/my.cnfの下記を変更してください。
■innodb_buffer_pool_size
実メモリの80%位割り当てると書いてあることいっぱいありますが、
Zabbixの場合WebもZabbixも同じサーバで動くこと有りますので、
swapが発生しない程度にいっぱいあててください。
※:メモリ使用量とかはvmstatで空きを確認してみてください。
■innodb_log_file_size
とりあえず、innodb_buffer_pool_size ÷ 2の値で良いかと。
参考URL
http://blog.flatlabs.net/20100727_212649/
http://dsas.blog.klab.org/archives/50860867.html
Ryo Sugisaki - 投稿数: 139
KAZさん
>TNKさんの指摘でStartTrappersは15に上げたということで良いでしょうか?
現在は20になっています。
innodb_buffer_pool_sizeとinnodb_log_file_sizeを変更しますが、これはmysqldをリスタートすれば適用されますでしょうか?
それとも、DBをdropしてcreateし、インポートしないと適用されないでしょうか?
KAZ - 投稿数: 1085
Ryo Sugisakiんさん
> 現在は20になっています。
了解です。
Timeoutはどうなってましたか?
> innodb_buffer_pool_sizeとinnodb_log_file_sizeを変更しますが、これはmysqldをリスタートすれば適用されますでしょうか?
> それとも、DBをdropしてcreateし、インポートしないと適用されないでしょうか?
MySQLを止めて、/etc/my.cnf直して、MySQL起動してください。
TNK - 投稿数: 4769
innodb_log_file_sizeを変更する場合は、my.cnfの書き換えとmysqld
の再起動だけではダメです。
ログファイルの削除が必要になります。
きちんと手順を確認してから実行してください。
とりあえず、innodb_buffer_pool_sizeだけ変更されてはいかがでしょうか?
現時点のサーバの負荷状況の情報を提供頂けていないので以上です。
KAZ - 投稿数: 1085
TNKさん
きちんと手順を確認してから実行してください。
フォロー有難うございます。
↓これいりますね。
rm /var/lib/mysql/ib_logfile*
参考URL
http://masasuzu.hatenadiary.jp/entry/2014/06/13/innodb_log_file_size%E3%...
Ryo Sugisaki - 投稿数: 139
KAZさん
返信遅くなってしまい申し訳ないです。
Timeoutは30に変更済みです。
Mysqlの設定も変更してみました。
これで少し様子を見てみます。
結果また連絡します。
Ryo Sugisaki - 投稿数: 139
KAZさん
設定を変更してから頻発していたtrapperのエラーがほぼ出なくなりました。
長い間、いろいろと相談に乗って頂き有難う御座いました。
助かりました。
TNK - 投稿数: 4769
以下のブログにもありますが、Trapperプロセスの役割は、
・Zabbixエージェントからのアクティブ通知
・zabbix_senderコマンドを利用した値通知
・Zabbixプロキシ経由でのアクティブ通知
などで利用されます。
http://blog.zabbix.com/monitoring-how-busy-zabbix-processes-are/457/
上記のような外部からの値通知のアイテムが多くなってきているの
ではないでしょうか?
そうであるならば、zabbix_server.conf内のStartTrappersの値を
ご確認ください。
デフォルトであれば5であったと思いますので、上記のようなアイ
テムや頻度など、監視されている環境の規模にもよりますが、少し
だけ数値を大きくしてみてください。
なお、プロセス数の変更を反映するには、Zabbixサーバプロセスの
再起動が必要となりますのでご注意ください。
Ryo Sugisaki - 投稿数: 139
TNKさん
>上記のような外部からの値通知のアイテムが多くなってきているのではないでしょうか?
ご推察の通り、外部からの値通知アイテムが多くなっては来ております。
>そうであるならば、zabbix_server.conf内のStartTrappersの値をご確認ください。
>デフォルトであれば5であったと思いますので、上記のようなアイテムや頻度など、監視されている環境の規模にもよりますが、少しだけ数値を大きくしてみてください。
デフォルトの5から15に変更しました。
少し様子を見てみます。
Ryo Sugisaki - 投稿数: 139
TNKさん
StartTrappersの値を増やしましたが、未だに改善しません。
頻繁にエラーが出てきます。
他に何か方法はありませんでしょうか?
また、StartTrappersの値を変更したことで何が変わるのでしょうか?監視間隔ですか?
TNK - 投稿数: 4769
今までいただいている情報では、一番有効な方法です。
5から15に増やした程度では余裕をもって処理できる以上の情報数
がZabbixサーバに送られてきているのかもしれません。
プロセス数を増やしても改善しないのであれば、Zabbixサーバ及び
Zabbixサーバが利用しているデータベースの性能の改善が必要かも
しれません。
Zabbixサーバやデータベースを別のサーバで稼働させているのであ
れば、その負荷状況を確認してください。
ご紹介したブログは読んでいただけましたか?
StartTrappersの数を増加させれば、先に書かせて頂いたような外
部サーバから値を受け取る際に処理を行うtrapperプロセスのプロ
セス数が増加し、同時に処理できる個数が増えます。
監視間隔を変更するものではありません。
Ryo Sugisaki - 投稿数: 139
TNKさん
>プロセス数を増やしても改善しないのであれば、Zabbixサーバ及びZabbixサーバが利用しているデータベースの性能の改善が必要かもしれません。
了解しました。
サーバ自体の性能を少し上げてみます。
>StartTrappersの数を増加させれば、先に書かせて頂いたような外部サーバから値を受け取る際に処理を行うtrapperプロセスのプロセス数が増加し、同時に処理できる個数が増えます。
>
>監視間隔を変更するものではありません。
理解できました。
有難う御座います。
TNK - 投稿数: 4769
サーバ自体の性能を上げる前に、本当にサーバの性能がボトルネッ
クになっているのかどうかを確認してください。
というのも、現時点の状況では、そもそもサーバ自体の性能の問題
かどうかも切り分けできていないのではないでしょうか?
性能を上げるにも、CPUのコア数追加なのかメモリのサイズ追加な
のか、それともハードディスクのI/O性能の向上なのか、原因がわ
からなければ、性能を上げたつもりでもまったく効果が得られない
ことも考えられます。
それ以前に、Zabbixで利用されているデータベースのチューニング
も行われましたか?
つまり、Trapperプロセスを増やしても改善しないのであれば、サ
ーバの性能がボトルネックになっているのかを確認してください。
そして、データベースのチューニングを行われていないのであれば、
再度、サーバの状態を確認してチューニングを行ってください。
それでも改善しない場合は、サーバの負荷状況(特に、CPU関連、メ
モリ、ハードディスクI/O)を再度ご確認頂き、その負荷状況を改善
するために効果的なサーバ自体の性能向上方法をご検討ください。
Ryo Sugisaki - 投稿数: 139
TNKさん
>それ以前に、Zabbixで利用されているデータベースのチューニングも行われましたか?
無知ですみませんが、データベースのチューニングとは以下URLのサイトに書かれていることでしょうか?
それとも別のことでしょうか?
もし別のことでしたら教えて頂けると助かります。
http://zabbix.robata.org/tips-dbsize-check-01.html
TNK - 投稿数: 4769
紹介されていたURLにあるDBのファイルサイズの件だけではありま
せん。
Zabbix用のデータベースを稼働させているサーバ上のCPUやメモリ
サイズを元に、そのサーバ上で稼働させる他のプログラムなども考
慮して、メモリの配分やデータベースのログのサイズなどの調整を
行うことです。
もし、データベースに関してデフォルトの設定のみで上記のような
チューニングを行っていらっしゃらないのであれば、サーバ自体に
メモリを何十GB搭載していたとしてもデータベース自体はデフォル
トで設定されているサイズでしか機能しませんのでご注意ください。
これ以上は、利用されている環境に関する情報提供を頂けていない
ので回答できません。
Ryo Sugisaki - 投稿数: 139
TNKさん
/etc/my.cnf のことでしょうか?
おっしゃる通り、特にチューニングは行っていません。
innodb_buffer_pool_size や innodb_log_file_size を変えただけでも少しは変わるものでしょうか?
-------
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
default-character-set=utf8
innodb_file_per_table
innodb_buffer_pool_size=512M
innodb_log_file_size=128M
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
character-set-server=utf8
skip-character-set-client-handshake
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
TNK - 投稿数: 4769
変わります。
ただ、これまでの調査状況の結果を頂けていませんし、
環境に関する情報も頂けていないのでこれ以上の回答
はできません。
zinten - 投稿数: 69
Ryo Sugisakiさん
ZabbixTrapperさんは上記以外にもちょっとだけ仕事をしてます。
その中のひとつでZabbixに登録されていないホストから
エージェントの通信があるとDNSを参照しにいく動きをします。
このとき、OSのDNS参照先の設定が間違っている場合、
DNSの設定を変更してからZabbixの再起動を行っていない場合に処理が待たされます。
DNS周りの設定等を確認してみてもらえませんか?
以下のコマンドでどのくらいかかるか計測してみてください。
# nslookup <存在しないIP>
Ryo Sugisaki - 投稿数: 139
zintenさん
>以下のコマンドでどのくらいかかるか計測してみてください。
>
># nslookup <存在しないIP>
1秒もかからないくらいです。
zinten - 投稿数: 69
Ryo Sugisaki さん
>1秒もかからないくらいです。
なるほど。。。
前触れもなく急激に上がっているのでもしやと思ったのですが外れましたか。
お役に立てずすいません。
Ryo Sugisaki - 投稿数: 139
zintenさん
お役に立てずとのことですが、そんなことはありません。
コメント有難う御座いました。
TNK - 投稿数: 4769
インデントが深くなりすぎて見にくくなってきたので、こちらに書
かせて頂きます。
KAZさんからの確認依頼でポートの状態の情報をご提供頂きました
が、それを拝見する限り、数も少ないのでポートの不足やファイル
ディスクリプタの不足でもないと思われます。
やはり、Trapperプロセスのbusy率を75%以下にするには、処理しな
ければならない量に対して、StartTrappersの値がまだ足りないので
しょう。
11/12に5から15、その後20に増やされたようですが、もっと増やし
てみてください。
ただし、Zabbixサーバ自体のOSの負荷が高い状況であるならば、そ
ちらも対応する必要がでてきます。
サーバの負荷状況に関する情報はいまだご提供頂けていないので、
何をどうすれば良いかは判断することができません。
情報をご提供いただけないのであれば、CPUなのか、メモリなのか、
ディスクなのか、様々な要因が考えられますので、せっかくZabbix
を利用されているのであれば、それらのサーバの負荷状況を確認し
て、ご自身で調査してご対応頂ければと思います。
もしくは、タイプが「Zabbixエージェント(アクティブ)」のアイテ
ム、zabbix_senderで送り込むアイテム、ログ監視など、Trapperを
利用すると思われるアイテムの処理しなければならない量を削減
(個数を減らすか、監視間隔を伸ばす)してみるのも対応方法の1つ
かもしれません。