Amazon Web Services ブログ

Amazon CloudWatch Internet Monitor の紹介

AWS は、新しいインターネット監視サービスである Amazon CloudWatch Internet Monitor のリリースを発表しました。インターネット上でのパフォーマンスと可用性は、AWS アプリケーションのユーザー体験の水準を高めるのに役立つ重要な指標です。ユーザー体験は、お客様が制御出来ない未知の事象に大きな影響を受ける可能性があります。お客様のアプリケーションでより良いユーザー体験を提供するには、インターネットの状況とユーザー体験を把握している必要があります。

Internet Monitor では、AWS でのワークロードの利用状況に合わせて、可用性やパフォーマンスなどのインターネット測定値を継続的に監視できます。Internet Monitor を使用すると、時間の経過に伴う平均的なインターネットの性能の指標や、場所やインターネットサービスプロバイダー (ISP) ごとの問題 (イベント) に関する洞察を得ることができます。また、Amazon CloudFront、Amazon WorkSpaces ディレクトリ、または Amazon Virtual Private Cloud (Amazon VPC) で直接ホストされているアプリケーションのエンドユーザーのユーザー体験に影響を与えているイベントを簡単に特定できます。アプリケーションエンドポイントに関連する測定値により、問題の範囲、場所、根本原因をすばやく特定できるため、修正に必要なアクションを実行できます。これらすべてを、アプリケーションコードを変更することなく、またワークロードのパフォーマンスに影響を与えることなく実行できます。

Internet Monitor は、ユーザーとアプリケーション間のインターネットを含んだ通信経路をモニタリングし、CloudWatch の各サービス表示できます。

(* このブログ執筆時では、CloudWatch ServiceLens は AWS X-Ray service map と統合され、X-Ray trace map になりました。)

Internet Monitor の構成要素

Internet Monitor の仕組みを説明する前に、構成要素について説明します。

  • モニター : モニターは、監視するリソースを定義したコンテナです。
  • ヘルスイベント : Internet Monitor はトラフィック性能の大幅な低下を検出すると、ヘルスイベントを作成します。各ヘルスイベントには、影響を受けるクライアントの地理情報とネットワークプロバイダー (ISP) の情報が含まれています。
  • パフォーマンスおよび可用性スコア ( ヘルススコア ) : アプリケーションへのトラフィックのうち、パフォーマンスの低下や可用性の低下が発生していない割合を統計的に推定したものです。これらのスコアは CloudWatch メトリクスとしても利用できます。
  • CloudWatch Logs : クライアント固有のロケーションとネットワークプロバイダー向けに、Internet Monitor は、パフォーマンスと可用性スコア、転送されたバイト数、および往復時間 (Round Trip Time , RTT) を含む測定値を CloudWatch Logs に送信します。

仕組み

Internet Monitor は、さまざまな AWS リージョンとエッジロケーション、およびお客様がアプリケーションエンドポイントにアクセスするネットワーク間で、AWS が既に収集しているデータを活用します。この接続情報は、インターネット上の接続の問題を事前に検出し、顧客体験を向上させるための対策を講じるために、AWS 自身も使用しています。

すべての AWS リージョンで、インターネットのどの部分がそのリージョンとどのように接続されているかといったネットワークの構成情報を AWS は把握しています。これにより、AWS はネットワークプローブ *と上位プロトコルプローブの両方を、インバウンドとアウトバウンドの両方で使用しモニタリングを実施できます。これらのパフォーマンスと可用性の測定値をベースラインとして、さまざまな地域のエンドユーザーに重大な問題の発生を認識できるように、ヘルススコアを計算します。モニターを作成すると、Internet Monitor はユーザーのリソースに基づいてトラフィックプロファイルを作成し、ユーザーの場所と各ユーザーへのトラフィックの割合を記述します。次に、トラフィックプロファイルが AWS ベースラインパフォーマンスプロファイルと比較します。このプロファイルから、ベースラインからの推定減少を示すパフォーマンススコアと可用性スコアが計算されます。

(プローブ (probe)* とは 英語で探査・検査を意味し、対象のシステムの性能等を検査する行為およびツールやソフトウェアをさします)

Internet Monitor では、さまざまな AWS サービスの使用やトラフィックの再ルーティングに関するパフォーマンスメトリクスを表示することで、サーバー初期応答時間 (Time To First Byte, TTFB) を改善するための洞察や推奨事項も提供します。これは、Amazon CloudFront を使用したり、ワークロードトラフィックをさまざまな AWS リージョンに再ルーティングしたりすることで、ユーザーエクスペリエンスをどのように改善できるかを理解するのに役立ちます。

