Web監視 - couldn't connect server表示

はじめまして、Web監視の設定を実施しているものです。
Web監視設定方法に関して質問致します。

(前提)
・zabbixのバージョンは1.8.3です。
・WebサーバにはZabbix Agentをインストールし、疎通OK(エージェントの状態"Z")です。
・ping疎通もOKです。
・Web設定は下記です。主に固有値を除けばデフォルト値です。
 ==============================
 アプリケーション:Web
 Basic認証:なし
 更新間隔:60
 ステータス:有効
 変数:なし(空白)
 -ステップ-
  名前:toppage
  URL:監視対象URL
  タイムアウト:15
  ステータスコード:200
 ==============================
・.bash_profileにプロキシ設定をしています。
 HTTP_PROXY="http://プロキシIPアドレス:プロキシポート"
 HTTPS_PROXY="https://プロキシIPアドレス:プロキシポート"
・Zabbixサーバから外部サイトアクセス(ブラウザによる)はOKです。

(質問)
Web公開サーバが複数台あり、そのサイトにWeb監視設定を実施中です。
上記にある(前提)の設定にて、Web監視の設定をしたところ、
[監視データ]-[ウェブ]で各シナリオのステータスが"正常"と表示するものと、
"Failed on "toppage"[1 of 1] エラー:couldn't connect to server"
と表示するものがあります。
"正常"を表示するものがある事から、設定手順などは間違いがないと思います。
また、エラーメッセージの内容からserverへの疎通がとれていない事が考えられますが、
(前提)より、Zabbix Agentとpingによる疎通はOKです。
エラーとなる原因は何だと考えられますでしょうか?

どなたか対処方法の御教授をお願い致します。
よろしくお願い致します。

コメント表示オプション

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

確認させて下さい。
監視対象のWebサーバのWeb監視でのアクセスは、全てWebプロキシサーバを経由してのみアクセスできるという環境なのでしょうか?

あと、.bash_profileの設定だけでWeb監視がWebプロキシを経由してアクセスするようになっていますか?
以前私が検証した際、.bash_profileへの設定だけでは、Web監視はWebプロキシサーバを経由してアクセスできませんでした。
Webプロキシサーバのアクセスログの確認が可能であればそのログを、不可能である場合は、netstatコマンドなどを利用して直接接続しようとしていないかを確認されてみてはいかがでしょうか?

ご参考:
 http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=632&forum=6
 http://www.zabbix.jp/modules/newbb/viewtopic.php?topic_id=698&forum=6

ユーザー KTKT の写真

TNK様

さっそくの対応ありがとうございます。
下記にて返信させて頂きます。

監視対象のWebサーバのWeb監視でのアクセスは、全てWebプロキシサーバを経由してのみアクセスできるという環境なのでしょうか?

ご指摘の通り、環境はプロキシサーバを経由する必要があります。

あと、.bash_profileの設定だけでWeb監視がWebプロキシを経由してアクセスするようになっていますか?
以前私が検証した際、.bash_profileへの設定だけでは、Web監視はWebプロキシサーバを経由してアクセスできませんでした。

/etc/init.d/zabbix-serverに環境変数を記述してもWeb監視はすべてNGでした。しかし、.bash_profileに記述する事で
一部(数台)は"正常"となっているのが現状です。
.bash_profileの設定以外に設定箇所が必要であるならば、その設定条件や設定箇所をお教え願います。

Webプロキシサーバのアクセスログの確認が可能であればそのログを、不可能である場合は、netstatコマンドなどを利用して直接接続しようとしていないかを確認されてみてはいかがでしょうか?

Webプロキシサーバのアクセスログを確認したところ、NGとなっているサーバはアクセスログが見当たりませんでした。
NGとなっているサーバはプロキシ経由をしていないように思えます。
対処方法あれば、恐れ入りますがお教え願います。

ユーザー TNK の写真

