====== ウェブ監視 ====== {{indexmenu_n>6}} [[ja:documentation:start|Pandora FMS ドキュメント一覧に戻る]] ===== クラッシックなウェブ監視 ===== ==== 概要 ==== Enterprise 版{{:wiki:icono-modulo-enterprise.png |Versión Enterprise.}}では、Goliat サーバと呼ばれる Webサーバコンポーネントを用いて、Web を監視することができます。 {{ :wiki:goliatlogo_2.jpg?200|goliatlogo_2.jpg}} この機能は、Pandora FMS の創設者の古いプロジェクトが元になっています。Goliat F.I.S.T. は、Web サービスにおいて動的な認証の実行を行うオープンソースのプロジェクトでした。(2002年から)ソースコードを確認することができますが、更新は 2010年で終了しました。 [[https://sourceforge.net/projects/goliat/|https://sourceforge.net/projects/goliat/]] Pandora FMS では、ネットワークサーバ、WMIサーバ、プラグインサーバなどと同様に、独立したサーバとして機能します。 このシステムは、"Webトランザクション" という考えのもとで動作します。ここでは、各トランザクションは 1つまたは複数の連続ステップで定義され、トランザクションを正常に完了させるために、正しく順序だてられている必要があります。"Webトランザクション" の実行では、フォーム内での自分自身の認証、メニューオプションのクリック、フォームの入力、各ステップで特定のテキスト文字列を返すことの確認など、完全なブラウジングプロセスを忠実に再現します。 処理のある時点で障害が発生するとチェックに失敗します。 完全なトランザクションには、実際のナビゲーションに含まれるすべてのリソース(グラフィックス、アニメーションなど)のダウンロードが含まれます。 応答時間とパフォーマンスチェックの実行に加えて、Webページから値を抽出して処理することも可能です。 Goliatは、HTTP と HTTPS の両方を透過的に監視し、クッキーによるセッション管理、パラメータの受け渡しをサポートします。もちろん、各ページに関連するリソースをダウンロードできます。ただし、実行時の動的な javascript の管理などに制限があります。 より複雑な Web トランザクションの場合、Pandora FMS には [[:ja:documentation:03_monitoring:13_user_monitorization|WUX 監視]]というより強力で複雑なコンポーネントがあります。 ==== インストールと設定 ==== Goliat を利用できるようにするには、最初に Pandora FMS Enterprise サーバを有効化する必要があります。 webserver 1 実行したいリクエスト数に応じて、スレッド数およびデフォルトのタイムアウトを増やします。 web_threads 1 web_timeout 60 Goliat が使うライブラリのタイプ (LWP または CURL) を変更できる拡張設定トークンがあります。デフォルトでは CURL が利用されていますが、切り替えることができます。 web_engine curl \\ Pandora FMS has protection against [[https://en.wikipedia.org/wiki/Cross-site_request_forgery|CSRF]] and it may happen that the web checks, when debugged, you get this message:\\ ''Cannot verify the origin of the request'' \\ Please take this protection into account when considering the use of "[[:en:documentation:03_monitoring:13_user_monitorization#introduction|WUX monitoring]]". \\ Pandora FMS は [[https://en.wikipedia.org/wiki/Cross-site_request_forgery|CSRF]] に対して保護されており、デバッグ時に Web チェックで次のメッセージが表示される場合があります:\\ ''Cannot verify the origin of the request'' \\ [[:ja:documentation:03_monitoring:13_user_monitorization#概要|WUX 監視]] の使用を検討する際には、この保護を考慮に入れてください、 ==== ウェブモジュールの作成方法 ==== ウェブページをモニタするには、まずはモジュールタブをクリックします。その後 'ウェブサーバモジュールの新規作成(Create a new webserver module)' を選択し、//作成(Create)// をクリックします。 {{ :wiki:pfms-creating_web_modules-goliat_server-img_002.png }} //作成//をクリックすると、ウェブをモニタするために必要な設定を入力するためのフォームが表示されます。名前や、Webチェックのタイプなど、基本的なものです。 {{ :wiki:goliat_types.jpg?600 |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 {{ :wiki:resources-manage_agents-modules-remote_http_module_to_check_server_status_code.png?550 }} 保存したのち、モジュールを強制実行して結果を見ることができます。 {{ :wiki:resources-manage_agents-modules-remote_http_module_to_check_server_status_code-result.png?600 }} コマンドを追加した別の例: task_begin get http://apache.org/ cookie 0 resource 0 check_string Apache Software Foundation task_end この基本的な例では、ウェブページに文字列があるかどうかをチェックしています。これは変数 **check_string** があるためです。 この変数では、HTML 自体をチェックすることはできません。テキストのサブストリングのみを検索します。 私たちは、Webサイト <[[http://apache.org|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 の柔軟性により**、デバッグボタンを使用できます。 {{ :wiki:resources-manage_agents-modules-remote_http_debug.png?700 }} モジュールの作成時点では、モジュールは有効化されておらず、最初のチェックを実行した後モジュールを使用できるようになります。これを強制的に実行して時間を節約できます。 このモジュールを変更するときは、**デバッグ(Debug)** ボタンをクリックすると、デバッグモードに入って **クエリ(Query)** を編集できます。 {{ :wiki:resources-manage_agents-modules-remote_http_debug-curl_parameters.png?800 }} モジュールのクエリを **クエリの実行(Execute query)** ボタンで実行したり、目的の結果が得られるまで他の値に変更して再実行したりできます。 {{ :wiki:resources-manage_agents-modules-remote_http_debug-curl_parameters_pfms.png?700 }} ==== ウェブの応答時間チェック ==== ウェブの応答時間をチェックしたい場合は、モジュールタイプ //Remote HTTP module to check latency// を選択する必要があるのみです。 の応答時間を知りたい場合、コードは次のようになります。 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:my_pwd@proxy.domain.com:8080 {{ wiki:Goliat_proxy_conf.png?700 }} ==== Webコンテンツの取得 ==== Sometimes monitoring does not consist of finding out whether a specific Web site is working or how long it takes, but to get a real time value, such as the total number of modules registered in the same PFMS server [[:en:documentation:08_technical_reference:02_annex_externalapi#get_total_modules|through the API]]. For this example a module called **Remote HTTP module to retrieve numeric data** will be used with the appropriate regular expression: 特定の Web サイトが稼動しているか、どれくらい時間がかかっているかを知りたいわけではなく、[[:ja:documentation:08_technical_reference:02_annex_externalapi#get_total_modules|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 出力は次のようになります。 {{ :wiki:pfms-creating_web_modules-goliat_server-img_100.png }} It is also possible to specify a more complex regular expression for collecting data from more complex HTTP responses with the ''get_content_advanced'' configuration token. In this **didactic** example, the year is obtained in the footer of Pandora FMS official documentation (and stored in a string data type, **Remote HTTP module to retrieve string data**):{{ :wiki:pfms-creating_web_modules-goliat_server-img_110.png }} また、より複雑な HTTP 応答からのデータを収集するための正規表現を設定トークン ''get_content_advanced'' で指定することもできます。この**実践的な**例では、Pandora FMS 公式ドキュメントのフッターから年を取得します(また、文字列データタイプ **Remote HTTP module to retrieve string data** で保存します: {{ :wiki:pfms-creating_web_modules-goliat_server-img_110.png }} task_begin get https://pandorafms.com/manual/ get_content_advanced \(c\) ([\d]+) Pandora FMS\(tm\) task_end {{ :wiki:pfms-creating_web_modules-goliat_server-img_120.png }}Note that the inverse interval has been used: if a string **other than** ''2022'' is received, the module will go into critical. {{ :wiki:pfms-creating_web_modules-goliat_server-img_120.png }}しきい値の反転が使用されていることに注意してください。''2022'' 以外の文字列を受信すると、モジュールは障害状態になります。 * The part of the regular expression defined in ''get_content_advanced'' must be enclosed in brackets. * If the text to be looked for contains parentheses, you must escape the characters by means of the backslash ''\''. * ''get_content_advanced'' に定義する正規表現は、カッコでくくらなければいけません。 * 検索するテキストにカッコが含まれている場合は、バックスラッシュ ''\'' を使用して文字をエスケープする必要があります。 {{ :wiki:pfms-creating_web_modules-goliat_server-img_130.png }} To configure the thresholds that will trigger warning or critical status, use the module configuration to verify that the received string matches what is expected. 警告または障害状態のしきい値を設定するには、モジュールの設定を使用して、受信した文字列が期待どおりのものであることを確認します。 ==== ウェブページのフォームのチェック ==== より実用的な、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 上での全体の設定は次のようになります。 {{ wiki:goliat_full_sample.jpg?800 }} ==== 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 の簡単な認証 ==== いくつかのウェブページでは、[[https://en.wikipedia.org/wiki/Basic_access_authentication|HTTP 基本認証]] を必要とします。通常、これは高速認証、高度なセキュリティチェック(暗号化、データ永続性など)へのアクセスを可能にする最小限のセキュリティとして使用されます。 [[:wiki:conexion_http.png?id=ja:documentation:03_monitoring:06_web_monitoring&media=wiki:conexion_http.png|{{ :wiki:conexion_http.png?nolink&650 }}]] (上記スクリーンショットのように)拡張オプションで設定することも、次の設定トークンを使用して 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 The use of quotation marks in the password for ''http_auth_pass'' is not supported. Avoid using single quotes '' ' ''. ''http_auth_pass'' に指定するパスワードではクォーテーションには対応していません。シングルクォート '' ' '' の利用は避けてください。 ==== WEB サービスおよび API モニタリング ==== Pandora FMS と Goliat webチェックにて、[[https://en.wikipedia.org/wiki/Representational_state_transfer|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 この呼び出しは以下を返します。 [[:wiki:apiwiki1.png?id=ja:documentation:03_monitoring:06_web_monitoring&media=wiki:apiwiki1.png|{{ :wiki:apiwiki1.png?nolink&600 }}]] Pandora FMS は、次のように結果を表示します。 [[:wiki:apiwiki2.png?id=ja:documentation:03_monitoring:06_web_monitoring&media=wiki:apiwiki2.png|{{ :wiki:apiwiki2.png?nolink&400 }}]] 呼び出しが正しく実行されるように、括弧内にキャプチャグループを適切に定義することが重要です。 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<mpl=default<mplcache=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 の制約による)。代替としては [[https://curl.se/dlwiz/|curl ツール]] を利用することです。この問題を解決するためには、///etc/pandora/pandora_server.conf// を編集し、次の行を加えます。 web_engine curl Pandora FMS サーバを再起動すると、ウェブチェックに LWP の代わりに Curl バイナリが利用されます。 ===== 高度なトランザクション監視 ===== Goliath が提供する機能に加えて、Web トランザクション監視を実行する他の方法があります。一つは分散型(UX)で、アクセスできないネットワークであっても、サーバとは異なるシステムに "エージェント" として展開します。もう一つは集中化された方法(WUX)です。より詳細については [[ja:documentation:03_monitoring:13_user_monitorization|ユーザエクスペリエンス監視 (UX および WUX)]] を参照してください。 [[ja:documentation:start|Pandora FMS ドキュメント一覧に戻る]]