ヘルスイベントに関するアラート

モニターを作成したら、次はアラートを設定します。Internet Monitor のヘルスイベントに関するアラートを受け取る方法はいくつかあります。何を選択するかは、フィルタリングの要件、履歴レコードタイプ、アラームがトリガーされたときのアクションなどによって異なる場合があります。

  • パフォーマンスと可用性スコアの Internet Monitor のイベントメトリクスに基づいた CloudWatch アラーム
  • CloudWatch Logs のメトリクスフィルターを使用して生成されたメトリクスに基づく CloudWatch アラーム
  • Internet Monitor によって生成されたヘルスイベントをフィルタリングするための Amazon EventBridge ルール

CloudWatch アラームは、ユーザー体験のメトリクスをより詳細なレベルで追跡するために追加のメトリクスが必要な場合に役立ちます。 また、Internet Monitor がヘルスイベントを作成するまでには至らない影響がユーザーに発生したときにアラートが必要な場合でも、アラームを発行することができます。加えて、 EventBridge を使用すると、Internet Monitor によって生成されたイベントに対するイベント駆動型の自動応答を作成できます。

前提条件

以下のセクションでは、“VPC や CloudFront ディストリビューションなどの基本的な AWS ネットワーキングサービス”, “WorkSpaces ディレクトリの設定“に精通していることを前提としています。各サービスの詳細については説明しませんが、Internet Monitor でそれらを使用するために必要な手順の概要を説明します。AWS リソースに関する詳細情報は、対応するユーザーガイドに記載されています。

Internet Monitor のセットアップ

ここで、顧客向けのウェブアプリケーションを Amazon Elastic Compute Cloud (EC2)に、リモートチームメンバー向けのインターネットに面したAmazon WorkSpaces ディレクトリをホストしている場合を考えましょう。これらのインターネットに公開されたリソース全体で、エンドユーザーのユーザー体験をグローバルに監視する必要があります。大半のエンドユーザーが北米にいるため、他の地理的ユーザーとは別にアプリケーションにアクセスする際のユーザー体験も監視する必要があります。

モニターを作成してリソースを追加し、ヘルスイベントを通知するように CloudWatch アラームを設定するだけで、Internet Monitor を使い始めることができます。

EC2 でホストされている Web アプリケーションの監視

Step 1 : Internet Monitorでモニターを作成する

モニターを作成するには、CloudWatch コンソールのアプリケーションのモニタリングの下にある [インターネットモニター] ページで [モニターを作成] を選択します。モニターの名前を入力し、[リソースを追加] を選択します。この例では、EC2 でホストされるウェブアプリケーションがあるため、VPC を追加します。リソースページで VPC を選択し、次に [追加] を選択します。[次へ] を選択し、設定を確認して、[モニターを作成] を選択します。モニターがアクティブになるまでに数分かかります。

(* 新しいコンソールでは、図1 にあるような Step 1、Step 2 は1つのページで設定する仕様に変更されています。)

Internet Monitor コンソールでのモニターの作成

図1 – Internet Monitor コンソールでのモニターの作成

ワークロードとその監視ニーズによっては、リソースのグループごとにインターネットモニターで個別のモニターを作成する必要がある場合があります。今回の例では、WorkSpaces ディレクトリ用に別のモニターを作成します。

Step 2 : アラート設定の例

アラートには、Amazon EventBridge を使用します。アプリケーション要件とユーザーベースの例を考慮して、可用性スコアのしきい値を 50%、パフォーマンススコアのしきい値を 50% と定義し、影響を受ける総トラフィックをトラフィックの 1% 以上と指定します。EventBridge ルールは、上記の条件に一致するイベントのログの作成と同時に、このイベントの通知を SNS キューに送信します。(ここでの値はあくまでも一例です。アプリケーションやビジネスに適したレベルでしきい値を設定してください。)

イベントフィルターを設定するには、AWS マネジメントコンソールで Amazon EventBridge に移動します。[EventBridge ルールを作成] を選択し、関連する名前と説明を入力します。ルールには[defaultイベントバス]を使用し、イベントソースには[その他] を選択します。サンプルイベント構成をスキップし、[作成のメソッド]として [カスタムパターン] を選択します。例を下記に示します。

