この記事について

みなさん!外形監視していますか!?昨今、Webアプリケーションに対して外形監視を行うことが当たり前になりつつあります。
弊社が常日頃からお世話になっているObservabilityツールのNew Relicを利用することで、外形監視を簡単に実装することが可能です!

New RelicにはSynthetic Monitoringという機能があります。この機能を利用することで外形監視を行うことが可能です。
Synthetic Monitoringはいくつかの機能に分かれており、それぞれできることが異なります。

この記事ではSynthetic Monitoringの全機能を簡単に紹介します!

この記事の想定読者

  • 外形監視についてよく知らない方、知りたい方
  • New Relicを利用して外形監視を実装したい方

外形監視とは

そもそも外形監視とはどのような監視でしょうか!?
一言で言うとシステムに対するアクセスをユーザと同様の視点で行う監視手法です!

外形監視のポイントは、システムの外から監視を行うことです。従来の監視手法ではシステム内からWebアプリケーションのURLへリクエストを送信して、ステータスコードの確認やレスポンスタイムの計測を行なっていました。外形監視ではシステム外からWebアプリケーションのURLへリクエストを送信して、ステータスコードの確認やレスポンスタイムの計測を行います。これによりWebアプリケーションをユーザ目線で監視できるようになります。

コンピューティングリソースやインスタンスのCPU使用率/メモリ使用率/ディスク使用率などのリソースベースの監視は、拡張性が低いオンプレミス/VM環境ではある程度の有用性のあるものでした。
しかし、クラウド上に構築される拡張性の高いシステムに対してリソースベースの監視を行いアラートが発生しても、それがシステムへの影響に寄与しているか/何が原因であるのかに繋がりにくいと言う問題があります。
外形監視によるユーザ視点での監視を行うことで、システムへの影響があった場合にのみアラートを発生させることが可能になります。

つまり現代のWebアプリケーションの監視において、外形監視は必要不可欠な監視手法であると言うことです!

New Relicの外形監視機能

New RelicではSynthetic Monitoringという機能を利用して、外形監視を行います。(他のツールでもSyntheticsという名称で似た機能を出してます。 例:Datadog)

SyntheticsではNew Relicが所有する世界中のパブリックロケーションから外形監視を行うことが可能です。世界中からWebサイトに対してリクエストを送信することができます。どのパブリックロケーションを使うか、設定する段階で指定することができます。またプライベートロケーション機能を利用することで、システム内部からリクエストを送信することができるようになります。(外部公開していないWebサイトなどで利用されることが想定されます)

New Relic Synthetic Monitoringには7つの機能がある

New Relic Synthetic Monitoringには7つの機能があります!

  • Ping monitor (Availability)
  • Broken links monitor (Page link crawler)
  • Certificate check monitor (SSL certificate expiration)
  • API tests (Endpoint availability)
  • Simple browser monitor (Page load performance)
  • Scripted browser monitor (User flow / functionality)
  • Step monitor (User step execution)

https://docs.newrelic.com/jp/docs/synthetics/synthetic-monitoring/using-monitors/intro-synthetic-monitoring/

では、それぞれについて紹介していきます!

Ping monitor (Availability)

最も基本的で簡単な外形監視を行います。

指定したURLに対してHTTP(S)リクエストを送信して、ステータスコードやレスポンス時間を取得することができます。

  • あるURLにリクエストを送信して、レスポンスのステータスコードが400/500であればアラートを発生させる
  • あるURLにリクエストを送信して、レスポンス時間が許容範囲外であればアラートを発生させる

このような監視を行うことが可能になります。

以下は実際にPing monitorを利用して、監視を実装した際の記事になります。

New RelicのSynthetic Monitorを利用した外形監視を実装する

Broken links monitor (Page link crawler)

指定したURLのサイト内のリンクをクローリングしてリンク切れの有無を確認することができます。

外部のサイトやサービスにリンクを貼るようなWebアプリケーションにとっては有用な外形監視手法です。

