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シナリオを設定するには、次の手順を実行します。

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

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

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

シナリオのパラメータ:

Parameter Description
Name 一意のシナリオ名。
ユーザーマクロをサポートします。注意:ユーザーマクロを使用した場合、これらのマクロは Web監視アイテム 名では未解決のまま残ります。
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 で使用してはいけません。

ステップの設定

ステップパラメーター:

Parameter Description
Name 一意のステップ名。
ユーザーマクロがサポートされています。注意:ユーザーマクロを使用した場合、これらのマクロは Web監視アイテム 名では未解決のまま残ります。
URL 接続してデータを取得するための URL です。例:
https://www.example.com
http://www.example.com/download
ドメイン名は Unicode 文字で指定できます。Webシナリオのステップを実行すると、自動的に punycode に変換されて ASCII になります。
Parse ボタンを使用すると、URL から任意のクエリフィールド(?name=Admin&password=mypassword のようなもの)を分離し、属性と値を 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 行に表示され、& 記号で連結されます。
Raw 値は {{macro}.urlencode()} または {{macro}.urldecode()} 構文を使用して手動で URL エンコード/デコードできます。
例: id=2345&userid={user}
{user} が Webシナリオの変数として定義されている場合、ステップ実行時にその値に置き換えられます。変数を URL エンコードしたい場合は、{user} を {{user}.urlencode()} に置き換えてください。
ユーザーマクロと {HOST.*} マクロ がサポートされています。
Variables GET および POST 関数で使用できるステップレベルの変数です。
属性と値のペアとして指定します。
ステップレベルの変数は、シナリオレベルの変数または前のステップの変数を上書きします。ただし、ステップレベルの変数の値が影響するのは次のステップのみであり、現在のステップには影響しません。
形式は次のとおりです:
{macro}=value
{macro}=regex:<正規表現>
詳細は シナリオ レベルの変数の説明を参照してください。
変数は、クエリフィールドまたは POST 変数のフォームデータで使用する場合は自動的に URL エンコードされますが、Raw 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監視アイテムをフィルタリングできます。

認証の設定

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シナリオの概要は、Dashboards の Web monitoring ウィジェットでも表示できます。

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