{
    "source": ["aws.internetmonitor"],
    "detail": {
      "Status": ["ACTIVE"],
      "ImpactedLocations": {
        "CountryCode": ["CA", "US"],
        "$or": [{
          "internetHealth": {
            "Performance": {
              "experienceScore": [{
                "numeric": ["<", 50]
              }],
              "percentageOfTotalTrafficImpacted": [{
                "numeric": [">", 1]
              }]
            }
          }
        }, {
          "internetHealth": {
            "Availability": {
              "experienceScore": [{
                "numeric": ["<", 50]
              }]
            }
          }
        }]
      }
    }
  }

次に、イベント用に 2 つのターゲットを設定します。1 つは新しい Amazon Simple Notification Service (SNS) トピックで、もう 1 つは CloudWatch の ロググループです。これらは、ログの経時的な変化の分析とレポートを目的としています。ルールに一致するInternet Monitor のヘルスイベントが発生すると、そのイベントは SNS キューと CloudWatch のロググループで受信されます。

EventBridge ルールのターゲットの設定

図2 – EventBridge ルールのターゲットの設定

Amazon WorkSpaces ディレクトリのモニタリング

Step 1 : WorkSpaces ディレクトリのモニターを作成する

EC2 のモニター作成の手順に従って、WorkSpaces ディレクトリリソースのモニターを作成します。一部のリソースタイプでは、同じような監視要件を持つリソースを 1 つのモニターにグループ化できます。ただし、WorkSpaces ディレクトリをInternet Monitor の VPC と同じモニターに追加することはできないため、新しいモニターを作成します。

Step 2 : アラート設定の例

WorkSpaces ディレクトリを使用するお客様にとって重要な指標は、往復時間 (Round Trip Time, RTT) です。RTT が 100 ミリ秒を超えると、エンドユーザーのパフォーマンスエクスペリエンスに影響します。今回のユースケースでは、北米のエンドユーザーのみを対象に RTT を視覚化するカスタムメトリクスを作成します。そのための手順は以下のとおりです。

a) クライアントの場所に基づいて Internet Monitor のイベントログをフィルタリングします。
b) Internet Monitor イベントログ用のカスタム CloudWatch メトリクスフィルターを作成します。
c) カスタムメトリクスに基づいてアラームを設定します。

それぞれの設定フローを、詳しく見ていきます。

a) クライアントの地理情報に基づくイベントログのフィルタリング

CloudWatch Logs のコンソールでは、Internet Monitor のログデータを JSON 形式で名前空間 /aws/internet-monitor/<your-monitor-name>/<granularity> にて視覚化できます。この例では、北米のエンドユーザーの場合、国レベルの細分化が最も役立ちます。内部のログストリームには、個々の測定イベントが含まれています。各イベントには、クライアントロケーションの地理情報とネットワーク情報、トラフィック統計、可用性スコア、パフォーマンススコアが含まれます。これは、Internet Monitor コンソールに集約されて表示される情報と同じです。

JSON 形式の Internet Monitor イベントログの例

図3 – JSON 形式の Internet Monitor イベントログの例

インターネットモニターのログをフィルタリングするには、ClientLocation.CountryCode フィールドを次の設定で使用します。例 : {$.clientLocation.CountryCode=US || $.clientLocation.CountryCode=CA}。これにより、米国またはカナダのクライアントロケーションのログイベントを視覚化できます。

Internet Monitor のログストリームが、北米にあるクライアントロケーションのイベントのみを表示するようにフィルタリングされている例

図4 – Internet Monitor のログストリームが、北米にあるクライアントロケーションのイベントのみを表示するようにフィルタリングされている例

b) Internet Monitorイベントログ用の CloudWatch メトリクスフィルターを作成する

クライアントの地理情報に基づいてログがフィルタリングされたら、[メトリクスフィルターを作成] を選択し、フィルターメトリクスの名前と名前空間を設定して、関連するカスタムメトリクスをグループ化します。この例では、90 パーセンタイル (p90) の RTT 値である InternetHealth.Performance.RoundtripTime.p90 に基づいてメトリクスを生成しています。メトリクスの感度が p90 なので、平均値を使用すると見落とされるであろう異常を警告することができ、トリガーの頻度が高すぎることも回避できます。

CloudWatch Logs コンソールを使用して Internet Monitor ログイベントに基づくメトリクスフィルターを作成

