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