ロードバランサー越しのWeb監視について

お世話になります。神山と申します。

標題の件ですが、複数台のWWWサーバでバーチャルホストを立て、ロードバランサーを介して外部へ公開しています。
概略を添付ファイルに示します(実際にはサーバ台数もバーチャルホスト数ももっと多いです)。

このような環境でweb監視を行う方法はありますでしょうか? host Aとhost Bそれぞれに対してwww.abc.comとwww.xyz.comに対する監視シナリオを作ってみたのですが、片方を落としてみてもロードバランサーによりもう片方のサーバへ転送が行われ、落ちているサーバを検出できません。
色々と調べているうちに、ZABBIX FEATURE REQUESTSのZBXNEXT-20内にweb scenarios should be able to be template membersというものを見つけまして、実はまだ実装されていないのかなあとか思い始めております。

以上、何か情報があればお知らせいただきたく存じます。

ちなみに、現在作成しているシナリオですが以下のようなものとなります。

  • アプリケーション
    Virtualhost
  • 名前
    www.abc.com
  • Basic認証
    なし
  • 更新間隔
    60秒
  • エージェント
    任意
  • ステータス
    有効
  • 変数
    なし
  • ステップ
    • 名前
      top page
    • タイムアウト
      15秒
    • URL
      http://www.abc.com/
    • 要求文字列
      なし
    • ステータス
      200
    • ソート
      なし

コメント表示オプション

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

ロードバランサ経由での自動振り分けされるアクセスしか無いので
あれば、Web監視の機能ではロードバランサ配下のWebサーバを個別
に指定してアクセス可能かを確認することができません。

つまり、外部からのWebアクセスだけでは、内部のWebサーバで障害
が発生しても、どのWebサーバで障害が発生しているかを特定して
検知することができません。

それぞれのWebサーバの状態を把握するためには、それぞれのWeb
サーバに対して、何らかの方法で直接アクセスして確認する方法
を用意することが必要だと思います。

例えば、内部のネットワーク上に監視用のサーバを用意して、その
監視用サーバから各Webサーバに直接アクセスできるような環境を
用意する方法が考えられます。
この監視用サーバからIPアドレスを指定してのHTTPアクセスであれ
ば確認はできると思います。
しかし、各バーチャルホスト名でのアクセスも確認するとなると、
ホスト名とIPアドレスとの対応をチェックするたびに切り替えなけ
ればならなくなると思われますので、実現は難しいかもしれません。

あと、ロードバランサが振り分け先のWebサーバに障害が発生した
時に何らかの通知を行うようなことが、利用されているロードバラ
ンサによっては実現できるかもしれません。

また、ZBXNEXT-20のweb scenarios should be able to be template
membersに関してですが、今回のようなロードバランサを利用した
際の機能ではありません。

現在のバージョンのZabbixのWeb監視は、必ずホストに紐付けて登
録する方法しか用意されていません。
Web監視の機能を利用したい場合は、ホストを登録して1ホスト毎に
Web監視の設定を追加しなければならないため、特に複雑なシナリ
オを利用するならば、各ステップの再入力などの作業をしなければ
ならないわけです。

しかし、Zabbixのテンプレートの機能と組み合わせることができる
ようになれば、事前にテンプレートとしてWeb監視も含めた監視設
定を作成しておいて、Webサーバを追加したときにテンプレートの
割り当てだけで、Web監視の設定も自動的に追加できるようになる
でしょう。
つまり、監視対象としてWebサーバが追加された時の作業を軽減す
ることが期待されます。

ユーザー kkamiyam の写真

TNK さん

詳細なご回答ありがとうございます。
うーん、やはり厳しいですか。
監視サーバは内部にあるのでwwwサーバと直接通信することは可能なのですが、ご指摘の通りバーチャルホストとの紐付けが思いつかなくて。
nagiosではからの移行なのですが、nagiosでは同様のことが行えていて同じように監視項目を設定してほしいとの要望がありまして。確かnagiosのプラグインをzabbixで使う方法もあったはずなので、少し調べてみます。

いまから帰宅するので、要点のみで失礼させていただきます。

ユーザー kodai の写真

