ウェブ監視

クラッシックなウェブ監視

概要

Enterprise 版Versión Enterprise.では、Goliat サーバと呼ばれる Webサーバコンポーネントを用いて、Web を監視することができます。 goliatlogo_2.jpg

この機能は、Pandora FMS の創設者の古いプロジェクトが元になっています。Goliat F.I.S.T. は、Web サービスにおいて動的な認証の実行を行うオープンソースのプロジェクトでした。(2002年から)ソースコードを確認することができますが、更新は 2010年で終了しました。 https://sourceforge.net/projects/goliat/

Pandora FMS では、ネットワークサーバ、WMIサーバ、プラグインサーバなどと同様に、独立したサーバとして機能します。 このシステムは、“Webトランザクション” という考えのもとで動作します。ここでは、各トランザクションは 1つまたは複数の連続ステップで定義され、トランザクションを正常に完了させるために、正しく順序だてられている必要があります。“Webトランザクション” の実行では、フォーム内での自分自身の認証、メニューオプションのクリック、フォームの入力、各ステップで特定のテキスト文字列を返すことの確認など、完全なブラウジングプロセスを忠実に再現します。

処理のある時点で障害が発生するとチェックに失敗します。 完全なトランザクションには、実際のナビゲーションに含まれるすべてのリソース(グラフィックス、アニメーションなど)のダウンロードが含まれます。 応答時間とパフォーマンスチェックの実行に加えて、Webページから値を抽出して処理することも可能です。

Goliatは、HTTP と HTTPS の両方を透過的に監視し、クッキーによるセッション管理、パラメータの受け渡しをサポートします。もちろん、各ページに関連するリソースをダウンロードできます。ただし、実行時の動的な javascript の管理などに制限があります。 より複雑な Web トランザクションの場合、Pandora FMS には WUX 監視というより強力で複雑なコンポーネントがあります。

インストールと設定

Goliat を利用できるようにするには、最初に Pandora FMS Enterprise サーバを有効化する必要があります。

webserver 1

実行したいリクエスト数に応じて、スレッド数およびデフォルトのタイムアウトを増やします。

 web_threads 1 
 web_timeout 60

Goliat が使うライブラリのタイプ (LWP または CURL) を変更できる拡張設定トークンがあります。デフォルトでは CURL が利用されていますが、切り替えることができます。

web_engine curl


Pandora FMS は CSRF に対して保護されており、デバッグ時に Web チェックで次のメッセージが表示される場合があります:
Cannot verify the origin of the request
WUX 監視 の使用を検討する際には、この保護を考慮に入れてください、

ウェブモジュールの作成方法

ウェブページをモニタするには、まずはモジュールタブをクリックします。その後 'ウェブサーバモジュールの新規作成(Create a new webserver module)' を選択し、作成(Create) をクリックします。

作成をクリックすると、ウェブをモニタするために必要な設定を入力するためのフォームが表示されます。名前や、Webチェックのタイプなど、基本的なものです。

goliat_types.jpg

複数のチェックタイプが選択できます。

  • Remote HTTP module to check latency: 最初のリクエストから最後のチェックが完了するまでのトータルの時間を取得します (ウェブチェックを完了するには、1つ以上のトランザクションがあります)。複数のリクエストが定義されている場合、それぞれの平均時間が利用されます。
  • Remote HTTP module to check server response: すべてのトランザクションの結果をチェックし、1 (正常) もしくは、0 (異常) を返します。一部のステップが失敗すると、全体を障害として認識します。誤検出を避けるために、リトライ回数を設定することができます。 障害が発生した場合にテストを何回か実行する場合は、リトライ フィールドを使用してください(下記の詳細フィールドを参照)。
  • Remote HTTP module to retrieve numeric data: 正規表現を利用して HTTP 応答から数値を取得します。
  • Remote HTTP module to retrieve string data: 正規表現を利用して HTTP 応答から文字列を取得します。
  • Remote HTTP module to check server status code:: web_engine curl の設定トークンで curl ツールの利用を有効化すると、HTTPヘッダーを返すことができます。