図 5 – CloudWatch Logs コンソールを使用して Internet Monitor ログイベントに基づくメトリクスフィルターを作成

要件に応じて、構成に p50、p90、または p95 を使用できます。測定パーセンタイルの詳細については、CloudWatch ユーザーガイドを参照してください。新しいメトリクスフィルタである NorthAmericanRTT は、最初に一致するログイベントが処理された直後に利用できるようになります。

c) カスタムメトリクスに基づいてアラームを設定する

新しいメトリクスに基づいてアラームを作成するには、CloudWatch アラームコンソールを使用して、新しく作成したメトリクスをモニター用に選択します。一例として、RTTのしきい値条件として 100ms を選択しました。また、静的しきい値の代わりに異常検出を使用するアラームを作成して、より正確なユーザーエクスペリエンス分析を行うこともできます。異常検出の詳細については、CloudWatch ユーザーガイドを参照してください。

アラームのしきい値条件を設定したら、次の図に示すように、アラートを送信する SNS トピックを選択し、アラームを作成します。

Internet Monitor メトリクスの指定と CloudWatch アラームコンソールでのしきい値の設定

図6 – Internet Monitor メトリクスの指定と CloudWatch アラームコンソールでのしきい値の設定

Internet Monitorのイベントの分析

ここで、パフォーマンスまたは可用性が設定したしきい値のいずれかを下回ったというアラートを受け取ったとします。調査を開始するには、モニターのInternet Monitorコンソールの [概要] タブをクリックしてください。概要タブには、監視対象リソースの可用性とパフォーマンスのスコア、および関連するアクティブヘルスイベントが表示されます。

Internet Monitor コンソールの概要タブで、ヘルススコアと台湾とオーストラリアでのヘルスイベントを示すマップが表示されている様子

図7 – Internet Monitor コンソールの概要タブで、ヘルススコアと台湾とオーストラリアでのヘルスイベントを示すマップが表示されている様子

この例では、台湾とオーストラリアのユーザーに影響を及ぼすヘルスイベントを確認できます。ヘルスイベントの詳細を確認するには、CSV 形式または JSON 形式で詳細をダウンロードできます。[アクション] を選択し、必要な形式を選択します。このファイルには、選択した期間のすべてのヘルスイベントが含まれており、関心のあるイベントのみを含めるようにフィルタリングできます。1 つのイベントを見ると、イベントの詳細には、クライアントの場所、ネットワークサービスプロバイダー名、ASN、影響を受けたトラフィックの割合などの情報が含まれていることがわかります。JSON 形式のイベントの例を次に示します。

{
    "EndedAt": null,
    "EventArn": "arn:aws:internetmonitor:us-east-1:617055091360:monitor/retryblogmonitor/health-event/2022-10-11T01-15-00Z/availability",
    "EventId": "2022-10-11T01-15-00Z/availability",
    "ImpactType": "AVAILABILITY",
    "ImpactedLocations": [
      {
        "ASName": "TPG Telecom Limited",
        "ASNumber": 7545,
        "internetHealth": {
          "Availability": {
            "ExperienceScore": 84.78,
            "PercentOfClientLocationImpacted": 15.22,
            "PercentOfTotalTrafficImpacted": 8.66
          }
        },
        "City": "Canberra",
        "Country": "Australia",
        "CountryCode": "AU",
        "Latitude": -35.2504,
        "Longitude": 149.1702,
        "Metro": "",
        "ServiceLocation": "us-east-1",
        "ServiceName": "VPC",
        "Status": "ACTIVE",
        "Subdivision": "Australian Capital Territory",
        "SubdivisionCode": ""
      }
    ],
    "PercentOfTotalTrafficImpacted": 8.66,
    "StartedAt": "2022-10-11T01:15:00.000Z",
    "Status": "ACTIVE"
  }

図7 に示す情報を読み取っていきます。ここでは、その場所にいるクライアントの 15.22% が影響を受けました。これは、当時アプリケーションを使用していた全クライアントの 8.66% に相当します。

ユーザーエクスペリエンスをさらに深く掘り下げるには、[Historical Explorer] タブに移動して、地域やネットワークプロバイダー、および時間枠でフィルタリングされたより多くのパフォーマンス指標を視覚化します。

オーストラリアにフィルタリングされたインターネットトラフィックグラフを表示する、Internet Monitor の Historical explorer タブ