nagiosで監視が可能なのでしたら、そのプラグインがどのような処理を行っているのかを見るのが一番良いと思います。

手っ取り早い方法としては、nagiosプラグインは単にコマンドを実行して結果を返しているだけですので、Zabbixからそのプラグインを実行させて結果を処理すれば同様のことが実現できると思います。

広瀬です。

L/B配下にぶら下がっているサーバがダウンしたら、L/BのSNMPトラップを受けて
検知させるってのはどうでしょう?

スイッチと同じレベル感で、linkdown/upなりのステータスがありますので、代用は
可能なはずです。あ~SNMPトラップ機能があればの話ですが。

※自社ではそれで対応させてます。

ユーザー kkamiyam の写真

神山です。返答が遅れて申し訳ありません。

>kodaiさん
そうですね。ざっと調べた限りではzabbixからnagiosのプラグインを実行することはできるようなので、その方向も検討してみます。

>wakabaさん(広瀬さん)
ちょっとロードバランサーの構成がわからないのですが、余裕があれば調べてみます(でも見た限りではアプライアンスでなくApacheのmod_proxy+mox_proxy_balancerでやってるぽい)。1月から参画している現場なのですが、この辺の資料が全然まとまってなく・・手探り状態の毎日です。

すみませんが、ちょっと確認させてください。
Web監視のシナリオはホストごとに作成できるわけですが、実際の挙動としてはホストに紐付けたDNS名やIPアドレスでなく、シナリオで指定したURLに対して監視を行うという認識で合っているでしょうか(つまり、ホストに内部IPを指定したところでURLにリクエストが投げられるから意味がない)。

ユーザー TNK の写真

Web監視のシナリオはホストごとに作成できるわけですが、実際の挙動としてはホストに紐付けたDNS名やIPアドレスでなく、シナリオで指定したURLに対して監視を行うという認識で合っているでしょうか(つまり、ホストに内部IPを指定したところでURLにリクエストが投げられるから意味がない)。

合っています。
各ステップごとにURLを入力しますが、そのURLで指定したIPアドレ
スもしくはホスト名を利用してアクセスを行います。

ついでに、Nagiosのプラグインを利用する方法のヒントです。
Zabbixの監視アイテムのタイプとしては「外部チェック」を利用し
ます。
以下のようなスクリプトを作成して、外部チェック用のスクリプト
を配置するディレクトリ(ZABBIX-JPが公開している1.8.10のRPMで
インストールされた場合は「/etc/zabbix/externalscripts」の下)
に配置して、引数をいくつか渡して呼び出すようにします。

例えばcheck_http.shというようなスクリプト名にして、アイテム
のキーには、

check_http.sh[{IPADDRESS} /sample.html www.example.com]

などと指定するわけです。


#!/bin/sh

if [ $# -lt 3 ]; then
echo "Usage: $0 Hostname IP_Address URL_Path [Virtual_Hostname]"
exit 1
fi

CHECK_HTTP="/usr/lib/nagios/plugins/check_http"

OK_PATTERN="HTTP OK:*"
WARNING_PATTERN="HTTP WARNING:*"
CRITICAL_PATTERN="*HTTP CRITICAL*"

#
if [ $# -eq 3 ]; then
COMMAND_LINE="$CHECK_HTTP -I $2 -u $3"
else
COMMAND_LINE="$CHECK_HTTP -I $2 -u $3 -H $4"
fi

RESPONSE=`$COMMAND_LINE`

case $RESPONSE in
$OK_PATTERN) echo "0" ;;
$WARNING_PATTERN) echo "1" ;;
$CRITICAL_PATTERN) echo "-1" ;;
*) echo "-2" ;;
esac

check_httpは、epelのRPM(nagios-plugins-http)を利用してみまし
た。
http://fedoraproject.org/wiki/EPEL

check_httpの引数や、その結果をどのように判断するかは、どのよ
うに何を監視されたいのか、結果をどのように分類して運用対処を
行うのかに合わせてカスタマイズして頂ければよいと思います。

ユーザー kkamiyam の写真

神山です。

>TNK さん

なるほど、了解しました。

あと詳細な手順ありがとうございます。
いまはデータベース関連の設定等を先行させているので、手が空いたら試してみます。