ウェブチェック

この必須フィールドは、実行される WEB チェックを定義します。 これは、1つ以上のステップまたは単一のリクエストで定義されます。 これらのリクエストは、Web 検査フィールドに特別な形式で設定しなければなりません。 チェックは task_begin で開始し、task_end で終了します。

簡単なトランザクションの例を以下に示します。

 task_begin
 head http://apache.org/
 task_end

保存したのち、モジュールを強制実行して結果を見ることができます。

コマンドを追加した別の例:

 task_begin 
 get http://apache.org/
 cookie 0
 resource 0
 check_string Apache Software Foundation
 task_end

この基本的な例では、ウェブページに文字列があるかどうかをチェックしています。これは変数 check_string があるためです。 この変数では、HTML 自体をチェックすることはできません。テキストのサブストリングのみを検索します。 私たちは、Webサイト <http://apache.org> で “Apache Software Foundation” を探しています。 その文字列が存在する場合、チェックは OK を返します(サーバーの応答を確認するリモート HTTP モジュールの場合)

文字列が Web ページに存在しないことを確認するには、'check_not_string' を利用できます。

check_not_string Section 3

check_string 構文がとる引数は、通常のテキスト文字列ではなく、“正規表現”です。 つまり、文字列 “Pandora FMS (4.0)” の検索は正規表現で行う必要があります。 例えば、Pandora FMS \(4.0\) です。 これにより、強力な検索を行うことができますが、文字や数字以外の文字は \ でエスケープする必要があることに注意してください。

フォームをチェックするには、いくつかの拡張変数があります。

  • resource (1 または 0):ウェブリソース (画像、ビデオなど) のすべてをダウンロードします。
  • cookie (1 または 0):クッキーを保持し、以降のチェックのためにセッションを保持します。
  • variable_name:フォームの変数名です。
  • variable_value:上記変数名に対する値です。

これらの値を利用することにより、フォームにデータを送信し、正しく動作するかどうかをチェックすることができます。

ドメインのリダイレクションには対応していません。この問題に対応するには、リダイレクトされた後にアクセスされるアドレスでモジュールを作成する必要があります。

前のケースでは、 curl コマンドのパラメータが短いバージョンでは、

-L

であり、長いバージョンでは、

--location

であるため、HTTP 3XX リダイレクトを受けた場合、リダイレクトされたドメインに対して再度実行されます。 ただし、Pandora FMS の柔軟性により、デバッグボタンを使用できます。

モジュールの作成時点では、モジュールは有効化されておらず、最初のチェックを実行した後モジュールを使用できるようになります。これを強制的に実行して時間を節約できます。

このモジュールを変更するときは、デバッグ(Debug) ボタンをクリックすると、デバッグモードに入って クエリ(Query) を編集できます。

モジュールのクエリを クエリの実行(Execute query) ボタンで実行したり、目的の結果が得られるまで他の値に変更して再実行したりできます。

ウェブの応答時間チェック

ウェブの応答時間をチェックしたい場合は、モジュールタイプ Remote HTTP module to check latency を選択する必要があるのみです。<https://pandorafms.com> の応答時間を知りたい場合、コードは次のようになります。

 task_begin
 get https://pandorafms.com
 task_end

設定トークン resource 1 を追加すると、すべてのリソース(JavaScript、CSS、イメージなど)をダウンロードし、それにかかった実際の時間を計算できるようになります。

ウェブサイトのダウンロード時間は、ブラウザで Web サイトを表示するのにかかる時間ではありません。通常、これはJavaScriptの読み込み時間に依存し、Goliat は JavaScriptをダウンロードしますが、実行しません。

プロキシ経由でのウェブチェック

ウェブチェックは、プロキシ経由でも行うことができます。プロキシを設定するには、拡張オプション(Advanced options) をクリックすると表示される、プロキシURL(Proxy URL) フィールドにプロキシの URL を設定する必要があります。

