New Relic による End to End の外形監視

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株式会社 シニアテクニカルサポートエンジニア OSSの運用監視ソフトウェアの日本におけるテクニカルサポート、テクニカルトレーニングの立ち上げを行い、VMwareベースのクラウドサービス開発、AWSテクニカルサポート、クラウドアーキテクトを経て現職。 テクニカルサポート、テクニカルトレーニング、運用コンサルを専門領域としてお客様の運用負荷軽減を目指す。得意分野は運用設計、クラウド設計、OSSソフトウェア。 View posts by .