AMAZON CLOUDWATCH SYNTHETICS CANARIESを使ったAPIのモニタリング

AMAZON CLOUDWATCH SYNTHETICS CANARIESを使ったAPIのモニタリング

はじめに

AWS CloudWatch

AWSで実行されるリソースの監視、統計、分析をサポートするサービスです。このサービスは、リアルタイムの実用的な情報を提供して、 RAM、ディスクなどのサービス、インフラストラクチャー、アプリケーションのメモリ領域を監視させます。警告を使用して、アプリケーションのパフォーマンスを最適化して、リソースの使用を管理してします。

また、Amazon のインフラストラクチャーに実行しているアプリケーションなどのAWS リソースやシステム全体の状況が理解できるようになります。

AWS Canary

APIとエンドポイントを監視するためにAmazon CloudWatch Syntheticから作りました。Canariesは、ルートに沿って実装できるスクリプトであり、クライアントのように稼働を行います。そのため、アプリケーションへのユーザートラフィックがなくても、エンドユーザーの体験を連続的に検出できます。Canaiesを使うことでエンドユーザーよりも早く問題が検出できます。Canariesは、指定されたスケジュールに従って実行するように設定できます。

Canariesは、Node.jsまたはPythonで書き込まれるスクリプトです。また、HTTPとHTTPSのプロトコルでも稼働できます。

Canariesは、エンドポイントの可用性とレイテンシーをチェックして、同時に読み込み時間のデータと UI のスクリーンショットが保存できます。REST API、URL、ウェブサイトのコンテンツを監視して、フィッシング詐欺やクロスサイトスクリプティング攻撃やコードの挿入などの不正な変更がチェックできます。

Canary作成手順

ステップ①:https://console.aws.amazon.com/cloudwatch/でCloudWatch コンソールを開きます。

ステップ②:ナビゲーションペインで、Application monitoring → Synthetics Canariesを選択した後、Create Canaryを選択します。

 

ステップ③: 

次のいずれかを選択します。

1. “Use a blueprint“を選択した場合:既存テンプレートスクリプトを使う
2. “Inline Editor“を選択した場合:自分のNode.js スクリプトをアップロードして、カスタマイズするCanaryを作成する
3. “Import from S3“を選択した場合:S3バケットから自分のスクリプトをインポートする
注意:上記の選択では、使っているS3バケットに対し「s3:GetObject」及び「s3:GetObjectVersion」権限が求められます。

この記事では、”Use a blueprint”を選択します。

ステップ④:Use a blueprint“を選択したら、以下のテンプレートスクリプトが出ます。

Heartbeat monitoring
ハートビートスクリプトは、指定したURLをロードし、ページのスクリーンショットとHTTPファイル(HARファイル)を保存します。また、アクセスしたURLのログも保存します。
HARファイルを使用して、ウェブページに関するパフォーマンスデータ詳細を確認できます。
ウェブリクエストのリストを分析して、項目の読み込み時間などのパフォーマンス問題を把握できます。

API canary
REST APIの基本的な読み取り機能と書き込み機能が検出できます。
Canaryは任意のAPIで稼働し、すべてのタイプの機能が検出できます。Canary毎に、複数のAPI呼び出しを行うことができます。

Broken Link Checker
テストしているURL内にリンクを全て収集します。
次の種類のリンクエラーを検出します
• 404 ページが見つからない、URL が正しくない
• ホスト名が無効である
• HTTP レスポンスコードが無効である
• HTTPリクエストが Canary の実行中に常にタイムアウトする
• ホストが正しく設定されていないか、ビジー状態のため接続が常に切断される
• ホストサーバーが、コンテンツもなく、レスポンスコードもない、空のレスポンスを返す

Canary Recorder
Canaryのレコーダーは、ウェブサイト上のクリックと入力のアクションを記録し、上記と同じステップに従うCanaryを作成するために使用できる Node.js スクリプトを自動的に生成します。CloudWatch Synthetics Recorder は、Amazonが提供するGoogle Chrome 拡張機能です。

