New Relic Synthetics で POST してレスポンスの内容を判定する外形監視をしてみた

2021.12.28

New Relic Synthetics で外形監視を試してみました。定期的なPOSTメソッドのリクエストを実行し、ステータスコード200 OKでかつレスポンスボディの内容を判定して意図した内容ものかチェックしてみます。

参考までに CloudWatch Synthetics でも同様のことを試してみました。

設定してみた

SyntheticsタブからCreate monitorを選択。

APIをモニタリングしたいのでEndpoint availabilityを選択。

New Relic Synsteices 上の管理名称、実行間隔を設定。

Tokyo, JPロケーションを選択。モニタリング対象のAPIはAWSのap-northeast-1(東京リージョン)にあります。そもそも New Relic Synthetics はどこで動くのでしょうか?調べてみました。

AWSでした。Tokyo, JPap-northeast-1を示していました。今回の場合、東京リージョン障害時にサービスと同時に外形監視(New Relic Synthetics)も止まることが考えられます。仮に応答時間が重要な要件の場合、ロケーション先の検討は必要になることでしょう。

モニタリング用のスクリプト作成が肝なので後でやります。そのまま進めます。

設定完了しました。すごく簡単です。

モニタリングスクリプト改修

対象のアイテムを選択して、Scriptからスクリプトを編集できます。

監視対象としているAPIは、リクエストボディで渡す日本語のメッセージを翻訳し、レスポンスボディで返してくれる翻訳APIです。レスポンス内容を確認するスクリプトにしてみます。

  • 所定の日本語メッセージ「New Relicからのチェックです」を定期的にPOSTします。
  • レスポンスボディが「It's a check from New Relic」であるかチェックします。
  • ステータスコードが200番であるかチェックします。
var assert = require('assert');

var data = 'New Relicからのチェックです';

//Declare optional metadata
var options = {
       //Specify the endpoint URL
       url: 'https://api.example.com/v1/translate',
       //Set SSL option
       strictSSL: true,
       form: data
};

$http.post(options,
  // Callback
  function (err, response, body) {
    assert.equal(response.statusCode, 200, 'Expected a 200 OK response');

    console.log('Response:', body);
    var json = JSON.parse(body);
    assert.equal(json.output_text, 'It\'s a check from New Relic', 'output_text');
  }
);

5分間隔の定期実行設定のため少し放置すると以下の様にグラフが表示されるようになります。

観測

2日前に同スクリプト内容で作成しデータ収集していた3分クッキング的な仕込みがありますので、そちらから記録できている内容を紹介します。

Summary

各モニターからの応答時間が可視化されて表示されます。応答時間遅いときがありました。監視対象のAPIはAPI Gatewayの裏側はLambdaの構成です。Syntheics以外でリクエストは受けることもないかつ、Syntheicsは定期実行の間隔が15分にしていたため、毎回Lambdaがコールドスタートになっており応答が遅かったです。後に定期実行を5分間隔にしたため応答時間が早くなっています。

Results

モニターの詳細を可視化して確認でできます。

応答時間もSummary同様に確認できます。

実行結果をクリックすると詳細を確認できます。

Timelineタブではどこに時間がかかっていたのかを追うことができます。

Script logタブはモニタリングスクリプトの実行結果がを確認できます。期待通り文字列(英訳)のレスポンスが返ってきています。

失敗させてみる

日本語から翻訳する言語を英語から別言語に変更しレスポンス内容を見て判定しているか確認します。

翻訳Lambda の設定を変更しAWS Translateでフランス語翻訳設定にしました。期待通り失敗しています、薄い赤い点が見にくいかもしれませんが矢印のところです。

Resultを確認するとFAILDと表示されています。詳細を確認してみます。

Script logで結果を確認してみました。期待された文字列ではないことが確認できます。文字コードの問題のような気がしますが、例外処理は正しく書かないとエラーになってしまいました。

回復させる

翻訳Lambda を英訳設定に戻しました。矢印のところを堺に灰色(正常)の点に戻っています。

おわりに

定期実行の設定が簡単で楽です!!先日CloudWatch Syntheticsを設定していたので尚の事そう思うのかもしれません。

Nwe Relic のアカウントはクレジットカード不要で無料作れますので気になった方は実際試した方が早いです。

今更ながらですがキャプチャをブログに載せるならダークモードではなく、ライトモードの方が見やすかったですかね...

きっと少し見やすいですよね、次回からは白背景にします。