Zabbixを使ってエージェント無しで単純な Webサイト監視だけを行う最短の方法

2014年2月12日

Zabbixを使ってサーバを監視するには原則として監視対象サーバに専用エージェントをインストールする必要があるが、単純な Webサイト監視であればエージェントをインストールしなくても出来るようになっている。

Zabbixは誰でも無料でインストールして利用できるオープンソースの強力なサーバー監視ツール。 Zabbix日本語公式サイト

Webサイトが正常に閲覧可能な状態かどうかだけひとまず監視したいという需要が世の中にはそれなりにあるはずなのだが、Zabbixのように高機能な監視システムをそういった単純な用途に使おうとして情報収集をしてもなかなかストレートに目的へ辿り着くことが出来ない。そこで、カジュアルなWeb監視用途に Zabbixを使おうとする人のための最短手順をまとめて公開することにした。

エージェント監視とWeb監視

Zabbixエージェントを使った監視と Web監視の違いについて解説する。これらはどちらかだけ行うことも両方行うこともできるが、この記事では後者のみを取り扱う

エージェントを使った監視

 

Zabbixエージェントは監視対象サーバで稼働し続け、負荷状況などの詳細情報を収集する。これによって監視対象サーバの詳しい状況が手に取るようにわかるわけだが、

のような要件が大人の事情その他によってクリアできない場合もあろうかと思う(後者にはエージェントをアクティブモードにして運用するという方法があるが)。

Web監視

Web監視(Web Monitoring) は、Zabbixサーバーが一般の Webサイト訪問者に扮して監視対象サーバにアクセスすることでサイトが正常に見られる状態かどうかをチェックする方式である。

 

エージェント監視と違って監視対象サーバの内部状態に関する情報まで収集することはできないが、この方式を利用した監視を行うだけであれば対象のサーバーに Zabbixエージェントをインストールする必要はない。

Zabbixのインストール

・・・については本記事では取り扱わないので各自で済ませて頂きたい。当社で開発して無料で配布しているサーバー用オペレーティングシステム Walbrix (ワルブリックス) を適当な余っているパソコンに入れれば誰でも簡単に Zabbixを使い始められるので、特に検証や学習の用途にお勧めしておく。

Zabbix (サーバ監視) - 仮想アプライアンス - Walbrix

Zabbixへのログインとメニューの操作法

Zabbixのデフォルトユーザー名は admin、パスワードは zabbixとなっている。実際の運用ではデフォルトの adminユーザーを無効にして実作業用のユーザーを別に作るべきだが、この記事では省略して adminユーザーのまま作業を続けることにする。

言うまでもないが実運用では少なくともパスワードだけは変えること

 

Zabbixの管理画面では、画面左上にメインメニューとサブメニューが表示される。原則としてメインメニュー→サブメニューの順にクリックして作業を選択するのだが、メインメニューはクリックしなくてもマウスポインタをあてがうだけで選択された状態になる。おそらくこれはクリックの回数をなるべく減らそうという考えによるものだと思うが、慣れないうちは戸惑いやすいので注意してほしい。

 

サブメニューの下に表示されているリンクの並びは今までに訪れたページの履歴であり、階層をナビゲーションするいわゆる「パンくずリスト」ではないことにも注意されたい。そうだと思って操作すると大変混乱することになる。

アラートメール送信用のSMTP設定

Zabbixが障害を検知したとき、つまり監視対象の Webサイトが落ちた時には然るべき人員に通知(アラート)が送信されるのが望ましい。

Zabbixではアラートの送信媒体(メディア)として標準で Email, Jabber, SMSが用意されているが、ここでは最も簡単で身近な Emailを使うことにする。

メール送信の設定をするには「管理」「メディアタイプ」から Emailを選択する。

 

Zabbixサーバからメールを送信させるにはSMTPサーバが必要である。Zabbixが動いているサーバがSMTPサーバを兼ねているのであれば(Walbrix版Zabbixはそのように設定されている)SMTPサーバーの欄には localhost を、そうでない場合は SMTPサーバーのホスト名を入力する。

SMTP helo欄にはSMTPサーバーに対して名乗る自分のドメイン名(自分が所有している正式なドメイン名を名乗ることが望ましいが特に無ければ localhostでも何でも良い)、送信元メールアドレス欄にはアラートメールの送信元(メールのFrom欄)として記載したいメールアドレスを入力し、保存ボタンをで設定を保存する。

 

Zabbixは認証や暗号化を必要とするSMTPサーバとの通信に対応していないので、そのようなSMTPサーバを用いる必要がある場合はリレー用のSMTPサーバを設けるかカスタムスクリプトを作成する必要がある。

