Web監視でエラーが出ます。

お世話になります。
いつもこのサイトを利用させていただいております。

現在こちらのサイトを参考にzabbixを監視に利用させていただいており、安定稼動をしているのですが一点問題があります。

agentをクライアント側にインストールして監視しているものに関しては問題ないのですが、(恐らくIPアドレスを指定しているため)
Web監視を行っているものである程度の期間をおくと、
急に監視が出来ない(ホストがみつからない)状態になってしまいます。
zabbix_serverを再起動すると解消されるのですが、
こちらの方原因が分からず困っています。
同様の現象が起きている事例などありましたら、
教えていただけますでしょうか?

ログの中で気になる内容としては
Error doing curl_easy_perform [couldn't resolve host name]
というのが出ています。

環境は以下の通りです。

OS:CentOS5.4(32bit)
zabbix:1.6.8-JP
PHP:5.1.6
mysql:5.0.77
curl:7.15.5-2.1.el5_3.5

念のためcurlのバージョンアップとhostsに直接IPと名前を書き込もうとは思っていますが、
現象が再現するまで数週間かかるため、こちらの方解決策を知っている方がいらっしゃれば教えていただけ無いでしょうか?

コメント表示オプション

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

haniwaさん

ログの中で気になる内容としては
Error doing curl_easy_perform [couldn't resolve host name]
というのが出ています。

名前解決が失敗しているみたいですけど、DNS周りの設定はどうなっていますか?

ユーザー haniwa の写真

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

DNSの管理者に問い合わせても特に障害は起きておらず、
OS上からコマンドでPINGを打つと名前解決は出来ています。

ユーザー KAZ の写真

haniwaさん

不確かな情報かも知れませんが、下記URLの記事を読んでもらえますか?
[url=http://plaza.rakuten.co.jp/punpunchan2/diary/201001050000/]cURLのname lookup timed、Couldn't resolve hostエラーを解決[/url]

ユーザー haniwa の写真

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

curlのエラーと出ていたので、
以前似たような記事に出くわしたので、
同様の設定を実施してありました。

ユーザー KAZ の写真

haniwaさん

curlのエラーと出ていたので、
以前似たような記事に出くわしたので、
同様の設定を実施してありました。

/etc/sysconfig/networkにNETWORKING_IPV6=noを設定してあると言うことでしょうか?

通常は正常でもある時NGとなるには下記の事が考えられます。

1)負荷が高いので検索タイムアウトになる。
監視対象のドメイン名をnslookupするshellを作って、cronで定期実行しログにアペンド出力します。1週間ほど動かし続け問題なく名前が引けてるんだとしたらこの問題の可能性は低いかと思います。

2)ネットワーク経路が正しくない。
tracerouteコマンドが使えるなら(F/W等で弾かれないなら)実行し、ネットワーク管理者に確認すればよいかと。
※:初めっからネットワーク管理者に投げると言う手もあり。

3)Zabbixのバグ
Zabbixサーバのログと仮定してこれから追ってみますが、curlがどの様に動くか迄しらべるのは厳しいです。終えるとこまで追ってみます。

ユーザー haniwa の写真

早速の返答ありがとうございます。

教えていただいたページに書いてある下記内容を設定済みです。

ーーーーーーーーーーーーーーーーーーーーーーーーー
* /etc/sysconfig/network に NETWORKING_IPV6=no の設定を追加
* /etc/modprobe.conf に以下の設定を追加

alias ipv6 off
alias net-pf-10 off

* /sbin/chkconfig ip6tables off を実行
* マシンを再起動

ーーーーーーーーーーーーーーーーーーーーーーーーー

また、起動当初は名前解決を行えており、
一度行えなくなると、ずっと行えないままの状態になってしまいます。

念のためWeb監視の中にIPを直接URLに記載したものを追加して、
様子を見てみます。

ユーザー KAZ の写真

haniwaさん

