投稿

ニュースに戻る

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

2023/01/10tech talk
作成者:briswell vietnam co ltd
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