/etc/init.d/zabbix-serverに環境変数を記述してもWeb監視はすべてNGでした。

具体的にどのように設定されましたか?
例えば、「HTTP_PROXY="http://プロキシIPアドレス:プロキシポート"」の前に「export」を付加されましたか?

しかし、.bash_profileに記述する事で一部(数台)は"正常"となっているのが現状です。

このように、一部のWeb監視のみProxyが有効な状態が発生する可能性としては、zabbix_serverプロセスの起動方法に問題があることが考えられます。
もう少し具体的に書くと、zabbix_server自体は複数のプロセスで機能していて、親プロセスから様々な役割の子プロセスが起動されるわけですが、その際に必要な環境変数が引き継がれなかったりしているのではないかと思われます。

Zabbix 1.8.3を利用されているとのことですが、どのようにインストールされましたか?
ZABBIX-JPが公開しているRPMを利用されましたか? それともソースからですか?
あと、Zabbixサーバを稼働させているサーバのOSには何を利用されていますか?

そして、zabbix_serverは手動で起動されませんでしたか?
手動で起動された場合は、その際のアカウントに何を利用されていましたか?

ご確認をお願いいたします。

ユーザー KTKT の写真

TNK様

ご対応ありがとうございます。
下記にて返信させて頂きます。

Zabbix 1.8.3を利用されているとのことですが、どのようにインストールされましたか?
ZABBIX-JPが公開しているRPMを利用されましたか? それともソースからですか?

インストール方法はrpmにて適用致しました。

あと、Zabbixサーバを稼働させているサーバのOSには何を利用されていますか?

CentOS5.5でzabbixのみのサーバとなっており、
その他のサービスは起動していません。

そして、zabbix_serverは手動で起動されませんでしたか?

手動とはどういう意味でしょうか?
"/etc/init.d/zabbix-server start"のような事でしょうか?
起動にはchkconfig:2〜4 on により自動起動で設定しています。
※何度か"/etc/init.d/zabbix-server restart"は実施したと思います。

手動で起動された場合は、その際のアカウントに何を利用されていましたか?

ログインするのは主にrootユーザです。
zabbixのpidユーザを調べたところ下記でした。
zabbix:x:501:501::zabbix:/sbin/nologinです。

ご確認をお願いいたします。

ユーザー TNK の写真

CentOS 5.5 + Zabbix 1.8.3-1.JPなら問題なくできるはずなのですが.....。

先ほど頂いた回答にはなかったのですが、/etc/init.d/zabbix-serverへの環境変数設定の際には、exportを付加されたのかを再度確認させてください。

あと、何らかの情報がログ(Zabbix関連のログだけではなくOSのログも)に出力されていませんか?

ユーザー KTKT の写真

TNK様

ご対応ありがとうございます。
下記にて返信させて頂きます。

先ほど頂いた回答にはなかったのですが、/etc/init.d/zabbix-serverへの環境変数設定の際には、exportを付加されたのかを再度確認させてください

exportは下記のように追加しましたが、すべて"couldn't connect to server"でした。
============================================================================

#!/bin/bash
#
# chkconfig: - 85 15
# description: zabbix_server
# probe: false
[color=990000]
# add for http proxy
HTTP_PROXY="http://プロキシIP:プロキシポート"
export HTTP_PROXY
HTTPS_PROXY="https://プロキシIP:プロキシポート"
export HTTPS_PROXY
[/color]
# Source function library.
. /etc/rc.d/init.d/functions

# Source networking configuration.
. /etc/sysconfig/network

# Check that networking is up. If you are running without a network, comment this out.
[ "${NETWORKING}" = "no" ] && exit 0

RETVAL=0
progdir="/usr/local/sbin/"
prog="zabbix_server"

