New Relic Synthetics
New Relic には外形監視を行う New Relic Synthetics というサービスがあります。
New Relic Synthetics を利用する事で
- WEBサービスの死活監視
- 世界中からのアクセス速度測定
- SaaS サービスのユーザ操作シナリオ監視
- APIの応答監視
などを行う事ができます。
モニタータイプ
New Relic Synthetics では監視のための設定を「モニター」と呼びます
New Relic Syntheticsには4種類のモニターがあり、このモニターを使い分けて様々なモニタリングを実現します。
モニタータイプ | 説明 |
Ping | pingモニターは、最も単純なタイプのモニターです。アプリケーションがオンラインかどうかを確認します。
単純なJava HTTPクライアントを使用してサイトにリクエストを送信します。 アクセスログで他のモニタータイプと互換性を持たせるためにユーザーエージェントはGoogle Chromeとして識別されます。 Pingモニターはフルブラウザではないため、JavaScriptを実行しません。URLの死活監視に利用する事ができます。 |
SimpleBrowser | SimpleBrowserモニターは、Google Chromeのインスタンスを使用してサイトにリクエストします。
単純なpingモニターと比較すると、これは実際の顧客訪問のより正確なエミュレーションです。 ユーザーエージェントはGoogle Chromeとして識別されます。ランディングページなど簡単なページの性能監視を行う事ができます。 |
ScriptBrowser | ScriptBrowserモニターは、シナリオ監視に利用されます。
Webサイトで操作を実行し、挙動を確認するカスタムスクリプトを作成できます。 モニターはGoogle Chromeブラウザーを使用します。さまざまなサードパーティモジュールを使用して、シナリオScriptを作成することもできます。WEBサービスのログイン確認などユーザーの操作をシミュレートした稼働監視、性能監視を行う事ができます。 |
APITest | APITestは、APIエンドポイントを監視するために使用されます。ウェブサイトだけでなくアプリサーバーやAPIサービスを監視する事が可能になります。
New Relicはhttp-requestモジュールを使用しエンドポイントへのHTTP呼び出しを行い、結果を検証します。APIサービスの正常性監視を行うことができます。 |
それぞれのモニターの設定方法と特徴を見ていきます。
Pingモニター
New Relic Synthetics のPingモニターはICMP Pingではありません。
HTTPクライアントとしてWEBページのHTMLソースを取得します。
基本設定項目
Pingモニターではモニター名とターゲットURLを指定するだけで設定ができます。
オプション設定項目
追加の項目として以下の内容を設定できます。
Add a validation string or Advanced options | 検証文字列:読み込んだサイト上に指定した文字列があるかどうかを検証します。
指定した文字列が存在しない場合はエラーになります。 |
Verify SSL | チェックを付けた場合:SSL証明書チェーンの有効性を検証します。※1 |
Bypass HEAD request | チェックを付けた場合:HEAD リクエストをスキップしGETリクエストを行います。 |
Redirect is Failure | チェックを付けた場合:リダイレクト先を追跡せずリダイレクトが発生した場合はエラーとします。 |
※1
以下のコマンドで判定内容をシミュレーションできます。
openssl s_client -servername {YOUR_HOSTNAME} -connect {YOUR_HOSTNAME}:443 -CApath /etc/ssl/certs -verify_hostname {YOUR_HOSTNAME} > /dev/null
上記のコマンドの結果が0 以外になる場合にエラーになります。
モニターの実行場所
モニターの実行場所にチェックを付けます。世界中のロケーションからモニタリングを実施することができます。イントラネット内の社内サービスなどインターネットからアクセスできないサービスに対してもプライベートロケーションを利用する事でチェックを実行することができます。
モニタリング周期
モニタリングを行う周期をスライドバーで指定します。
モニタリング結果
設定名をクリックするとモニタリング結果を確認できます。
Summary
各モニターからの応答時間が可視化されます。
Result
1回1回のモニタリング毎の情報が可視化されます。
遅いロケーションや失敗したリクエストなどの確認ができます。
また応答時間だけでなく、DNS名前解決時間、TCPコネクション確立時間、コンテンツ受信時間などが可視化されます。
Resource
取得したページ要素を確認できます。
Pingモニタリングでは対象URLのHTMLファイルのみを取得します。
Failures
Failuresでは失敗したリクエストが表示されます。
日時、失敗したモニター、失敗時のエラーメッセージが確認できます。
SLA
SLAでは日次、週次、月次のSLAを表示することができます。
Public SLA をOnにすると共有URLを取得できます。
このURLを公開することでサービスSLAをユーザーに示す事もできます。
SimpleBrowser
基本設定項目
SimpleBrowserモニターの設定項目はPingモニターの設定項目とほぼ同じです。
SimpleBrowserではBypass HEAD request とRedirect is Failureの設定はありません。
モニタリング周期
SimpleBrowserのモニタリング周期設定ではスライドバーの下にチェックカウントが表示されます。
利用可能なチェック数は契約プランによって異なります。
契約件数と現在の設定(ロケーション数とチェック周期)で消費するチェック数を見ながら設定を行うことができます。
※Pingモニターではチェック数を消費しません。
モニタリング結果
SimpleBrowserモニターではHTMLだけではなく、JavaScriptやCSS,イメージファイルなどページ要素を取得します。
Resources ではResource毎のサイズや所要時間が可視化されます。
外部Resourceの応答が悪い場合などサイト構成の問題点を把握することも可能となります。
ScriptBrowser
基本設定項目
ScriptBrowserの基本設定では名前、ロケーション、監視周期のみを設定します。
Script
ScriptBrowserで利用するScriptはSelenium WebDriverJSによって動作します。
具体的なScript関数はSynthetics ScriptBrowserReferenceを確認してください。
Script例
$browser.get("https://my-website.com").then(function(){
return $browser.findElement($driver.By.linkText("Configuration Panel"));
}).then(function(){
return $browser.findElement($driver.By.partialLinkText("Configuration Pa"));
});
ScriptBrowserのScriptはSerenium WEBDriverJSで動作しますので、Serenium IDEを利用してGUIによって作成することもできます。
GUIでベースとなるScriptを作成し、細かな変更はコード修正で行うなどの柔軟な設定が行えます。
Serenium IDEによるScript作成については
Serenium IDEでScriptBrowserのScriptを作成する をご覧ください。
Secret credentials
ログインスクリプトなどで必要となる認証情報はSecret credentialsとして不可視の変数とすることができます。
Credential名と値を登録します。
登録された認証情報はクリックするだけでScript内部で呼び出す事ができます。
これによりScript自体をセキュアに保つことが可能ですし、定期的なパスワード変更にもScriptを変更する事無く、Secret credentialsの値を変更するだけで対応することができます。
モニタリング結果
ScriptBrowserでは画面遷移を行い複数のページをモニタリングすることができます。
APIテスト
基本設定項目
APIテストの設定項目はScriptBrowserと同一です。
Script
APIテストではHTTP request clientを利用してAPIエンドポイントに対してリクエストを送信します。
GETリクエストやPOSTリクエストを送りその戻り値の評価を行います。
期待される戻り値が無い場合にエラーになります。
リクエストの作成例はドキュメントを参照してください。
Script例
//Define your authentication credentials.
var myAccountID = '{YOUR_ACCOUNT_ID}';
var myInsertKey = '{INSERT_KEY}';
//Import the `assert` module to validate results.
var assert = require('assert');
var options = {
//Define endpoint URL.
url: "https://insights-collector.newrelic.com/v1/accounts/"+myAccountID+"/events",
//Define body of POST request.
body: '[{"eventType":"SyntheticsEvent","integer1":1000,"integer2":2000}]',
//Define insert key and expected data type.
headers: {
'X-Insert-Key': myInsertKey,
'Content-Type': 'application/json'
}
};
$http.post(options, function(error, response, body) {
//Log status code to Synthetics console. The status code is logged before the `assert` function,
//because a failed assert function ends the script.
console.log(response.statusCode + " status code")
//Call `assert` method, expecting a `200` response code.
//If assertion fails, log `Expected 200 OK response` as error message to Synthetics console.
assert.ok(response.statusCode == 200, 'Expected 200 OK response');
var info = JSON.parse(body);
//Call `assert` method, expecting body to return `{"success":true}`.
//If assertion fails, log `Expected True results in Response Body,` plus results as error message to Synthetics console.
assert.ok(info.success == true, 'Expected True results in Response Body, result was ' + info.success);
});
プライベートロケーション
プライベートロケーションはデフォルトでは無効になっています。
必要な場合は担当営業にご連絡ください。
プライベートロケーションを作成する場合は「Private locations」からCreate private locationをクリックします。
プライベートミニオンの設定では識別するための名前を入力します。
Enable verified script execution にチェックを入れた場合、モニターの実行場所としてそのロケーションを選択する際にパスワードの入力を求められるようになります。
これにより他の管理者に勝手にプライベートロケーションを使われる事がなくなります。
※New Relicではこのパスフレーズを保存しません。もしパスフレーズを忘れた場合New Relic Support に連絡いただいてもパスワードの回復やリセットを行う事はできませんのでご注意ください。
プライベートロケーションを作成するとそのプライベートロケーションを実行するためにコマンドが表示されます。
お客様が管理するKubernetes上、あるいはDockerコンテナとして起動することができます。
このコンテナをイントラネット内で起動していただくことで、インターネットからアクセスできない社内向けWEBサービスのモニタリングも実施できるようになります。
本ブログに掲載されている見解は著者に所属するものであり、必ずしも New Relic 株式会社の公式見解であるわけではありません。また、本ブログには、外部サイトにアクセスするリンクが含まれる場合があります。それらリンク先の内容について、New Relic がいかなる保証も提供することはありません。