こちらもURLを指定するだけで実装することが可能であるため、簡単にページのリンク切れがないかを監視することができるようになります。

Certificate check monitor (SSL certificate expiration)

指定したドメインのSSL証明書の有効期間を取得します。

SSL証明書をうっかり失効させて、Webアプリケーションへ接続できなくなってしまうということを事前に防ぐことができます。

API tests (Endpoint availability)

APIエンドポイントが正常に機能しているかを確認することができます。
ペイロードを定義して、Postリクエストを指定したURLに送信することが可能です。そしてレスポンスの中身を確認することができます。

以下のように、NodeJSで定義することができます。

var assert = require('assert');

$http.post('http://httpbin.org/post',
  // Postするペイロード(Json)
  {
    json: {
      widgetType: 'gear',
      widgetCount: 10
    }
  },
  // 返り値チェックのコールバック関数
  function (err, response, body) {
    assert.equal(response.statusCode, 200, 'Expected a 200 OK response');

    console.log('Response:', body.json);
    assert.equal(body.json.widgetType, 'gear', 'Expected a gear widget type');
    assert.equal(body.json.widgetCount, 10, 'Expected 10 widgets');
  }
);

Simple browser monitor (Page load performance)

Simple browser monitorは一言で言うと、Ping monitorの上位互換機能です。

Ping monitorに比べて、実際のユーザーからのアクセスをより正確にエミュレートすることが可能です。具体的にはユーザーエージェントがGoogle Chromeとして識別されます。
URLを指定するだけで、実際のブラウザ(Chrome)からリクエストを送信して、HTML/CSS/JS/静的ファイルのパフォーマンスチェックまで行うことが可能です。

Scripted browser monitor (User flow / functionality)

ユーザーのブラウザ操作をエミュレートした監視ができます。

リクエストを送信して、レスポンスの中身を確認するだけではなく、ユーザーがChromeブラウザ上で行うウェブサイトへのログインなどの操作が問題なく行えているかを確認することができます。

以下のようにNodeJSでSeleniumを利用することで、ユーザーの操作を定義します。

var assert = require('assert');

$browser.get('http://example.com').then(function(){
  // http://example.comへアクセスし、そのページのh1の要素から文字列を取得する。そして"Example Domain"と一致するか確認する。
  return $browser.findElement($driver.By.css('h1')).then(function(element){
    return element.getText().then(function(text){
      assert.equal('Example Domain', text, 'Page H1 title did not match');
    });
  });
}).then(function(){
  // リンク先が"https://www.iana.org/domains/example"と一致するかを確認する。
  return $browser.findElement($driver.By.css('div > p > a')).then(function(element){
    return element.getAttribute('href').then(function(link){
      assert.equal('https://www.iana.org/domains/example', link, 'More information link did not match');
    });
  });
});

実装コストは高いですが、(Seleniumでできる範囲で)柔軟で複雑な監視を実装することが可能になります。

Step monitor (User step execution)

Scripted browser monitorをGUIで簡単に実装できる機能です。

できることはScripted browser monitorと同じです。Scripted browser monitorではNodeJSでユーザーの操作を定義しなくてはいけないので実装コストが高くなりがちというデメリットがあります。Step monitorはそんなデメリットを解消するための機能です。コード(NodeJS)ではなくGUIによりユーザーの操作を定義します。

以下はStep monitorを実際に利用した際の記事になります。

[New Relic] SyntheticsでWebサイトへのユーザ操作をシミュレーションした外形監視を行う

実装コストが低くなるというメリットがあるStep monitorですが、Scripted browser monitorでは利用できたSecure Credential(パスワードなどの機密情報を安全に利用できるようにする機能、AWSで言うとパラメータストアやシークレットマネージャに相当)が利用できないといったデメリットもあります(2023年12月現在)。

最後に

New Relicで利用できるSynthetic Monitoringの全機能を紹介させていただきました!
ぜひ、利用してWebアプリケーションの信頼性を向上させていきましょう!