例えば、URL は次のようになります。

http://proxy.domain.com:8080

認証が必要なプロキシの場合は、次のように my-user にユーザ名、my_pwd にパスワードを指定します。

http://my_user:[email protected]:8080

Webコンテンツの取得

特定の Web サイトが稼動しているか、どれくらい時間がかかっているかを知りたいわけではなく、API を通してPandora FMS サーバに登録されたモジュール数などのコンテンツの内容を確認したい場合もあります。そのためには、適切な正規表現で Remote HTTP module to retrieve numeric data モジュールを利用します。

task_begin
get http://127.0.0.1/pandora_console/include/api.php?apipass=1234&user=internal_API&pass=1234&op=get&op2=total_modules&id=0
get_content \d+
task_end

出力は次のようになります。

また、より複雑な HTTP 応答からのデータを収集するための正規表現を設定トークン get_content_advanced で指定することもできます。この実践的な例では、Pandora FMS 公式ドキュメントのフッターから年を取得します(また、文字列データタイプ Remote HTTP module to retrieve string data で保存します:

task_begin
get https://pandorafms.com/manual/
get_content_advanced \(c\) ([\d]+) Pandora FMS\(tm\) </span>
task_end

しきい値の反転が使用されていることに注意してください。2022 以外の文字列を受信すると、モジュールは障害状態になります。

  • get_content_advanced に定義する正規表現は、カッコでくくらなければいけません。
  • 検索するテキストにカッコが含まれている場合は、バックスラッシュ \ を使用して文字をエスケープする必要があります。

警告または障害状態のしきい値を設定するには、モジュールの設定を使用して、受信した文字列が期待どおりのものであることを確認します。

ウェブページのフォームのチェック

より実用的な、Web フォームのチェックです。 しかし、これは単に Web ページ上のテキストをチェックするよりもはるかに複雑です。 このサンプルチェックでは、Pandora 自身のコンソールを使用してログインし、ログインできたことを確認し、ログインしているユーザのデータが表示されているワークスペースのテキストを確認します。 デフォルトのコンソールであれば、管理者のユーザには、“Admin Pandora” という記述が含まれています。

このタイプのチェックを実行するには、ログインに必要な資格情報が必要です。これらの値を使用して HTML フォームに「送信」するためです。また、ページに移動して HTML のソースから変数名を見る必要があります。どのように Goliat が動作するかを理解するためには、HTML に関する最小限の知識が必要です。

複数ステップの WEB トランザクションテストを設定するときに、設定を確認する良い方法としては、ステップの 1つで何かが見逃された場合に備えて、ステップごとにテストすることです。

Pandora コンソールのログイン URL が以下であると仮定します。

http://192.168.70.116/pandora_console/

HTML コードを確認すると、ログインフォームの変数は次の通りです。

  • nick> ユーザ名
  • pass> パスワード

フォームの認証を通すためには、変数 variable_name および variable_value の両方が必要です。Pandora FMS コンソールのデフォルトは、admin および pandora です。

最初のステップはフォームへのアクセスです。次に、ユーザとパスワードを送り認証します。(認証の成功を 2つ目のステップで確認します)

task_begin
post http://192.168.70.116/pandora_console/index.php?login=1
variable_name nick
variable_value admin
variable_name pass
variable_value pandora
cookie 1
resource 1
task_end

上記の設定で、ウェブページにアクセスし認証することができます。これにより、認証した状態でのウェブページ上の何らかのチェックを実行できます。cookie 1 トークンを使用して、前の手順で取得した cookie の永続性を維持します。 それらがなければ、セッションを再現することはできません。

2つ目のステップでは、ユーザーの詳細ページにアクセスし電話番号を探します。ユーザ “admin” のデフォルトは、555-555-555 です。 コンソールに正しくログインできているかどうかがわかります。

task_begin
get http://192.168.70.116/pandora_console/index.php?sec=workspace&sec2=operation/users/user_edit
cookie 1
resource 1
check_string 555-555-5555
task_end

最後にコンソールからログアウトし、ログアウトメッセージを探します。

task_begin
get http://192.168.70.116/pandora_console/index.php?bye=bye
cookie 1
resource 1
check_string Logged out
task_end

Pandora FMS 上での全体の設定は次のようになります。

goliat_full_sample.jpg

WEB リクエストの動作

拡張プロパティのフィールドは他のタイプのモジュールのフィールドと似ていますが、WEB チェックではいくつかの異なるフィールドがあります。

タイムアウト(Timeout)

これはリクエストのタイムアウトです。この時間を超えるとリクエストは破棄されます。

エージェントブラウザID(Agent browser id)

これは、特定のページが一部の Web ブラウザのみを受け入れる場合に使用する Web ブラウザの識別子です。(詳細は、https://www.zytrax.com/tech/web/browser_ids.htm を参照してください)

リクエスト(Requests)

Pandora FMS は、このパラメータで示された回数だけチェックを繰り返します。 チェックの 1つが失敗した場合、障害とみなされます。モジュール内のチェックの数に応じて、一定数のページが取得されます。 つまり、モジュールが 3つのチェックで構成されている場合は、3ページがダウンロードされ、リクエストフィールドに値が設定されている場合は、ダウンロード数はその数を掛け合わせた数になります。 モジュールが処理を完了するのにかかる合計時間を把握するには、これを覚えておくことが重要です。

リトライ(Retries)

成功するまで リクエスト(Request) を実行する数です。例:

  • リトライ = 2、リクエスト = 1: 最初のテストに失敗すると、もう一度実行し、2回目で成功すると、正常と判断します。
  • リトライ = 1、リクエスト = 2: 2回のチェックを実行します。しかし一方の失敗で、障害と判断します。

HTTP の簡単な認証

いくつかのウェブページでは、HTTP 基本認証 を必要とします。通常、これは高速認証、高度なセキュリティチェック(暗号化、データ永続性など)へのアクセスを可能にする最小限のセキュリティとして使用されます。

(上記スクリーンショットのように)拡張オプションで設定することも、次の設定トークンを使用して WEB タスク定義で直接設定することもできます。

チェックタイプ(Check type)

HTTP サーバチェックタイプ

http認証(ログイン)(http auth (login))

ユーザ名

http認証(パスワード)(http auth (password))

パスワード

プロキシ認証レルム(Proxy auth realm)

認証レルム名

プロキシ認証(サーバ)(Proxy auth (server))

待ち受けているドメインと HTTP ポート

プロキシURL(Proxy URL)

プロキシサーバの URL

プロキシ認証(ログイン)(Proxy auth (login))

プロキシ接続ユーザ

プロキシ認証(パスワード)(Proxy auth (pass))

プロキシ接続パスワード

タスク全体の例:

 task_begin
 get http://artica.es/pandoraupdate4/ui/
 cookie 1
 resource 1
 check_string Pandora FMS Update Manager \(4.0\)
 http_auth_serverport artica.es:80
 http_auth_realm Private area
 http_auth_user admin
 http_auth_pass xxxx
 task_end

http_auth_pass に指定するパスワードではクォーテーションには対応していません。シングルクォート ' の利用は避けてください。

WEB サービスおよび API モニタリング

Pandora FMS と Goliat webチェックにて、REST APIを監視することができます。ただし、SOAP や XML-RPC を用いた API は監視できません。

例えば、動作しているときに数値(0からn)で返すような特定の Web API を監視したい場合、次のようなコードで、Pandora は何も応答が無い場合に障害と認識します。

task_begin
get http://artica.es/integria/include/api.php?user=my_user&pass=my_pass&op=get_stats&ms=opened,,1
check_string \n[0-9]+
task_end

実際の応答は次の通りです。

HTTP/1.1 200 OK
Cache-Control: no-store, no-cache, must-revalidate, post-check=0, pre-check=0
Connection: close
Date: Mon, 13 May 2013 15:39:27 GMT
Pragma: no-cache
Server: Apache
Vary: Accept-Encoding
Content-Type: text/html
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Client-Date: Mon, 13 May 2013 15:39:27 GMT
Client-Peer: 64.90.57.215:80
Client-Response-Num: 1
Client-Transfer-Encoding: chunked
Set-Cookie: a81d4c5e530ad73e256b7729246d3d2c=pcasWqI6pZzT2x2AuWo602; path=/

0

正規表現で出力を確認することにより、全体が正しく動作しているかを確認できます。より複雑な出力の場合は、それに合わせた正規表現を用います。データ部分だけでなく、応答内容全体をチェックすることに注意してください。そのため、HTTP ヘッダーにもマッチさせることができます。

別の例:

 task_begin
 get https://swapi.dev/api/planets/1/
 get_content Tatooine
 task_end

この場合、モジュールが監視を実行できるようにするデータのタイプは、'Remote HTTP module to retrieve string data (web_content_string)' である必要があります。

 task_begin
 get https://pokeapi.co/api/v2/pokemon/ditto/
 get_content imposter
 task_end

上記のモジュールと同様に、モジュールが正しく機能するには、定義されたデータのタイプが Remote HTTP module to retrieve string data (web_content_string)' である必要があります。

get_content_advanced でモジュールを作成することもできます。

 task_begin
 get https://api.hillbillysoftware.com/Awards/ByYear/1990
 get_content_advanced "Nominee":"([A-Za-z]]+)","Year":"1990"
 task_end

この呼び出しは以下を返します。

Pandora FMS は、次のように結果を表示します。

呼び出しが正しく実行されるように、括弧内にキャプチャグループを適切に定義することが重要です。

API 呼び出しを作成するときは、宛先 API に呼び出しを許可する適切な権限があるかどうかを確認する必要があります。

HTTPS モニタリング

Goliat は HTTP と HTTPS の両方をチェックできます。 HTTPS を利用しているセキュリティで保護されたウェブサイトのチェックを行うには、その URL にプロトコルを組み込むだけです。

task_begin
get https://www.google.com/accounts/ServiceLogin?service=mail&passive=true&rm=false&continue=https%3A%2F%2Fmail.google.com%2Fmail%2F%3Fui%3Dhtml%26zy%3Dl&bsv=zpwhtygjntrz&ss=1&scc=1&ltmpl=default&ltmplcache=2
cookie 1
resource 0
check_string Google
task_end

拡張オプション

HTTP ヘッダーのカスタマイズ

header オプションで、HTTP ヘッダのカスタマイズしたり追加したりできます。たとえば、Host HTTP ヘッダーを変更するには次のようにします。

 task_begin
 get http://192.168.1.5/index.php
 header Host 192.168.1.1
 task_end

ウェブチェックのデバッグ

ウェブチェックをデバッグしたい場合は、debug <ログファイル> オプションを追加します。ログファイル.req および ログファイル.res というファイルが作成され、HTTP リクエストと応答が記録されます。たとえば次のようにします。

 task_begin
 get http://192.168.1.5/index.php
 debug /tmp/request.log
 task_end

LWP の代わりの Curl の利用

LWP は、複数スレッドで HTTPS リクエストを実行するとクラッシュすることがあります(OpenSSL の制約による)。代替としては curl ツール を利用することです。この問題を解決するためには、/etc/pandora/pandora_server.conf を編集し、次の行を加えます。

web_engine curl

Pandora FMS サーバを再起動すると、ウェブチェックに LWP の代わりに Curl バイナリが利用されます。

高度なトランザクション監視

Goliath が提供する機能に加えて、Web トランザクション監視を実行する他の方法があります。一つは分散型(UX)で、アクセスできないネットワークであっても、サーバとは異なるシステムに “エージェント” として展開します。もう一つは集中化された方法(WUX)です。より詳細については ユーザエクスペリエンス監視 (UX および WUX) を参照してください。

Pandora FMS ドキュメント一覧に戻る