GUI workflow builder
GUI ワークフロービルダー設計図は、ウェブページに対してアクションが実行できることを検証します。

Visual monitoring
ビジュアルモニタリングは、Canary実行中に撮影されたスクリーンショットと、ベースラインCanary実行中に撮影されたスクリーンショットを比較するコードが含まれています。2 つのスクリーンショット間の不一致が閾値のパーセンテージを超えている場合、Canaryは失敗します。

この記事では、”API canary”を選択します。

 

ステップ⑤:Canaryの名前を入力します。ここで「Canary-api」と命名します。

ステップ⑥:API HTTPリクエスト追加

API HTTP リクエスト詳細にはメソッド、エンドポイントURL、リクエストデータ、ヘッダーを含めています。それらの入力が終わったら、Step nameに名前を入力して、Saveを押下します。

 

ステップ⑦:スクリプトに環境変数を使ったら、Environment variablesを選択して、スクリプトに確定されている環境変数ごとの値を指定します。

 

ステップ⑧:Scheduleでcanary実行頻度を指定することができます。以下のようにオプションが3つあります。

 

• Run continuously:常に実行

• CRON expression:CRONにより実行

• Run once:一回実行

次、Canary毎に実行時間を選択します。ここで「常に実行」と「頻度:20分」を選択します。

 

ステップ⑨:Data retentionでCanaryデータを保持する時間を設定できます。デフォルトは31days (~1 month)です。

 

ステップ⑩:Data StorageでCanaryを実行する度の結果を保持する場所です。「S3 location」では、Canaryを作成する際にデフォルト場所がすでに入力されておきます。或いは「Browse S3」を押下することで既存S3を選択できます。

 

ステップ⑪:Access permissionsで既存ロールを選択、または、Syntheticsにより新しいロールを自動に作成します。

 

ステップ⑫:残り分はデフォルト値で設定して、Create canaryを押下します。API Canaryの作成処理は 1 ~ 2 分かかります。

 

ステップ⑬:Canaryが正常に作成された場合、以下のように見えます。

 

Canaryのグループ作成

ステップ①:https://console.aws.amazon.com/cloudwatch/でCloudWatchコンソールを開きます。

ステップ②:ナビゲーションペインでApplication monitoring → Synthetics Canariesを選択した後、Create Groupを選択します。

 

ステップ③:グループ名を入力します。

 

ステップ④:Canary名前を正しく検索してから、選択してグループに追加します。そしてCreate Groupを押下します。

 

ステップ⑤:グループが正常に作成されたら、上記のステップで選択したCanaryがグループに置くことなのでCanaryを管理しやすくなります。

 

 

Canaryの統計および詳細表示

Canary詳細を表示するために、Canary名前をクリックします。

 

Availabilityタブ:Canary の最近の実行に関する情報が表示されます。実行に成功または失敗したタイムラインや、以下の画像のような問題を表示します。

 

 

実行結果の詳細を参照するために、Download artifactsを押下することでファイルをダウンロードします。

 

Monitoringタブ:Canaryで公開されたCloudWatchメトリクスのグラフが表示されます。これらのメトリクスの詳細については、以下のリンクを参照してください。

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries_metrics.html

 

Configurationタブ:Canaryに関する構成およびスケジュール情報が表示されます。

Groupsタブ:Canary が連携られているグループが表示されます。

Tagsタブ:Canaryと連携しているタグが表示されます。

 

結論

Amazon CloudWatch Syntheticsを使ったCanaryを作成するのは、アプリケーションのエンドポイントを監視をしやすくなります。 アプリケーションへのユーザートラフィックがなくても、エンドユーザーの体験を連続的に検出できます。これにより、エンドユーザーよりも早く問題が検出できて、エンドユーザーに良い体験を提供します。

 

参考元

https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch_Synthetics_Canaries.html

https://dev.to/aws-builders/synthetic-monitoring-using-aws-canaries-cloudwatch-12jb