start() {
...
....
.....

============================================================================

.bash_profileは下記で、一部(数台はOK)は"正常"で、
その他は"couldn't connect to server"でした。
============================================================================
# .bash_profile

# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi

# User specific environment and startup programs

PATH=$PATH:$HOME/bin

export PATH
unset USERNAME
[color=990000]
# add for http proxy
HTTP_PROXY="http://プロキシIP:プロキシポート"
export HTTP_PROXY
HTTPS_PROXY="https://プロキシIP:プロキシポート"
export HTTPS_PROXY
[/color]
============================================================================

あと、何らかの情報がログ(Zabbix関連のログだけではなくOSのログも)に出力されていませんか?

zabbixサーバ
/var/log/messagesには特になしです。
/var/log/zabbix/zabbix_agentd.logには特になしです。
/var/log/zabbix/zabbix_server.logで、NGになるシナリオを有効にすると下記が表示します。
"Error doing curl_easy_perform [couldn't connect to server]"

プロキシサーバ
/var/log/squid/access.logでは、NGになるサイトのアクセスが一切なしです。

その他確認するべきlogがあればお教え願います。

質問ですが、
認識ではWeb監視は、zabbixサーバ⇒プロキシ⇒外部URL、と動作すると認識しておりますが、
エラー時に表示される"couldn't connect to server"はどのサーバへ接続できないと言っているのでしょうか?
?ネットワーク内経由のWebサーバでしょうか?
?外部サイト経由のWebサーバでしょうか?

?はWebサーバにzabbix-agentをインストールし、10050,10051によるリソース監視を実施しています。
?だとして、その他ネットワーク内経由環境で開けるべきポートなどはあるのでしょうか?

ご確認をお願いいたします。

ユーザー TNK の写真

質問ですが、
認識ではWeb監視は、zabbixサーバ⇒プロキシ⇒外部URL、と動作すると認識しておりますが、
エラー時に表示される"couldn't connect to server"はどのサーバへ接続できないと言っているのでしょうか?
?ネットワーク内経由のWebサーバでしょうか?
?外部サイト経由のWebサーバでしょうか?

?はWebサーバにzabbix-agentをインストールし、10050,10051によるリソース監視を実施しています。
?だとして、その他ネットワーク内経由環境で開けるべきポートなどはあるのでしょうか?

今までにご提供いただいている範囲では、Web監視でcURLのライブラリを利用したアクセスを実行する際に適切に環境変数に設定されていれば、その環境変数を参照してWebのProxyサーバを経由してWeb監視のためのアクセスが実行されるのですが、何らかの原因で一部のプロセスに環境変数が適切に設定されていない状態が発生し、WebのProxyサーバ経由ではなく、直接Web監視のためのアクセスを行おうと処理されている状態であると予想しています。

つまり、本来であればWebのProxyサーバを経由しなければアクセスできないにもかかわらず、直接zabbix_serverから外部URLにアクセスしようとして「"couldn't connect to server"」となっているのではないでしょうか。
環境変数を適切に渡してあげることさえ実現できれば、別途ポートを開ける必要は無いと思います。

追加で確認させてください。
.bash_profileは、どのユーザのホームディレクトリのものでしょうか?
rootユーザですか?
zabbixユーザですか?
例えば、実行されているプロセスのユーザによって、環境変数が設定されている場合と設定されていないような場合が発生する状況があるのではないかと想像してみました。
psコマンドを利用して、複数のzabbix_serverプロセスそれぞれが、どのユーザで起動されているかも確認されてみてはいかがでしょうか。

最後に、/etc/init.d/zabbix-serverの内容を拝見すると、ZABBIX-JPが公開している1.8.3のRPMを利用されているのではなさそうです。

どこで公開されているRPMを利用されたかお教えいただけませんか?
週末、時間が取れれば再現確認してみようと思います。
よろしくお願いいたします。

ユーザー KTKT の写真

TNK様

ご対応ありがとうございます。
返信遅れまして申しわけありません、下記にて返信させて頂きます。

追加で確認させてください。
.bash_profileは、どのユーザのホームディレクトリのものでしょうか?
rootユーザですか?
zabbixユーザですか?
例えば、実行されているプロセスのユーザによって、環境変数が設定されている場合と設定されていないような場合が発生する状況があるのではないかと想像してみました。
psコマンドを利用して、複数のzabbix_serverプロセスそれぞれが、どのユーザで起動されているかも確認されてみてはいかがでしょうか。

.bash_profilはroot(/root)ユーザのホームディレクトリです。
psで見た限り、すべてzabbixユーザです。

最後に、/etc/init.d/zabbix-serverの内容を拝見すると、ZABBIX-JPが公開している1.8.3のRPMを利用されているのではなさそうです。

どこで公開されているRPMを利用されたかお教えいただけませんか?

申し訳ありません、確認したところrpmではなく下記ソースファイルからインストール致しました。
zabbix-1.8.3.tar.gz

rpmとソースでは/etc/init.d/zabbix-serverの中身は異なるのでしょうか?

ご確認をお願いいたします。

ユーザー TNK の写真

.bash_profilはroot(/root)ユーザのホームディレクトリです。
psで見た限り、すべてzabbixユーザです。

そうであるならば、zabbixユーザのホームディレクトリの.bash_profileにも環境変数の設定を追加することで対応できるかもしれません。

rpmとソースでは/etc/init.d/zabbix-serverの中身は異なるのでしょうか?

ソースからの導入の場合、自動的に/etc/init.d/zabbix-serverのファイルは作成されません。

恐らく、ソースのtarボールを展開した、misc/init.d/redhat/8.0ディレクトリ以下にあったファイルを参考に作成されたのだと思われますが、これとZABBIX-JPで提供しているRPMを利用した際にインストールされる/etc/init.d/zabbix-serverファイルとは内容が異なります。
zabbix_serverのファイルパスの違いだけではなく、zabbix_serverの起動方法も異なっているようです。

整理すると、KTKTさんの環境にある起動スクリプトを利用される場合は、rootユーザとzabbixユーザの両方のホームディレクトリにある.bash_profileにHTTP_PROXYなどの環境変数を設定することで対応できるかもしれません。

この対応でも駄目であった場合は、以前、ZABBIX-JPが公開しているRPMでインストールした際にインストールされる/etc/init.d/zabbix-serverファイルの頭の方に、HTTP_PROXYなどの環境変数をexportで設定することで対応できたので、その方法を利用することを検討して頂ければと思います。

ユーザー KTKT の写真

TNK様

ご対応ありがとうございます。
返信遅れまして申しわけありません、下記にて返信させて頂きます。

整理すると、KTKTさんの環境にある起動スクリプトを利用される場合は、rootユーザとzabbixユーザの両方のホームディレクトリにある.bash_profileにHTTP_PROXYなどの環境変数を設定することで対応できるかもしれません。

設定してみましたが、変化ありませんでした。

この対応でも駄目であった場合は、以前、ZABBIX-JPが公開しているRPMでインストールした際にインストールされる/etc/init.d/zabbix-serverファイルの頭の方に、HTTP_PROXYなどの環境変数をexportで設定することで対応できたので、その方法を利用することを検討して頂ければと思います。

rpmによる再インストールも視野にいれておりますが、まずrpm版/etc/init.d/zabbix-serverファイルと、
現在運用中のソース版/etc/init.d/zabbix-serverファイルを差し替えてみました。
rpm版/etc/init.d/zabbix-serverファイルの一部は修正しました。
結果は、今までソース版/etc/init.d/zabbix-serverファイルに環境変数を書き込むと
環境変数の読み込みはありませんでしたが、rpm版/etc/init.d/zabbix-serverファイルは環境変数の読み込みがOKでした。
しかし、Web監視においては現象は変わらずのままでした。

上記の結果から、環境変数の読み込み(プロキシ設定)に関してはOKであるように思えますがどうでしょうか?
もう一度確認させて下さい。
Web監視はhttpプロキシを利用し外部URLにアクセスできればよいですか?
URLを公開しているサーバは、zabbix agent(10050,10051ポート)で認識できていればOKですか?
Web監視の必須curlはcurl-7.15.5-9.el5,curl-devel-7.15.5-9.el5です。別途その他必要なものがありますでしょうか?
Web監視で11コのWebサイトを登録しています。内6コは正常、5コはエラーです。最大登録数などはありますでしょうか?

ご確認をお願い致します。

ユーザー TNK の写真

もう一度確認させて下さい。
Web監視はhttpプロキシを利用し外部URLにアクセスできればよいですか?

HTTPプロキシ経由で監視する対象のサーバとそのURLにアクセスすることができていれば監視できます。
ただし、監視する対象のサーバに接続制限の設定がされていると監視できない場合があります。
例えば、監視する対象のサーバが、特定のIPアドレスからの接続しか許可していない場合が考えられます。

URLを公開しているサーバは、zabbix agent(10050,10051ポート)で認識できていればOKですか?

zabbix agent(10050,10051ポート)で認識できている必要はありません。
ホストとして登録されていなくても、Web監視の設定だけでWeb監視を行うことができます。

Web監視の必須curlはcurl-7.15.5-9.el5,curl-devel-7.15.5-9.el5です。別途その他必要なものがありますでしょうか?

私の環境では、curlだけでcurl-develがインストールされていなくてもWeb監視できています。
ソースからコンパイルする場合には、curl-develが必要だったと思います。
それ以外にも必要なものはありますが、コンパイル時のログや起動時のログにエラーや警告が出力されなかったのであれば、Web監視に関しては問題ないはずです。

Web監視で11コのWebサイトを登録しています。内6コは正常、5コはエラーです。最大登録数などはありますでしょうか?

明確な最大登録数の制限までは把握しておりませんが、11個程度では全く問題ありません。

エラーになっているWeb監視のステップ内の各URLに対して、Web監視時に経由させるHTTPプロキシ経由でブラウザなどを利用してアクセスできるか再度ご確認下さい。
ブラウザが無い場合は、以下のようにcurlコマンドを利用してアクセスできるか確認してみてください。

例:HTTPプロキシサーバのIPアドレスが192.168.1.1でポート番号3128を利用していて「http://www.zabbix.jp/」にアクセスする場合
<code>
curl -x 192.168.1.1:3128 http://www.zabbix.jp/
</code>

例:かつ応答ヘッダだけ見る場合
<code>
curl -x 192.168.1.1:3128 -I http://www.zabbix.jp/
</code>
※環境変数HTTP_PROXYやHTTPS_PROXYが設定されている場合は、引数の-xとHTTPプロキシのIPやポートの指定は不要です。
<code>
curl -I http://www.zabbix.jp/
</code>

確認を行うURLに関しては入力ミスも可能性としては残っているので、極力、Web監視設定に入力したURLをそのままコピー&ペーストして確認してみて下さい。

ユーザー KTKT の写真

TNK様

ご対応ありがとうございます。
下記にて返信させて頂きます。

curl -x 192.168.1.1:3128 http://www.zabbix.jp/

上記を今回のプロキシIP+ポートと対象Webサイトに当てはめて実施してみました。
結果は各サーバのソースが表示しました。

curl -I http://www.zabbix.jp/

上記を今回の対象Webサイトに当てはめて実施してみました。
結果はすべて"curl:(7) coudn't connect to host"が表示しました。

ご確認をお願いいたします

ユーザー TNK の写真

上記を今回のプロキシIP+ポートと対象Webサイトに当てはめて実施してみました。
結果は各サーバのソースが表示しました。

本当に対象WebサイトのHTMLが返却されていますか?
HTTPプロキシサーバのエラー画面のHTMLではありませんか?

curl -Iで接続できないというエラーになっているのであれば、対象Webサイトにはアクセスできていないはずだと思われますので、再度ご確認頂けませんでしょうか?

ユーザー KTKT の写真

TNK様

ご対応ありがとうございます。
下記にて返信させて頂きます。

本当に対象WebサイトのHTMLが返却されていますか?
HTTPプロキシサーバのエラー画面のHTMLではありませんか?

curl -Iで接続できないというエラーになっているのであれば、対象Webサイトにはアクセスできていないはずだと思われますので、再度ご確認頂けませんでしょうか?

対象WebサイトのHTMLが表示します。
エラー画面ではありませんでした。

curl -Iで"curl:(7) coudn't connect to host"が表示するのは、
Web監視でNGになるWebサイトです。
Web監視でOKになるWebサイトは"HTTP/1.0 200 ..."が表示します。

ご確認をお願いいたします

ユーザー TNK の写真

curlで-Iを付加しないときに正しく対象のWebサーバのHTMLが取得できるのに、-Iを付加したときに"curl:(7) couldn't connect to host"となるような環境は再現できていません。
# HTTPプロキシサーバ上のキャッシュからHTMLが返却されているのかも?

あと考えられるとしたら、HTTPプロキシサーバから監視対象のWebサイトへの接続ができない状態であるとしか考えられません。

HTTPプロキシサーバを管理されているのは別の方かもしれませんが、HTTPプロキシサーバから監視対象のWebサイトにアクセス可能か確認して頂いてみてください。
ZabbixサーバからHTTPプロキシを経由して対象となるWebサーバまでの経路で、Firewall、負荷分散、プロキシのアクセス制限等の設定によって問題が発生している可能性もあると思いますので、その周辺も再度ご確認下さい。

ユーザー KTKT の写真

ご対応ありがとうございます。
大変返事の方遅くなりまして申し訳ありません。
調査結果を下記にて返信させて頂きます。

あと考えられるとしたら、HTTPプロキシサーバから監視対象のWebサイトへの接続ができない状態であるとしか考えられません。

プロキシからアクセス可能で、その他設定も問題なしでした。

ZabbixサーバからHTTPプロキシを経由して対象となるWebサーバまでの経路で、Firewall、負荷分散、プロキシのアクセス制限等の設定によって問題が発生している可能性もあると思いますので、その周辺も再度ご確認下さい。

その他の機器なども特に問題なしでした。

"curl -v -l http://Webサイト"を実施したところ、下記が表示しました。
============================================
*About to connect() to "Webサイト" port 80
* Trying "WebサイトIP" 接続が拒否されました
*coudn't connect to host
*Closing connection #0
curl: (7) coudn't connect to host
============================================
環境変数にプロキシIP,ポートを指定しているにもかかわらず、
"port 80"が確認できます。
httpsは環境変数の設定通り、"port 80"のところが"port プロキシポート"になっております。
上記を踏まえ、改善方法があればお教え願えませんでしょうか?
よろしくお願い致します。

ご確認をお願いいたします。

ユーザー KTKT の写真

解決致しました。

サーバ設定値が下記でした。
===========================================================
.bash_profileにプロキシ設定をしています。
 HTTP_PROXY="http://プロキシIPアドレス:プロキシポート"
 HTTPS_PROXY="https://プロキシIPアドレス:プロキシポート"
===========================================================

原因はcurlモジュールの仕様で、プロキシ設定を読み込む為には、
HTTPのみ小文字である必要があるとの事です。
よって上記設定値を下記のようにすることによって、
正常動作を確認致しました。
===========================================================
.bash_profileにプロキシ設定をしています。
 http_proxy="http://プロキシIPアドレス:プロキシポート"
 HTTPS_PROXY="https://プロキシIPアドレス:プロキシポート"
===========================================================

以上、これまでご協力頂きましてありがとうございました。