9. 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 シナリオの実行時には、Zabbix は必要に応じてリダイレクトを追跡します(以下の Follow redirects オプションを参照)。リダイレクトの最大数は 10 にハードコードされています(cURL オプション CURLOPT_MAXREDIRS を使用)。単一のシナリオの実行中は、すべての Cookie が保持されます。

Webシナリオの設定

Webシナリオを設定するには、以下の手順を実行します。

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

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

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

シナリオのパラメータ:

Parameter Description
名前 一意のシナリオ名です。
ユーザーマクロをサポートしています。ユーザーマクロを使用した場合、Web監視アイテム名ではこれらのマクロは未解決のまま残る点に注意してください。
更新間隔 シナリオを実行する頻度です。
時間サフィックスをサポートしています。例: 30s、1m、2h、1d。
ユーザーマクロをサポートしています。ユーザーマクロを使用してその値が変更された場合(例: 5m → 30s)、次回のチェックは以前の値に従って実行されます(この例では、より先の時刻になります)。
新しいWebシナリオは、作成後60秒以内にチェックされます。
試行回数 Webシナリオのステップを実行する試行回数です。ネットワークの問題(タイムアウト、接続不可など)が発生した場合、Zabbixはステップの実行を複数回繰り返すことができます。設定した値はシナリオ内の各ステップに等しく適用されます。指定できる試行回数は最大10回で、デフォルト値は1です。
: Zabbixは、誤ったレスポンスコードや必要な文字列の不一致を理由にステップを再試行することはありません。
エージェント クライアントエージェントを選択します。
Zabbixは選択したブラウザとして動作します。これは、Webサイトがブラウザごとに異なるコンテンツを返す場合に便利です。
このフィールドではユーザーマクロを使用できます。
HTTPプロキシ 使用するHTTPプロキシを、[protocol://][username[:password]@]proxy.example.com[:port] の形式で指定できます。
これは CURLOPT_PROXY cURLオプションを設定します。
オプションの protocol:// プレフィックスを使用して、代替のプロキシプロトコルを指定できます(プロトコルプレフィックスのサポートは cURL 7.21.7 で追加されました)。プロトコルを指定しない場合、プロキシはHTTPプロキシとして扱われます。
デフォルトでは、ポート1080が使用されます。
指定した場合、このプロキシは http_proxy、HTTPS_PROXY などのプロキシ関連環境変数を上書きします。指定しない場合、プロキシはプロキシ関連環境変数を上書きしません。入力した値はそのまま渡され、妥当性チェックは行われません。
SOCKSプロキシのアドレスを入力することもできます。誤ったプロトコルを指定すると接続は失敗し、アイテムは未サポートになります。
: HTTPプロキシでは単純認証のみサポートされています。
このフィールドではユーザーマクロを使用できます。
変数 シナリオのステップ(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エンコードされますが、生のPOSTやURL内で直接使用する場合は手動でURLエンコードする必要があります。
ヘッダー HTTPヘッダーは、リクエスト実行時に使用されます。デフォルトヘッダーとカスタムヘッダーの両方を使用できます。
ヘッダーは、シナリオレベルでドロップダウンリストから選択したエージェントタイプに応じたデフォルト設定で割り当てられ、ステップレベルでカスタム定義されていない限り、すべてのステップに適用されます。
ステップレベルでヘッダーを定義すると、シナリオレベルでドロップダウンリストから 'User-Agent' を選択して割り当てられるデフォルトヘッダーを除き、それまでに定義されたすべてのヘッダーが自動的に破棄される点に注意してください。
ただし、'User-Agent' のデフォルトヘッダーであっても、ステップレベルで指定することで上書きできます。
シナリオレベルでヘッダーを解除するには、ステップレベルでそのヘッダー名を指定し、値を空にする必要があります。
ヘッダーは、HTTPプロトコルで表示されるのと同じ構文で記述する必要があります。また、CURLOPT_HTTPHEADER cURLオプションでサポートされる追加機能を任意で使用できます。
例:
Accept-Charset=utf-8
Accept-Language=en-US
Content-Type=application/xml; charset=utf-8
ユーザーマクロおよび {HOST.*} マクロをサポートしています。
有効 このチェックボックスがオンの場合、シナリオはアクティブです。オフの場合は無効です。

既存のシナリオを編集する場合、フォームでは次の2つの追加ボタンを使用できます。

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

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

HTTPチェックの場合は、Zabbix serverユーザーに対して 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から分離し、属性と値をQuery fieldsへ移動して自動的にURLエンコードできます。
URLでは、{macro}構文を使用して変数を利用できます。変数は{{macro}.urlencode()}構文を使用して手動でURLエンコードできます。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
2048文字までに制限されています。
Query fields 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.*}マクロをサポートしています。
Variables GETおよびPOST機能で使用できるステップレベルの変数。
属性と値のペアとして指定します。
ステップレベルの変数は、シナリオレベルの変数または前のステップからの変数を上書きします。ただし、ステップレベルの変数の値が影響するのは次のステップのみであり、現在のステップには影響しません。
形式は次のとおりです:
{macro}=value
{macro}=regex:<regular expression>
詳細は、シナリオレベルの変数の説明を参照してください。
変数は、クエリフィールドまたはPOST変数のフォームデータで使用する場合は自動的にURLエンコードされますが、生のPOSTまたはURL内で直接使用する場合は手動でURLエンコードする必要があります。
Headers リクエスト実行時に送信されるカスタムHTTPヘッダー。
属性と値のペアとして指定します。
ステップレベルで定義されたヘッダーは、その特定のステップで使用されます。
ステップレベルでヘッダーを定義すると、シナリオレベルのドロップダウンリストで'User-Agent'を選択して割り当てられるデフォルトヘッダーを除き、それまでに定義されていたすべてのヘッダーは自動的に破棄される点に注意してください。
ただし、'User-Agent'のデフォルトヘッダーであっても、ステップレベルで指定することで上書きできます。
たとえば、ヘッダー名を指定して値を設定しない場合、シナリオレベルのデフォルトヘッダーは解除されます。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
これはcURLオプションCURLOPT_HTTPHEADERを設定します。
Follow redirects HTTPリダイレクトに従うには、チェックボックスをオンにします。
これはcURLオプションCURLOPT_FOLLOWLOCATIONを設定します。
Retrieve mode 取得モードを選択します:
Body - HTTPレスポンスから本文のみを取得
Headers - HTTPレスポンスからヘッダーのみを取得
Body and headers - HTTPレスポンスから本文とヘッダーを取得
Timeout Zabbixは、URLの処理に設定された時間(1秒から最大1時間)を超えて費やすことはありません。実際には、このパラメータはURLへの接続を確立する最大時間と、HTTPリクエストを実行する最大時間を定義します。したがって、Zabbixはこのステップに 2 x Timeout 秒を超えて費やすことはありません。
時間サフィックスをサポートしています(例: 30s、1m、1h)。ユーザーマクロをサポートしています。
Required string 必須の正規表現パターン。
取得したコンテンツ(HTML)が必須パターンに一致しない場合、このステップは失敗します。空の場合、必須文字列のチェックは実行されません。
例:
Homepage of Zabbix
Welcome.*admin
: このフィールドでは、Zabbix Webインターフェースで作成した正規表現の参照はサポートされていません。
ユーザーマクロおよび{HOST.*}マクロをサポートしています。
Required status codes 期待されるHTTPステータスコードの一覧。Zabbixが一覧にないコードを受け取った場合、このステップは失敗します。
空の場合、ステータスコードのチェックは実行されません。
例: 200,201,210-299
ユーザーマクロをサポートしています。

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

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

タグの構成

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

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

認証の設定

認証タブでは、シナリオの認証オプションを設定できます。
タブ名の横にある緑色の点は、何らかのHTTP認証が有効になっていることを示します。

認証パラメータ:

Parameter Description
HTTP認証 認証オプションを選択します:
なし - 認証は使用されません。
Basic - Basic認証を使用します。
NTLM - NTLM(Windows NT LAN Manager)認証を使用します。
Kerberos - Kerberos認証を使用します(参照: ZabbixでのKerberosの設定)。
Digest - Digest認証を使用します。
ユーザー ユーザー名を入力します(最大255文字)。
HTTP認証がBasic、NTLM、Kerberos、またはDigestに設定されている場合に使用できます。ユーザーマクロをサポートしています。
パスワード ユーザーのパスワードを入力します(最大255文字)。
HTTP認証がBasic、NTLM、Kerberos、またはDigestに設定されている場合に使用できます。ユーザーマクロをサポートしています。
SSL verify peer WebサーバーのSSL証明書を検証するには、チェックボックスをオンにします。
サーバー証明書は、システム全体の認証局(CA)の場所から自動的に取得されます。CAファイルの場所は、Zabbixサーバーまたはプロキシの設定パラメータ SSLCALocation を使用して上書きできます。
これは、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シナリオを表示するには、監視 → ホスト に移動し、 一覧でホストを見つけて、最後の列にある Web ハイパーリンクをクリックします。 詳細情報を表示するには、シナリオ名をクリックします。

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

Webシナリオ実行の最近の結果は、 監視 → 最新データ セクションで確認できます。

拡張監視

受信した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 オプションを使用して停止できます。