7 Web監視

概要

Zabbix を使用すると、Webサイトの可用性に関するいくつかの側面を確認できます。

Web監視を行うには、Zabbix サーバーを最初に cURL (libcurl) サポート付きで設定する必要があります。

Web監視を有効にするには、Webシナリオを定義する必要があります。Webシナリオは、1つ以上の HTTP リクエスト、つまり「ステップ」から構成されます。ステップは、あらかじめ定義された順序で Zabbix サーバーによって定期的に実行されます。ホストがプロキシによって監視されている場合、ステップはプロキシによって実行されます。

Webシナリオは、アイテム、トリガーなどと同様にホスト/テンプレートに関連付けられます。つまり、Webシナリオはテンプレートレベルで作成し、1回の操作で複数のホストに適用することもできます。

任意の Webシナリオでは、次の情報が収集されます。

  • シナリオ全体の全ステップにおける1秒あたりの平均ダウンロード速度
  • 失敗したステップ番号
  • 最後のエラーメッセージ

任意の Webシナリオの各ステップでは、次の情報が収集されます。

  • 1秒あたりのダウンロード速度
  • 応答時間
  • 応答コード

詳細については、Web監視アイテムを参照してください。

Webシナリオの実行によって収集されたデータはデータベースに保存されます。このデータは、グラフ、トリガー、および通知に自動的に使用されます。

Zabbix は、取得した HTML ページにあらかじめ定義された文字列が含まれているかどうかも確認できます。また、ログインをシミュレートし、ページ上でマウスクリックを模擬した一連の操作を実行することもできます。

Zabbix の Web監視は HTTP と HTTPS の両方をサポートしています。Webシナリオの実行時には、必要に応じてリダイレクトを追跡します(下記のオプション Follow redirects を参照)。リダイレクトの最大数は 10 に固定されています(cURL オプション CURLOPT_MAXREDIRS を使用)。すべての cookie は、1つのシナリオの実行中に保持されます。

Webシナリオの設定

Webシナリオを設定するには:

  • データ収集 → ホスト(または テンプレート)に移動する
  • ホスト/テンプレートの行で Web をクリックする
  • 右側の Webシナリオの作成 をクリックする(または、既存のシナリオを編集するにはシナリオ名をクリックする)
  • フォームにシナリオのパラメーターを入力する

シナリオ タブでは、Webシナリオの一般パラメーターを設定できます。

必須入力フィールドには赤いアスタリスクが付いています。

シナリオのパラメーター:

Parameter Description
Name 一意のシナリオ名。
ユーザーマクロ がサポートされています。注意:ユーザーマクロを使用した場合、これらのマクロは web monitoring item 名では未解決のまま残ります。
Update interval シナリオがどのくらいの頻度で実行されるか。
時間サフィックス がサポートされています。例: 30s, 1m, 2h, 1d。
ユーザーマクロ がサポートされています。注意:ユーザーマクロを使用し、その値が変更された場合(例: 5m → 30s)、次回のチェックは以前の値に従って実行されます(例の値ではより先の時刻になります)。
新しいWebシナリオは、作成後60秒以内にチェックされます。
Attempts Webシナリオのステップを実行する試行回数。ネットワーク問題(タイムアウト、接続不可など)が発生した場合、Zabbix はステップの実行を数回繰り返すことができます。設定した回数はシナリオの各ステップに同じように適用されます。最大10回まで指定でき、デフォルト値は1です。
注意:Zabbix は、応答コードが正しくない場合や、必要な文字列と一致しない場合にはステップを繰り返しません。
Agent クライアント エージェントを選択します。
Zabbix は選択したブラウザーになりすまします。これは、Webサイトがブラウザーごとに異なる内容を返す場合に便利です。
このフィールドではユーザーマクロを使用できます。
HTTP proxy [protocol://][username[:password]@]proxy.example.com[:port] 形式で、使用する HTTP プロキシを指定できます。
これにより CURLOPT_PROXY cURL オプションが設定されます。
任意の protocol:// プレフィックスを使用して、別のプロキシプロトコルを指定できます(プロトコルプレフィックスのサポートは cURL 7.21.7 で追加されました)。プロトコルを指定しない場合、プロキシは HTTP プロキシとして扱われます。
デフォルトでは 1080 ポートが使用されます。
指定した場合、プロキシは http_proxy、HTTPS_PROXY などのプロキシ関連環境変数を上書きします。指定しない場合、プロキシはプロキシ関連環境変数を上書きしません。入力された値はそのまま渡され、妥当性チェックは行われません。
SOCKS プロキシアドレスを入力することもできます。誤ったプロトコルを指定すると接続に失敗し、アイテムはサポート対象外になります。
注意:HTTP プロキシでサポートされるのは単純認証のみです。
このフィールドではユーザーマクロを使用できます。
Variables シナリオのステップ(URL、POST 変数)で使用できる変数です。
形式は次のとおりです:
{macro1}=value1
{macro2}=value2
{macro3}=regex:<regular expression>
{macro4}=jsonpath:<jsonpath>
{macro5}=xmlxpath:<xmlxpath>
{macro6}={{macro}.function()}(マクロ関数 を参照)
例:
{username}=Alexei
{password}=kj3h5kJ34bd
{hostid}=regex:hostid is ([0-9]+)
{url}=jsonpath:$.host_url
{status}=xmlxpath://host/response/status
{newvar}={{myvar}.btoa()}
その後、ステップ内では {username}、{password}、{hostid} などとしてマクロを参照できます。Zabbix はそれらを自動的に実際の値に置き換えます。regex: を含む変数は、正規表現の値を取得するために1つのステップが必要であるため、抽出された値はその後のステップにのみ適用できます。
値の部分が regex: で始まる場合、その後ろの部分は Webページを検索する正規表現として扱われ、見つかった場合は一致した内容が変数に保存されます。抽出した値を取得できるように、少なくとも1つのサブグループが必要です。
ユーザーマクロおよび {HOST.*} マクロ がサポートされています。
変数は、クエリフィールドまたは POST 変数のフォームデータで使用する場合は自動的に URL エンコードされますが、raw post または URL に直接使用する場合は手動で URL エンコードする必要があります。
Headers HTTP ヘッダーは、リクエスト実行時に使用されます。デフォルトヘッダーとカスタムヘッダーを使用できます。
ヘッダーは、シナリオレベルでドロップダウンリストから選択した Agent タイプに応じたデフォルト設定で割り当てられ、ステップレベルでカスタム定義されていない限り、すべてのステップに適用されます。
ステップレベルでヘッダーを定義すると、シナリオレベルでドロップダウンリストから 'User-Agent' を選択して割り当てられたデフォルトヘッダーを除き、以前に定義されたすべてのヘッダーが自動的に破棄されることに注意してください。
ただし、'User-Agent' のデフォルトヘッダーも、ステップレベルで指定することで上書きできます。
シナリオレベルのヘッダーを解除するには、ステップレベルでヘッダー名を指定し、値を空にします。
ヘッダーは HTTP プロトコルに表示されるのと同じ構文で一覧表示し、必要に応じて CURLOPT_HTTPHEADER cURL オプションでサポートされる追加機能を使用できます。
例:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
ユーザーマクロおよび {HOST.*} マクロ がサポートされています。
Enabled このチェックボックスがオンの場合、シナリオは有効です。オフの場合は無効です。

既存のシナリオを編集する場合、フォームには次の2つの追加ボタンがあります:

既存のシナリオのプロパティを基に、別のシナリオを作成します。
シナリオの履歴データとトレンドデータを削除します。これにより、データ削除後にサーバーは直ちにシナリオを実行します。

HTTP proxy フィールドが空の場合、HTTP プロキシを使用する別の方法として、プロキシ関連の環境変数を設定できます。

HTTP チェックの場合は、Zabbix サーバーユーザーに対して http_proxy 環境変数を設定します。例: http_proxy=http://proxy_ip:proxy_port

HTTPS チェックの場合は、HTTPS_PROXY 環境変数を設定します。例: HTTPS_PROXY=http://proxy_ip:proxy_port。詳細は、シェルコマンド # man curl を実行すると確認できます。

ステップ タブでは、Webシナリオのステップを設定できます。Webシナリオのステップを追加するには、ステップ ブロックで 追加 をクリックします。

秘密の ユーザーマクロ は、"******" に展開されるため、URL で使用してはいけません。

ステップの設定

ステップのパラメータ:

パラメータ 説明
名前 一意のステップ名。
ユーザーマクロをサポートしています。注意: ユーザーマクロを使用した場合、Web監視アイテム名ではこれらのマクロは未解決のまま残ります。
URL 接続してデータを取得するURL。例:
https://www.example.com
http://www.example.com/download
ドメイン名はUnicode文字で指定できます。Webシナリオのステップ実行時に、自動的にASCIIのpunycodeへ変換されます。
Parseボタンを使用すると、オプションのクエリフィールド(例: ?name=Admin&password=mypassword)をURLから分離し、属性と値をクエリフィールドへ移動して自動的にURLエンコードできます。
URLでは、{macro}構文を使用して変数を利用できます。変数は、{{macro}.urlencode()}構文を使用して手動でURLエンコードできます。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
2048文字までに制限されます。
クエリフィールド URL用のHTTP GET変数。
属性と値のペアとして指定します。
値は自動的にURLエンコードされます。シナリオ変数、ユーザーマクロ、または{HOST.*}マクロの値は解決された後、自動的にURLエンコードされます。{{macro}.urlencode()}構文を使用すると、二重にURLエンコードされます。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
Post HTTP POST変数。
Form dataモードでは、属性と値のペアとして指定します。
値は自動的にURLエンコードされます。シナリオ変数、ユーザーマクロ、または{HOST.*}マクロの値は解決された後、自動的にURLエンコードされます。
Raw dataモードでは、属性/値は1行で表示され、&記号で連結されます。
生の値は、{{macro}.urlencode()}または{{macro}.urldecode()}構文を使用して手動でURLエンコード/デコードできます。
例: id=2345&userid={user}
{user}がWebシナリオの変数として定義されている場合、ステップ実行時にその値へ置き換えられます。変数をURLエンコードしたい場合は、{user}を{{user}.urlencode()}に置き換えてください。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
変数 GETおよびPOST機能で使用できるステップレベルの変数。
属性と値のペアとして指定します。
ステップレベルの変数は、シナリオレベルの変数または前のステップからの変数を上書きします。ただし、ステップレベルの変数の値が影響するのは次のステップのみであり、現在のステップには影響しません。
形式は次のとおりです:
{macro}=value
{macro}=regex:<regular expression>
詳細は、シナリオレベルの変数の説明を参照してください。
変数は、クエリフィールドまたはPOST変数のフォームデータで使用する場合は自動的にURLエンコードされますが、生のPOSTまたはURL内で直接使用する場合は手動でURLエンコードする必要があります。
ヘッダー リクエスト実行時に送信されるカスタムHTTPヘッダー。
属性と値のペアとして指定します。
ステップレベルで定義されたヘッダーは、その特定のステップで使用されます。
ステップレベルでヘッダーを定義すると、シナリオレベルのドロップダウンリストで「User-Agent」を選択して割り当てられるデフォルトヘッダーを除き、それまでに定義されたすべてのヘッダーは自動的に破棄される点に注意してください。
ただし、「User-Agent」のデフォルトヘッダーであっても、ステップレベルで指定することで上書きできます。
たとえば、ヘッダーに名前だけを割り当てて値を設定しない場合、シナリオレベルのデフォルトヘッダーは解除されます。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
これはcURLオプションCURLOPT_HTTPHEADERを設定します。
リダイレクトを追跡 HTTPリダイレクトを追跡するには、チェックボックスをオンにします。
これはcURLオプションCURLOPT_FOLLOWLOCATIONを設定します。
取得モード 取得モードを選択します:
Body - HTTPレスポンスから本文のみを取得
Headers - HTTPレスポンスからヘッダーのみを取得
Body and headers - HTTPレスポンスから本文とヘッダーを取得
タイムアウト Zabbixは、設定された時間を超えてURLの処理を行いません(1秒から最大1時間)。実際には、このパラメータはURLへの接続を確立する最大時間と、HTTPリクエストを実行する最大時間を定義します。したがって、Zabbixがこのステップに費やす時間は2 x Timeout秒を超えません。
時間サフィックスをサポートしています(例: 30s、1m、1h)。ユーザーマクロをサポートしています。
必須文字列 必須の正規表現パターン。
取得したコンテンツ(HTML)が必須パターンに一致しない場合、ステップは失敗します。空の場合、必須文字列のチェックは行われません。
例:
Homepage of Zabbix
Welcome.*admin
注意: このフィールドでは、ZabbixのWebインターフェースで作成された正規表現の参照はサポートされていません。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
必須ステータスコード 期待されるHTTPステータスコードの一覧。Zabbixが一覧にないコードを受け取った場合、ステップは失敗します。
空の場合、ステータスコードのチェックは行われません。
例: 200,201,210-299
ユーザーマクロをサポートしています。

Webシナリオのステップに対する変更は、 シナリオ全体を保存したときにのみ保存されます。

Web監視ステップの設定方法については、 実際の例も参照してください。

タグの構成

Tags タブでは、シナリオレベルのタグを定義できます。

タグ付けにより、WebシナリオとWeb監視アイテムをフィルタリングできます。

認証の設定

Authentication タブでは、シナリオの認証オプションを設定できます。タブ名の横に緑の点が表示されている場合は、何らかの HTTP 認証が有効になっています。

認証パラメーター:

Parameter Description
HTTP authentication 認証オプションを選択します:
None - 認証を使用しません;
Basic - Basic 認証を使用します;
NTLM - NTLM (Windows NT LAN Manager) 認証を使用します;
Kerberos - Kerberos 認証を使用します (参照: Zabbix で Kerberos を設定する);
Digest - Digest 認証を使用します。
User ユーザー名を入力します (最大 255 文字)。
このフィールドは、HTTP authentication が Basic、NTLM、Kerberos、または Digest に設定されている場合に使用できます。ユーザーマクロがサポートされています。
Password ユーザーパスワードを入力します (最大 255 文字)。
このフィールドは、HTTP authentication が Basic、NTLM、Kerberos、または Digest に設定されている場合に使用できます。ユーザーマクロがサポートされています。
SSL verify peer チェックボックスをオンにすると、Webサーバーの SSL 証明書を検証します。
サーバー証明書は、システム全体の証明機関 (CA) の場所から自動的に取得されます。Zabbix サーバーまたはプロキシの設定パラメーター SSLCALocation を使用して、CA ファイルの場所を上書きできます。
これは CURLOPT_SSL_VERIFYPEER cURL オプションを設定します。
SSL verify host チェックボックスをオンにすると、Webサーバー証明書の Common Name フィールドまたは Subject Alternate Name フィールドが一致することを検証します。
これは CURLOPT_SSL_VERIFYHOST cURL オプションを設定します。
SSL certificate file クライアント認証に使用する SSL 証明書ファイル名です。証明書ファイルは PEM1 形式である必要があります。証明書ファイルに秘密鍵も含まれている場合は、SSL key file フィールドを空にしてください。鍵が暗号化されている場合は、SSL key password フィールドにパスワードを指定します。このファイルを含むディレクトリは、Zabbix サーバーまたはプロキシの設定パラメーター SSLCertLocation で指定します。
このフィールドでは HOST.* マクロとユーザーマクロを使用できます。
これは CURLOPT_SSLCERT cURL オプションを設定します。
SSL key file クライアント認証に使用する SSL 秘密鍵ファイル名です。秘密鍵ファイルは PEM1 形式である必要があります。このファイルを含むディレクトリは、Zabbix サーバーまたはプロキシの設定パラメーター SSLKeyLocation で指定します。
このフィールドでは HOST.* マクロとユーザーマクロを使用できます。
これは CURLOPT_SSLKEY cURL オプションを設定します。
SSL key password SSL 秘密鍵ファイルのパスワードです。
このフィールドではユーザーマクロを使用できます。
これは CURLOPT_KEYPASSWD cURL オプションを設定します。

[1] Zabbix は PEM 形式の証明書ファイルと秘密鍵ファイルのみをサポートします。証明書と秘密鍵のデータが PKCS #12 形式のファイル (通常は拡張子 *.p12 または *.pfx) にある場合は、次のコマンドを使用して PEM ファイルを生成できます:

openssl pkcs12 -in ssl-cert.p12 -clcerts -nokeys -out ssl-cert.pem
openssl pkcs12 -in ssl-cert.p12 -nocerts -nodes  -out ssl-cert.key

Zabbix サーバーは、再起動せずに証明書の変更を検出します。

クライアント証明書と秘密鍵が 1 つのファイルにある場合は、"SSL certificate file" フィールドにそのファイルを指定し、"SSL key file" フィールドは空のままにしてください。証明書と鍵は引き続き PEM 形式である必要があります。証明書と鍵を結合するのは簡単です:

cat client.crt client.key > client.pem

表示

ホストに設定されたWebシナリオを表示するには、Monitoring → Hosts に移動し、 一覧でホストを見つけて、最後の列にある Web ハイパーリンクをクリックします。詳細情報を表示するには、シナリオ名をクリックします。

Webシナリオの概要は、Web監視ウィジェットを使用して Dashboards にも表示できます。

Webシナリオ実行の最新結果は、Monitoring → Latest data セクションで確認できます。

拡張監視

受信した HTML ページの内容をログに記録する必要がある場合があります。
これは、Web シナリオのステップが失敗した場合に特に有用です。
デバッグレベル 5(trace)は、その目的のために使用されます。
このレベルは、サーバー および プロキシ の設定ファイルで、または ランタイム制御 オプション(-R log_level_increase="http poller,N"、ここで N はプロセス番号)を使用して設定できます。
以下の例では、デバッグレベル 4 がすでに設定されている場合に、拡張監視を開始する方法を示します。

# すべての http poller のログレベルを上げる:
zabbix_server -R log_level_increase="http poller"

# 2 番目の http poller のログレベルを上げる:
zabbix_server -R log_level_increase="http poller,2"

拡張 Web 監視が不要な場合は、-R log_level_decrease オプションを使用して停止できます。