アラートメールの送信先設定

メールの送信方法を設定したら、次に送信先のアドレスを設定する。メニューの「管理」「ユーザー」から、Admin (Zabbix Administrator)ユーザーを選択してユーザー情報の編集画面を開く。

 

「メディア」タブから「追加」をクリックし、

 

送信先欄にアラートメールの送信先となるメールアドレスを入力し、「追加」ボタンで追加する。有効な時間帯はデフォルトで 1-7(月曜日から日曜日)の00:00-24:00(つまり24時間いつでも)となっているので24時間365日いつでも障害があればメールが送信されることになる(ご愁傷様です)が、必要ならば変更する。

 

「メディア」にメールアドレスが追加されたことを確認したら「保存」ボタンを押して変更を確定する(ここで保存ボタンを押すのを忘れやすいので注意)。

 

ここまでで、「Zabbixがアラートメールを送信する方法」と「アラートのメールが送信される宛先」が設定された。

アラート送信の有効化

デフォルトでは、障害発生時にアラートを送信するアクションは無効になっているのでこれを有効にする。「設定」「アクション」「イベントソース=トリガー」で、"Report problems to Zabbix administrators" という名前のアクションを見つけ、デフォルトで「無効」になっているステータスを「有効」に切り替える。

 

ここまでで、「監視対象に何らかの障害があった場合には adminユーザーのメールアドレスにアラートメールが送信される」状態となった。

監視対象ホストの追加

アラート送信の設定が出来たところで、次に監視対象のホストを登録する。メニューから「設定」「ホスト」を辿り、「ホストの作成」ボタンを押す。

 