図8 – オーストラリアにフィルタリングされたインターネットトラフィックグラフを表示する、Internet Monitor の Historical explorer タブ

Internet Monitor を使用してアプリケーション配信を最適化

ここで調査しているような、クライアントネットワークプロバイダーの問題が原因と思われるイベントについては、短期的に実行できるアクションがいくつかあります。

  • アプリケーションがすでに複数のリージョンから提供されている場合、影響を受けるトラフィックを、別のインターネットパスでアクセスできる別の AWS リージョンのリソースにシフトできる可能性があります。
  • ネットワークプロバイダーに連絡して、問題を認識しているかどうか、解決策に取り組んでいるかどうかを確認してください。これは、お住まいの地域以外のプロバイダーの場合は、選択できない可能性があります
  • 自分のステータスページやソーシャルメディアを更新して、ある場所で発生している問題はその地域のインターネットのパフォーマンスによるものであることをユーザーに知らせることが出来ます。
  • 影響を受ける顧客からの質問に答えるために、カスタマーサポートを準備する。

長期的なアプローチとしては、例えば Amazon CloudFront のようなサービスを使用して、クライアントトラフィックが通過するインターネットパスを最小限に抑えるなど、エンドユーザーへのアプリケーション配信を改善することが考えられます。AWS リージョンのユーザーおよびオリジンリソースまたはエンドポイントに最も近い AWS POP からのトラフィックはすべて、AWS グローバルネットワークを介して伝送されます。

[トラフィックインサイト] タブでは、可用性やパフォーマンススコア、サーバー初期応答時間 (Time to first byte, TTFB) 別にソートして、さまざまな場所でアプリケーションのパフォーマンスを向上させる方法を調べることができます。また、地理的フィルターやネットワークプロバイダーフィルターを使用して、特定の地域のデータをさらに詳しく調べることもできます。

Internet Monitor では、[トラフィック最適化の提案] で、EC2 や CloudFront リソースの使用に切り替えたり、トラフィックを他の AWS リージョンやエッジロケーションにルーティングしたりした場合に、クライアントロケーションとネットワークプロバイダーの組み合わせで予想される TTFB 改善の予測も表示されます。さまざまなオプションを試して、それぞれの組み合わせで最良の結果が得られるものを確認してください。

図9 – クライアントロケーショングラフごとの総トラフィックやトラフィック最適化の提案が表示される、Internet Monitor のトラフィックインサイトタブ

環境のクリーンアップ

Internet Monitor の機能を確認し終わったら、必ずテスト環境をクリーンアップし、作成したリソースを削除してください。まず、モニターを削除し、次に EventBridge ルール、CloudWatch ログルール、アラーム、メトリクス、ロググループ、SNS トピックなど、作成したその他のリソースを削除します。

その他の注意点

  • 1 つの AWS リージョンに同じようなユーザーベースのアプリケーショングループがある場合は、1 つのモニターを作成して、グループ全体のユーザーエクスペリエンスの集計を監視します。
  • Internet Monitorの 1 つのモニターで、複数のリージョンのリソースを監視できます。
  • VPC と CloudFront ディストリビューションを追加する場合、WorkSpaces ディレクトリを同じモニターに追加することはできません。
  • Internet Monitor には、メトリクス、ログ、作成されたダッシュボード、アラーム、またはインサイトに対して、通常の CloudWatch 料金がかかります。詳細については、CloudWatch の料金表ページをご覧ください。
  • Internet Monitor の AWS CloudFormation サポートはまもなく利用可能になる予定です。
  • Internet Monitor は現在 20 の AWS リージョンでご利用いただけます。

まとめ

このブログでは、Amazon CloudWatch Internet Monitor を紹介しました。これは、AWS がグローバルネットワークインフラストラクチャから収集した接続データを利用して、、インターネットに接続するアプリケーションのパフォーマンスを可視化する新しいサービスです。Internet Monitor は、他の方法では気付かないエンドユーザーのエクスペリエンスに影響を与える要因を使用して、十分な情報に基づいた意思決定を行うことができるため、ワークロードの導入戦略を最適化できます。インターネットモニターの詳細については、ドキュメントをご覧ください。

本記事は、Alexandra Huides, Tony Hawke らの「Introducing Amazon CloudWatch Internet Monitor」を翻訳したものです。翻訳は ソリューションアーキテクトの 伊藤 威が担当しました。