[アップデート]CloudWatch Syntheticsのデバッグ機能がX-Rayとの連携により強化されました

2020.09.29

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

CloudWatch Syntheticsデバッグ機能が強化されました!X-Rayとの連携が強化されました。

CloudWatch Syntheticsとは

合成監視のサービスです。Syntheticが合成という意味です。何を合成するのかというと、ユーザーのアクセスです。エンドユーザーのアクセスをシミュレート(合成)したスクリプトを作成して、可用性やパフォーマンスなどを監視することができます。中身はNode.jsのLambda関数です。スクリプトのことをCanaryと呼びます。詳しい説明はGA時に書かれた以下エントリをどうぞ。

X-Rayとは

X-Rayは、アプリケーション、特に分散アプリケーション (マイクロサービスアーキテクチャを使用して構築されたアプリケーションなど)のリクエスト処理状況の分析、デバッグが容易になるサービスです。

以下のようにリクエスト処理がどのようなコンポーネント(セグメントと呼びます)をどのくらい経由しているのか確認できたり、

以下のように特定のリクエストの内部でどのような処理がされているとか、各処理にどれくらいの時間がかかっているのかなどを確認できたりします。

CloudWatch Synthetics、X-Rayをとりあえず触ってみたいという方は、以下のワークショップがおすすめです。

アップデート内容詳細

Canaryの設定でActive Tracingを有効にすると、Canaryで合成したリクエストとその処理内容についてX-Rayで細かくデバッグできるようになりました。細かい点は後述の「やってみた」で確認していきます。

コスト

  • Active Tracingを有効にするとCanaryの処理時間が 2.5%から 7%増えるそうです。CloudWatch SyntheticsのCanaryは、その実態であるLambda関数の課金が発生します。Lambdaの課金形態の一つがその実行時間なので、料金が微増することになります。
  • X-Rayについてももちろん課金されます。が、こちらも微々たるものになると思います。東京リージョンの場合、トレースの記録 100 万件あたり 5.00USD (トレース 1 件あたり 0.000005 USD) です。例えば5分間隔(デフォルト)でCanaryを実行する場合、一時間で12回、一日で288回、30日で8,640回実行されることになるので、約 0.04USDかかることになります。さらにトレースの記録は10 万回まで毎月無料枠がありますので、あまり気にする必要はないかと思います。
  • Canary自体のコストのほうがネックになるかと思います。東京リージョンだと1実行あたり 0.0019USDです。5分間隔で30日実行させると 約 16USDです。

やってみた

Rest API Gatewayの後ろにLambda関数を置いた簡単なアプリケーションを作成しました。このAPI Gatewayのエンドポイントに対するCanaryを作成します。設計図と言われるいわゆるテンプレートスクリプトの中から、API Canaryを選択して作成しました。

とりあえずActive Tracingを有効化したCanaryを作成する

Canary作成フォーム最下部にActive Tracingオプションの項目があるので、このチェックボックスをオンにします。

作成してしばらくすると実行履歴がCanaryの詳細ページで確認できるようになります。

その下のTracesタブは、今回のアップデートで追加されたタブです。Active Tracingオプションをオフにしているとこのタブは表示されません。

TraceIDを一つ選択し、更に下部Seguments欄でいずれかのSegumentを選択すると、そのSegumentの詳細を確認できます。

次は、CloudWatch ServiceLensのサービスマップページに行ってみましょう。ServiceLensは、X-RayやCloudWatch Logs、CloudWatchメトリクスなどのデータをまとめて確認できるサービスです。

こんな図が表示されました。クライアントのセグメントを起点に、各セグメントが線でつながるはずなのですが、線がありませんね。。また、 今回のアップデートで、Canaryからのアクセスもサービスマップ上で可視化されるようになったはずなのですが、見当たりませんね。

実はデフォルトではCanaryによるアクセスは「faults or errors」の場合のみサービスマップに表示されるようになっています。右上歯車アイコンをクリックして「Show all canaries」を選択します。

表示されました!監視対象のAPI Gatewayエンドポイントは下から2つ目のRemoteと書かれているやつですね。

他のセグメントについては、

  • 一番上のCloudWatchについては(トレースを確認したところ)PutMetricDataオペレーションでしたので、Canaryについてのメトリクスを送信している処理と思われます。
  • 2つ目のS3 Bucket、これはCanaryのログを格納しているバケットでしたので、ログの格納処理だと思われます。
  • 一番下のS3、これはListBucketsオペレーションだったのですが、よくわからないです。。ログ格納バケットを探すときに実行されたのでしょうか。

X-RayをAPI GatewayとLambdaでも有効化してみる

もっと便利に使うためには、アプリケーション側でもX-Rayを有効化したほうが良いです。というわけで、API GatewayとLambda関数でX-Rayを有効化したアプリケーションを作って、Active Tracingを有効化したCanaryで監視してみます。

API Gateway以降の処理が詳細に記録されるようになりました!Lambdaに関しては、関数の呼び出しに関するものと、関数の動作を表すもの、2つのセグメントが記録されます。

API GatewayやLambdaのメトリクスやログもServiceMap経由で簡単に確認可能です。

さらにLambda関数コードに修正を加えれば、Lambda関数からDynamoDB等ほかAWSサービスを呼び出し処理や、外部APIリクエスト処理、RDBアクセス処理なども追うことができるようになります。(今回は割愛します)

まとめ

CloudWatch Syntheticsのアップデートについてご紹介しました。CloudWatch SyntheticsもX-Rayもあまり知られていないサービスかとは思いますが、非常に役立つので一度導入をご検討いただければと思います。

参考情報