「ホスト」タブでホスト名(監視対象が http://www.walbrix.com/jp/ なら www.walbrix.com)、表示名(表示用の名前を任意に付けることが出来る)を入力し、所属グループには Zabbixにデフォルトで用意されているグループから適当なものを選ぶ(例では Linux serversというグループを選んでいるが、グループ名はただの名前でしかないので対象ホストは Linuxでなくても良い)か、新しいグループを作成する。

下の方に「エージェントのインターフェース」欄があり、ここに Zabbixエージェントの接続情報を入力する必要がある。Web監視だけしか行わないのであればエージェントの設定は本来不要なはずだが、Zabbixの仕様上使わない場合でも入力しておく必要があるようなので DNS名にホスト名を入力して接続方法を「DNS」にだけしておく。

「ホスト」タブの入力を終えてもまだ下の「保存」ボタンはクリックせず「テンプレート」タブに移り、この監視対象ホストを "Template App HTTP Service" テンプレートに紐づける。新規テンプレートをリンク欄にテンプレート名の一部(例えば "HTTP")を入力すると候補が表示されるのでそこから目的のテンプレートを選択する。

 

テンプレートを選択したら「追加」をクリックするのを忘れないこと。これを忘れるとせっかく選択したテンプレートはホストに紐付けされない。

 

テンプレートがホストに紐付けされたら、「保存」ボタンをクリックして監視対象ホストの登録を完了する。

 

監視対象ホストの登録を完了すると、ホスト一覧が表示されここに新しく追加されていることが確認できる。

 

監視対象の状態を確認

監視対象のホストが登録されるとすぐに Zabbixサーバーは監視を開始する。監視対象がどのような状態か確認するには、メニューから「監視データ」「最新データ」をたどってグループ・ホストを絞り込む。(監視対象が一つしか無いうちは絞り込むまでもないが)

 

今回登録したホストには "Template App HTTP Service" テンプレートが適用されているため、HTTP Serviceなるアイテム(監視項目)が監視されている。"HTTP service is running" の「最新の値」が Up(1) になっていれば、監視対象のサーバーで Apacheなどの Webサーバーが起動しているということになる。試しに対象サーバの Apacheを停止してみると値が Down(0)になり、障害を通知するメールが先刻設定したメールアドレス宛に飛ぶはずだ。

もし Zabbix上でのメール関連設定が正しいのにメールが届かない場合は迷惑メール扱いになっていないか確認した上で SMTPサーバのログをチェックして問題を解決する必要がある。また Walbrix版 Zabbixは SMTPサーバを兼ねているが、この構成だとOP25Bを実施しているインターネットプロバイダに接続している場合にはメールが飛ばないだろう。

OP25B対策についての参考記事: OP25Bを回避するため Postfixのリレー先を gmailに設定する方法

 

障害が発生するとこのように Zabbixのトップページにもオレンジ色で警告が表示される。

 

試しに落とした監視対象ホストの Apacheを起動しなおすと警告は表示されなくなり、復帰を知らせるアラートメールが送信される。

Webシナリオの登録

ここまでの設定だけでは、監視対象のWebサーバが HTTPのポート(80番)で待ち受けをしているかどうかの監視しか出来ない。具体的には、設定不備やアプリケーションサーバのクラッシュでページが 500 Internel Server Errorになっていたり、ファイルを謝って削除して 404 Not Foundになっていたり、アクセス集中でページの表示に何十秒もかかるような状態になっていたりしても Webサーバ自体が落ちていない限り障害として検知されない。

それらのような障害も検知するには、監視対象ホストに Webシナリオを登録する必要がある。

Webシナリオとは

Webシナリオとは、Zabbixサーバが監視対象のWebサーバを巡回する一連の手順をいう。Zabbixサーバはシナリオに記された URLに上から順にアクセスし、途中でひとつでも異常があればそれを障害として検知する。

 

本記事では例としてサイトのトップページにだけアクセスする最も簡単なシナリオを作る。

Webシナリオの新規作成

メニューから「設定」「ホスト」でホスト設定画面へ行き、対象のサーバを見つけ出して「ウェブ」をクリックする

 

「ウェブ監視の設定」画面になるので「シナリオの作成」をクリック

 

シナリオに名前を付け、アプリケーションには "HTTP service" を選択する(Zabbixでいうところの「アプリケーション」とは監視項目のグループといった意味で、ここではそれ以上の深い意味はない)。更新間隔はこのシナリオを実行して対象のWebサイトをチェックする間隔で、デフォルトは60秒となっているが、これは60秒おきに対象Webサーバのログにアクセス記録が残ることを意味するのでログファイルをあまり汚したくない場合などはもっと長い間隔を指定すると良い。

この時点ではまだ「保存」ボタンを押さないこと。

 

Webシナリオにステップを追加

「ステップ」タブを選択し、「追加」をクリックする

 

ステップに適当な名前をつけ、URLを入力する。

タイムアウト(デフォルトで15秒)は、その時間内にサーバーが応答を返さなければ障害扱いにする。

要求文字列を指定すると、その URLにアクセスしたときにサーバーから返ってくる内容にその文字列が入っていることをチェックし、入っていない場合はそれも障害扱いとする。空欄にしておけば応答内容のチェックは行われない。

要求ステータスコードには通常 200 を入れておけば良い。200 OK以外のHTTP応答コードを期待するような特殊なURLではそれ以外の値を入力することもできる。

ステップの項目を入力し終えたら「追加」ボタンをクリックする。

 

必要な全てのステップを追加し終えたら「保存」を押して Webシナリオの作成を完了し、一覧に新しいシナリオが追加されていることを確認する。

 

 

Webシナリオの実行状況を確認

メニューから「監視データ」「ウェブ」を開くと、ウェブシナリオの実行状況を確認することができる。シナリオ名をクリックするとサイトの応答時間がグラフで表示される。

 

 

「設定」「ホスト」画面から監視対象サーバーの「ウェブ」を選択することでシナリオを修正できるので、サイトのトップページ以外のURLもシナリオに追加してみて、わざとそのページのHTMLファイルを削除するなどしてシナリオの実行が正しく失敗扱いになるか確認すると良いだろう。

Webシナリオにトリガーを設定する

トリガーとは、ご存じのとおり日本語に直訳すると「引き金」である。Webシナリオを作っただけだと、シナリオの実行に失敗しても Zabbixサーバーはそれをまだ正式に「障害」とは認識しない(ので障害通知のアラートメールも飛ばない)。Webサイトに障害が発生した際にアラートメールが飛ぶようにするには、「Webシナリオの失敗→障害」という引き金を定義してやらなくてはならない。

トリガーを作成するにはメニューから「設定」「ホスト」で監視対象ホストを表示し、「トリガー」を開いて「トリガーの作成」をクリックする。

 

 

トリガーに適当な名前を付け、「追加」ボタンでトリガー発動の条件式を入力(後述)し、深刻度を選択して「保存」する

 

条件式にはは式を直接入力することも出来るが、「追加」ボタンで開くウィンドウから選択して入力したほうが簡単だ。アイテムとして "Failed step of scenario..." を、関数には「最新(T秒前/T個前)の値 NOT N」

を選択して「挿入」ボタンで条件式を挿入する。この条件式は「直近に行ったWebシナリオの実行が失敗した」という意味になる。

 

これでWebシナリオにトリガーが設定され、障害検知(サイトの閲覧が正しく出来ない状態になった)時(と復旧時)にアラートメールが送られるようになったはずだ。