できれば書き込まれる時もう少し細かく書いて頂けると助かります。A(^^;

また、起動当初は名前解決を行えており、
一度行えなくなると、ずっと行えないままの状態になってしまいます。

これはZabbixサーバの再起動ですか?
それともOSの再起動ですか?

エラーを出しているのはzabbix-1.6.8\src\zabbix_server\httppoller\httptest.cの430行目
process_httptest関数内でcurl_easy_perform関数を実行してエラーとなってます。
<code>
memset(&page, 0, sizeof(page));
if(CURLE_OK != (err = curl_easy_perform(easyhandle)))
{
[color=FF0000]zabbix_log(LOG_LEVEL_ERR, "Error doing curl_easy_perform [%s]",
curl_easy_strerror(err));[/color]
err_str = strdup(curl_easy_strerror(err));
lastfailedstep = httpstep.no;
}
else
{
if(httpstep.required[0]!='\0' && zbx_regexp_match(page.data,httpstep.required,NULL) == NULL)
{
zabbix_log(LOG_LEVEL_DEBUG, "Page didn't match [%s]", httpstep.required);
err_str = strdup("Page didn't match");
lastfailedstep = httpstep.no;
}
}
free(page.data);
</code>

なので、curlのソース追わないと根本原因は分からないですね…

ユーザー KAZ の写真

haniwaさん

本家サポートを覗いてきました。
↓未解決バグとして登録されてます。A(^^;
[url=https://support.zabbix.com/browse/ZBX-266][#ZBX-266]error messages missing useful info[/url]

1.6.1〜1.6.6、1.9(trunk)で発生しているようです。
※:1.9(trunk)は1.9(最新)と言う意味です。

仮対応として/etc/hostsにドメイン名とIPアドレスを書くと言うのが本家フォーラムに載ってました。

[url=http://www.zabbix.com/forum/showthread.php?p=54008]Failed on "Homepage" [1 of 1] Error: couldn't resolve host name[/url]

ユーザー haniwa の写真

やはり元々のバグだったのですね。

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

最初のコメントにも書きましたが、
念のためcurlのバージョンアップを行い、
hostsに直接IPと名前を書き込んだ上でサーバー自体の再起動を行いました。
別途Web監視の中にIPを直接URLに記載したものと名前ベースのものを追加しました。

この状態で様子を見てみます。

1ヶ月以上この設定のまま様子を見てみます。

※お忙しいところ、迅速な対応ありがとうございました。

ユーザー KAZ の写真

haniwaさん

curlのソース(haniwaさんが書いてくれたcurlバージョンのソースを入手しました。)を読んでみたのですが…

Zabbixサーバのログにエラーが出ている時刻に/var/log/messagesにもエラーが出てませんでしょうか?

ユーザー haniwa の写真

返事が遅くなり申し訳ありません。

/var/log/messages を確認したのですが、
対象の時間に
curl や error という言葉は見当たりませんでした。

ユーザー KAZ の写真

haniwaさん

/var/log/messages を確認したのですが、
対象の時間に
curl や error という言葉は見当たりませんでした。

すいません。
私の書き方がまずかったようです。

下記の様なメッセージは無かったでしょうか?
<code>
Could not resolve host
</code>

ユーザー haniwa の写真

回答が遅くなり申し訳ありません。
/var/log/messages

には「Could not resolve host」は出ていませんでした。

それと、今日また名前解決が出来なくなってしまいました。
zabbixのログには下記のように出ています。

3206:20100617:164242 Error doing curl_easy_perform [couldn't resolve host name]

hostsにIPを書いておいたホスト名のものも接続できなくなってしまいました。

接続できていたのはURLのホスト部分にIPアドレスを設定したもののみでした。

ユーザー KAZ の写真

haniwaさん

返信遅くなりました。

hostsにIPを書いておいたホスト名のものも接続できなくなってしまいました。

本家のフォーラムに書いてある回避方法でもダメみたいですね。

curl側のソース読んでいるのですが、分かり辛く…

問題が出ているのがcurlのDNS検索処理なのでIPアドレスで全部記載すれば回避はできそうです。

ユーザー haniwa の写真

KAZさん

とりあえず今のところ監視対象はIPアドレスをURLに設定してあっても大丈夫なので、この方法で行こうと思います。

リバースプロキシの裏側にいるサーバーを対象とする際にはzabbixのバージョンUPをするなど、再検討いたします。

色々と調査していただき、ありがとうございました。

ユーザー haniwa の写真

一番最初のコメントにも書いたつもりでしたが、
言葉足らずで申し訳ありません。

zabbix_server(プロセス)を再起動すると
解消されます。