

# CloudWatch RUM
<a name="CloudWatch-RUM"></a>

CloudWatch RUM を使用すると、現実的なユーザーモニターリングを実行できます。ウェブおよびモバイルアプリケーションのパフォーマンスに関するクライアント側のデータを、ほぼリアルタイムで実際のユーザーセッションから収集し、それを表示できます。ウェブアプリケーションの場合、ページのロード時間、クライアント側のエラー、およびユーザー動作を分析できます。モバイルアプリケーションでは、画面のロード時間、アプリケーションの起動時間、ネットワークエラー、クラッシュ、Android Application Not Responding (ANR) や iOS App Hangs などのプラットフォーム固有の問題をモニタリングできます。このデータを表示すると、すべてがまとめて表示され、デバイスタイプ、オペレーティングシステム、およびアプリケーション使用状況のその他の特性別の内訳も確認できます。

収集されたデータは、クライアント側で発生するパフォーマンスの問題をすばやく特定し、デバッグを行う際に利用できます。CloudWatch RUM により、アプリケーションのパフォーマンス上の異常を可視化できます。さらに、エラーメッセージ、スタックトレース、ユーザーセッションなど、関連性のあるデバッグデータを見つけ出すこともできます。また RUM を使用すると、ユーザー数、地域的な位置、使用されているブラウザ/デバイスなど、エンドユーザーへの影響の範囲を把握することもできます。

CloudWatch RUM により収集されたエンドユーザーデータは、30 日間保持された後で自動的に削除されます。RUM テレメトリデータをより長く保持したい場合は、アプリケーションモニターで、テレメトリのコピーをアカウントの CloudWatch Logs に送信することもできます。その上で、送信先ロググループの保持期間を調整します。

RUM を使用するには、*アプリケーションモニター*を作成し、情報をいくつか設定します。RUM は、依存関係インジェクションをアプリケーションに追加するために使用できるコードスニペットを生成します。このスニペットは必要に応じて RUM クライアントコードを読み込みます。この RUM クライアントは、事前構築済みダッシュボードに表示されるアプリケーションのユーザーセッションの一部からデータをキャプチャします。ユーザーセッションのどの割合からデータを収集するか、指定することができます。

 CloudWatch RUM は、アプリケーションサービス、クライアント、Synthetics Canary、サービスの依存関係を検出してモニタリングできる [Application Signals](CloudWatch-Application-Monitoring-Sections.md) と統合されています。Application Signals を使用すると、サービスのリストやビジュアルマップを確認したり、サービスレベル目標 (SLO) に基づくヘルスメトリクスを表示したり、ドリルダウンして相関関係のある X-Ray トレースを確認したりして、より詳細なトラブルシューティングを行うことができます。Application Signals で RUM クライアントページのリクエストを確認するには、[アプリケーションモニターを作成](CloudWatch-RUM-get-started-create-app-monitor.md)するときに X-Ray アクティブトレースをオンにします。ウェブアプリケーションでは、[RUM ウェブクライアントを手動で設定](CloudWatch-RUM-configure-client.md)することでこれを有効にすることもできます。RUM クライアントは、サービスに接続されている [[アプリケーションマップ]](ServiceMap.md) と、呼び出されるサービスの [[サービス詳細]](ServiceDetail.md) ページに表示されます。

RUM クライアントはオープンソースです。詳細については、「[CloudWatch RUM ウェブクライアント](https://github.com/aws-observability/aws-rum-web)」、「[AWS Distro for OpenTelemetry (ADOT) Android SDK](https://github.com/aws-observability/aws-otel-android)」、「[AWS Distro for OpenTelemetry (ADOT) iOS SDK](https://github.com/aws-observability/aws-otel-swift)」を参照してください。

**RUM の使用料金**

料金の詳細については、「[Amazon CloudWatch の料金](https://aws.amazon.com/cloudwatch/pricing/)」を参照してください。

**利用可能なリージョン**

CloudWatch RUM は現在、下記のリージョンで利用可能です。
+ 米国東部 (バージニア北部)
+ 米国東部 (オハイオ)
+ 米国西部 (北カリフォルニア)
+ 米国西部 (オレゴン)
+ アフリカ (ケープタウン)
+ AWS GovCloud (米国東部)
+ AWS GovCloud (米国西部)
+ アジアパシフィック (ムンバイ)
+ アジアパシフィック (ハイデラバード)
+ アジアパシフィック (メルボルン)
+ アジアパシフィック (大阪)
+ アジアパシフィック (ソウル)
+ アジアパシフィック (シンガポール)
+ アジアパシフィック (シドニー)
+ アジアパシフィック (ジャカルタ)
+ アジアパシフィック (マレーシア)
+ アジアパシフィック (タイ)
+ アジアパシフィック (東京)
+ アジアパシフィック (香港)
+ カナダ (中部)
+ 欧州 (フランクフルト)
+ 欧州 (アイルランド)
+ 欧州 (ロンドン)
+ 欧州 (ミラノ)
+ 欧州 (パリ)
+ 欧州 (スペイン)
+ 欧州 (ストックホルム)
+ 欧州 (チューリッヒ)
+ AWS European Sovereign Cloud (ドイツ)
+ 中東 (バーレーン)
+ 中東 (アラブ首長国連邦)
+ メキシコ (中部)
+ 南米 (サンパウロ)
+ イスラエル (テルアビブ)
+ カナダ西部 (カルガリー)

# CloudWatch RUM を使用するためにモバイルアプリケーションを設定する
<a name="CloudWatch-RUM-web-mobile"></a>

モバイルアプリケーションをモニタリングするには、アプリケーションモニターを作成し、モバイルプラットフォーム用に設定して、AWS Distro for OpenTelemetry (ADOT) SDK をアプリケーションに統合します。Mobile RUM は OpenTelemetry Protocol (OTLP) を使用してテレメトリデータを専用の OTLP エンドポイントに送信します。

## モバイルプラットフォームのアプリケーションモニターを作成するには
<a name="mobile-platform-app-monitor"></a>

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. **[アプリケーションモニターを追加]** をクリックします。

1. **[App monitor name]** (アプリケーションモニター名) に、CloudWatch RUM コンソール内でこのモニターを識別する際に使用する名前を入力します。

1. プラットフォームとして **[Android]** または **[iOS]** を選択します。

1. **[データストレージ]** では、RUM OTEL ログイベントとスパンのコピーを CloudWatch Logs に保存し、保持期間を設定できます。デフォルトでは、CloudWatch Logs のロググループは 30 日間データを保持します。ログの保持期間は、CloudWatch Logs コンソールで管理できます。

1. (オプション) **[リソースベースのポリシー]** で、リソースベースのポリシーを追加してアプリケーションモニターにリクエストを送信できるユーザーを制御できます。**[パブリックポリシーを作成]** を選択すると、誰でもアプリケーションモニターにリクエストを送信できるリソースポリシーがアタッチされます。詳細については、「[CloudWatch RUM でのリソースベースのポリシーの使用](CloudWatch-RUM-resource-policies.md)」を参照してください。

1. サンプリングされたユーザーセッションで AWS X-Ray トレースを有効化するには、**[アクティブトレース]** を選択し、**[AWS X-Ray でサービスを追跡する]** を選択します。

   選択すると、サンプリングされたユーザーセッション中に生成された OTEL スパンがトレースされます。その後、これらのセッションからのトレースとスパンを、RUM ダッシュボード、X-Ray トレースマップ、トレースの詳細ページ上に表示できるようになります。これらのユーザーセッションは、Application Signals でアプリケーションを有効にすると、そこにクライアントページとしても表示されます。

1. (オプション) アプリケーションモニターにタグを追加するには:

   1. **[タグ]**、**[新しいタグを追加]** を選択します。

   1. **[キー]** にタグの名前を入力します。必要に応じて、値を **[値]** に追加できます。

   1. 別のタグを追加するには、**[新しいタグを追加]** を再度選択します。

   詳細については、「*AWS タグ付けとタグエディターのユーザーガイド*」の「[AWS リソースにタグを付ける](https://docs.aws.amazon.com/tagging/latest/userguide/tagging-resources.html)」を参照してください。

1. **[アプリケーションモニターを追加]** をクリックします。

1. **[サンプルコード]** セクションで、アプリケーションに追加するコードスニペットをコピーできます。AWS Distro for OpenTelemetry (ADOT) SDK を使用すると、アプリケーションコードでモニタリングを設定する **[手動計測]** と設定の変更が最小限で済む **[ゼロコード計測]** のいずれかを選択できます。

   Android アプリケーションと iOS アプリケーションの両方で、ゼロコード計測は、設定ファイルを使用してテレメトリ収集を自動的に初期化するため、最も簡単なオプションです。手動計測を使用すると、初期化と設定プロセスをより詳細に制御できます。

1. **[コピー]** または **[ダウンロード]**、続いて **[完了]** をクリックします。

### iOS アプリケーションの設定
<a name="CloudWatch-RUM-ios-setup"></a>

iOS アプリケーションの場合は、[AWS Distro for OpenTelemetry (ADOT) iOS SDK](https://github.com/aws-observability/aws-otel-swift) を統合して RUM モニタリングを有効にします。SDK は iOS 16 以降のバージョンをサポートし、一般的なパフォーマンスシナリオの自動計測を提供します。

### Android アプリケーションの設定
<a name="CloudWatch-RUM-android-setup"></a>

Android アプリケーションの場合は、[AWS Distro for OpenTelemetry (ADOT) Android SDK](https://github.com/aws-observability/aws-otel-android) を統合して RUM モニタリングを有効にします。SDK は自動計測を提供し、署名付き認証モデルと署名なし認証モデルの両方をサポートします。

## 認証とセキュリティ
<a name="CloudWatch-RUM-authentication"></a>

モバイル RUM は、SDK で定義されている柔軟な認証モデルをサポートしています。
+ iOS アプリケーションは [AWS Distro for OpenTelemetry (ADOT) iOS SDK ](https://github.com/aws-observability/aws-otel-swift)を使用します。
+ Android アプリケーションは [AWS Distro for OpenTelemetry (ADOT) Android SDK](https://github.com/aws-observability/aws-otel-android) を使用します。

# CloudWatch RUM 使用のための IAM ポリシー
<a name="CloudWatch-RUM-permissions"></a>

CloudWatch RUM を完全に管理するには、IAM ポリシー **AmazonCloudWatchRUMFullAccess** を持つ、IAM ユーザーまたはロールとしてサインインする必要があります。さらに、他のポリシーやアクセス許可が必要になる場合もあります。
+ 承認用の新しい Amazon Cognito ID プールを作成するアプリケーションモニターを作成するには、**管理者**の IAM ロール、または IAM ポリシー **AdministratorAccess** が必要です。
+ CloudWatch Logs にデータを送信するアプリケーションモニターを作成するには、以下のアクセス許可を持つ IAM ロールまたはポリシーにログオンする必要があります。

  ```
  {
      "Effect": "Allow",
      "Action": [
          "logs:PutResourcePolicy"
      ],
      "Resource": [
          "*"
      ]
  }
  ```
+ アプリモニターで JavaScript ソースマップを有効にするには、ソースマップファイルを Amazon S3 バケットにアップロードする必要があります。IAM ロールまたはポリシーには、Amazon S3 バケットの作成、バケットポリシーの設定、バケット内のファイルの管理を行う特定の Amazon S3 アクセス許可が必要です。セキュリティの理由から、これらのアクセス許可は特定のリソースに限定します。以下のポリシー例では、名前に `rum` を含むバケットへのアクセスを制限し、`aws:ResourceAccount` 条件キーを使用してプリンシパルアカウントのみにアクセス許可を制限します。

  ```
  {
      "Sid": "AllowS3BucketCreationAndListing",
      "Effect": "Allow",
      "Action": [
          "s3:CreateBucket",
          "s3:ListAllMyBuckets"
      ],
      "Resource": "arn:aws:s3:::*",
      "Condition": {
          "StringEquals": {
              "aws:ResourceAccount": "${aws:PrincipalAccount}"
          }
      }
  },
  {
      "Sid": "AllowS3BucketActions",
      "Effect": "Allow",
      "Action": [
          "s3:GetBucketLocation",
          "s3:ListBucket"
      ],
      "Resource": "arn:aws:s3:::*rum*",
      "Condition": {
          "StringEquals": {
              "aws:ResourceAccount": "${aws:PrincipalAccount}"
          }
      }
  },
  {
      "Sid": "AllowS3BucketPolicyActions",
      "Effect": "Allow",
      "Action": [
          "s3:PutBucketPolicy",
          "s3:GetBucketPolicy"
      ],
      "Resource": "arn:aws:s3:::*rum*",
      "Condition": {
          "StringEquals": {
              "aws:ResourceAccount": "${aws:PrincipalAccount}"
          }
      }
  },
  {
      "Sid": "AllowS3ObjectActions",
      "Effect": "Allow",
      "Action": [
          "s3:GetObject",
          "s3:PutObject",
          "s3:DeleteObject",
          "s3:AbortMultipartUpload"
      ],
      "Resource": "arn:aws:s3:::*rum*",
      "Condition": {
          "StringEquals": {
              "aws:ResourceAccount": "${aws:PrincipalAccount}"
          }
      }
  }
  ```
+ ソースマップバケットでサーバー側の暗号化に独自の AWS KMS キーを使用するには、IAM ロールまたはポリシーにキーの作成、キーポリシーの更新、Amazon S3 での AWS KMS キーの使用、Amazon S3 バケットの暗号化設定の設定を行う特定の AWS KMS アクセス許可が必要です。セキュリティの理由から、これらのアクセス許可は特定の目的に限定します。以下の例では、特定のリージョンと accountId のキーへのアクセスを制限し、上記の例と同様の S3 制限が適用されます。

  ```
  {
      "Sid": "AllowKMSKeyCreation",
      "Effect": "Allow",
      "Action": [
          "kms:CreateKey",
          "kms:CreateAlias"
      ],
      "Resource": "*"
  },
  {
      "Sid": "KMSReadPermissions",
      "Effect": "Allow",
      "Action": [
          "kms:ListAliases"
      ],
      "Resource": "*"
  },
  {
      "Sid": "AllowUpdatingKeyPolicy",
      "Effect": "Allow",
      "Action": [
          "kms:PutKeyPolicy",
          "kms:GetKeyPolicy",
          "kms:ListKeyPolicies"
      ],
      "Resource": "arn:aws:kms:REGION:ACCOUNT_ID:key/*"
  },
  {
      "Sid": "AllowUseOfKMSKeyForS3",
      "Effect": "Allow",
      "Action": [
          "kms:DescribeKey",
          "kms:Encrypt",
          "kms:Decrypt",
          "kms:GenerateDataKey"
      ],
      "Resource": "arn:aws:kms:REGION:ACCOUNT_ID:key/*"
  },
  {
      "Sid": "AllowS3EncryptionConfiguration",
      "Effect": "Allow",
      "Action": [
          "s3:PutEncryptionConfiguration",
          "s3:GetEncryptionConfiguration"
      ],
      "Resource": "arn:aws:s3:::*rum*",
      "Condition": {
          "StringEquals": {
              "aws:ResourceAccount": "${aws:PrincipalAccount}"
          }
      }
  }
  ```

CloudWatch RUM データを表示する必要があるものの、CloudWatch RUM リソースの作成は行わない他のユーザーについては、**AmazonCloudWatchRUMReadOnlyAccess** ポリシーを使用できます。

# CloudWatch RUM を使用するためにウェブアプリケーションを設定する
<a name="CloudWatch-RUM-get-started"></a>

ウェブアプリケーションを設定して、実際のユーザーセッションからパフォーマンスデータを収集できるように CloudWatch RUM の使用を開始するには、以下のセクションの手順を使用します。

**Topics**
+ [AWS にデータを送信することを、ウェブアプリケーションに許可する](CloudWatch-RUM-get-started-authorization.md)
+ [ウェブアプリケーションの CloudWatch RUM アプリケーションモニターの作成](CloudWatch-RUM-get-started-create-app-monitor.md)
+ [コードスニペットを変更して CloudWatch RUM ウェブクライアントを構成する (オプション)](CloudWatch-RUM-modify-snippet.md)
+ [CloudWatch アプリケーションモニタのコードスニペットをアプリケーションに挿入する](CloudWatch-RUM-get-started-insert-code-snippet.md)
+ [ユーザーイベントを生成して CloudWatch アプリケーションモニタの設定内容をテストする](CloudWatch-RUM-get-started-generate-data.md)

# AWS にデータを送信することを、ウェブアプリケーションに許可する
<a name="CloudWatch-RUM-get-started-authorization"></a>

データ認証を設定するには、以下の 4 つのオプションがあります。
+ Amazon Cognito を使用して、CloudWatch RUM でアプリケーション用の新しい Amazon Cognito ID プールを作成します。この方法では、セットアップに必要な労力が最小限に抑えられます。

  ID プールには、認証されていない ID が含まれています。これにより、CloudWatch RUM のウェブクライアントは、アプリケーションのユーザーを認証することなく CloudWatch RUM にデータを送信できます。

  Amazon Cognito ID プールには、アタッチ済みの IAM ロールも含まれています。Amazon Cognito 内の認証されていない ID により、ウェブクライアントは、CloudWatch RUM にデータを送信することが許可された IAM ロールを引き受けることができます。
+ 認証には、Amazon Cognito を使用します。これを使用する場合は、既存の Amazon Cognito ID プールを使用することも、このアプリモニターで使用する新しい ID プールを作成することもできます。既存の ID プールを使用する場合は、ID プールにアタッチされている IAM ロールも変更する必要があります。このオプションは、認証されていないユーザーをサポートするアイデンティティプールに使用します。ID プールは、同じリージョンからのみ使用できます。
+ 先に設定を行ってある、既存の ID プロバイダからの認証を使用します。この場合は、ID プロバイダから認証情報を取得する必要があります。またこれらの認証情報は、アプリケーションから RUM ウェブクライアントに転送する必要があります。

  認証されたユーザーのみをサポートするアイデンティティプールには、このオプションを使用します。
+ リソースベースのポリシーを使用して、アプリモニターへのアクセスを管理します。これには、AWS 認証情報なしで認証されていないリクエストを CloudWatch RUM に送信する機能が含まれます。リソースベースのポリシーと RUM の詳細については、「[CloudWatch RUM でのリソースベースのポリシーの使用](CloudWatch-RUM-resource-policies.md)」を参照してください。

以下のセクションで、これらのオプションについてさらに詳しく説明します。

## 既存の Amazon Cognito ID プールを使用する
<a name="CloudWatch-RUM-get-started-authorization-existingcognito"></a>

既存の Amazon Cognito ID プールを使用する場合は、アプリケーションを CloudWatch RUM に追加する際に、その ID プールを指定します。このプールは、認証されていない ID に対するアクセスの有効化が、サポートされている必要があります。ID プールは、同じリージョンからのみ使用できます。

また、この ID プールに関連付けられている IAM ロールにアタッチされている IAM ポリシーに対し、次のアクセス許可を追加する必要があります。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        { 
            "Effect": "Allow",
            "Action": [
                "rum:PutRumEvents"
            ],
            "Resource": "arn:aws:rum:us-east-1:123456789012:appmonitor/app monitor name" 
        }
    ]
}
```

------

これを設定することで Amazon Cognito は、アプリケーションが CloudWatch RUM にアクセスできるようにするための、必要なセキュリティトークンを送信するようになります。

## サードパーティのプロバイダー
<a name="CloudWatch-RUM-get-started-authorization-thirdparty"></a>

サードパーティーのプロバイダーからのプライベート認証の使用を選択する場合は、ID プロバイダーから認証情報を取得し、AWS に転送する必要があります。これを行う最良の方法の 1 つは、*セキュリティトークンベンダー*を利用することです。これには、AWS Security Token Service を使用する Amazon Cognito を含め、任意のセキュリティトークンベンダーが使用できます。AWS STS の詳細については、「[Welcome to the AWS Security Token Service API Reference](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html)」参照してください。

このシナリオで Amazon Cognito をトークンベンダーとして使用する場合は、認証プロバイダーと連携するように Amazon Cognito を設定します。詳細については、「[Amazon Cognito ID プール (フェデレーティッド ID) の使用開始方法](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html)」を参照してください。

Amazon Cognito で ID プロバイダーとの連携を設定し終えたら、以下の操作も実行する必要があります。
+ 以下のアクセス許可を持つ IAM ロールを作成します。アプリケーションは、AWS へのアクセスにこのロールを使用します。

------
#### [ JSON ]

****  

  ```
  { 
   "Version":"2012-10-17",		 	 	 
   "Statement": [ 
     { 
       "Effect": "Allow",
       "Action": "rum:PutRumEvents",
       "Resource": "arn:aws:rum:us-east-2:123456789012:appmonitor/AppMonitorName"
     }
   ]
  }
  ```

------
+ アプリケーションがプロバイダーからの認証情報を CloudWatch RUM に渡すようにするため。以下を追加します。アプリケーションに行を挿入します。これは、ユーザーがアプリケーションにサインインし、AWS へのアクセスに使用する資格情報がアプリケーションで受け取られた後に実行されます。

  ```
  cwr('setAwsCredentials', {/* Credentials or CredentialProvider */});
  ```

AWS JavaScript SDK での認証情報プロバイダーの詳細については、SDK for JavaScript v3 デベロッパーガイドの「[ウェブブラウザでの認証情報の設定](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-browser.html)」、SDK for JavaScript v2 デベロッパーガイドの「[ウェブブラウザでの認証情報の設定](https://docs.aws.amazon.com/sdk-for-javascript/v2/developer-guide/setting-credentials-browser.html)」、および [@aws-sdk/credential-providers](https://www.npmjs.com/package/@aws-sdk/credential-providers) を参照してください。

また、CloudWatch RUM ウェブクライアント向け SDK を使用して、ウェブクライアントの認証方法を設定することもできます。ウェブクライアント SDK の詳細については、「[CloudWatch RUM web client SDK](https://github.com/aws-observability/aws-rum-web)」を参照してください。

# ウェブアプリケーションの CloudWatch RUM アプリケーションモニターの作成
<a name="CloudWatch-RUM-get-started-create-app-monitor"></a>

アプリケーションで CloudWatch RUM の使用を開始するには、*アプリケーションモニター*を作成します。アプリケーションモニターが作成されると、アプリケーションに貼り付けるためのコードスニペットが、RUM により生成されます。このスニペットは RUM のクライアントコードを読み込みます。RUM のクライアントは、アプリケーションのユーザーセッションに関するデータをキャプチャし、それを RUM に送信します。

## ウェブプラットフォームのアプリケーションモニターを作成するには
<a name="web-platform-app-monitor"></a>

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. **[アプリケーションモニターを追加]** をクリックします。

1. **[App monitor name]** (アプリケーションモニター名) に、CloudWatch RUM コンソール内でこのモニターを識別する際に使用する名前を入力します。

1. プラットフォームとして **[ウェブ]** を選択します。

1. **[Application domain list]** で、アプリケーションが管理権限を持つ登録済みのドメイン名を入力します。ワイルドカード文字 `*` を使用して、任意のサブドメインまたは最上位ドメイン (\$1.amazon.com、amazon.\$1、\$1.amazon.\$1 など) を許可することもできます。

1. **[Configure RUM data collection]** (RUM データ収集の設定) で、以下の各情報をアプリケーションモニターに収集させるかどうかを指定します。
   + **パフォーマンステレメトリ** – ページならびにリソースのロード時間に関する情報を収集します。
   + **JavaScript エラー** – アプリケーションによって発生した未処理の JavaScript エラーに関する情報を収集します。

     **[Unminify JavaScript error stack traces]** を選択して、最小化が解除されていない JavaScript エラーをデバッグできます。この機能を使用するには、ソースマップファイルを Amazon S3 バケットまたはフォルダにアップロードし、Amazon S3 URI を指定します。有効にすると、RUM はこれらのソースマップを使用し、最小化が解除されていないスタックトレースを追加することによって JavaScript エラーイベントを強化します。この機能を有効にすると、新しい JavaScript エラーイベントのみが処理され、以前に収集されたデータには使用できません。詳細については、「[JavaScript エラースタックトレースの最小化解除を有効にする](CloudWatch-RUM-JavaScriptStackTraceSourceMaps.md)」を参照してください。
   + **HTTP エラー** – アプリケーションによってスローされた HTTP エラーに関する情報を収集します。

   これらのオプションを選択することで、アプリケーションに関する詳細情報を得ることができますが、同時により多くの CloudWatch RUM イベントが生成されるため、発生する料金も増加します。

   これらのいずれかを選択しない場合でも、アプリケーションモニターはセッション開始イベントとページ ID を収集します。これにより、アプリケーションを使用しているユーザーの数を詳細情報 (オペレーティングシステムの種類とバージョン、ブラウザの種類とバージョン、デバイスの種類、および場所など) ごとに確認できます。

1. サンプリングされたユーザーセッションからの、ユーザー ID とセッション ID の収集を可能ににする場合には、**[Check this option to allow the CloudWatch RUM Web Client to set cookies]** ( CloudWatch RUM ウェブクライアントでクッキーを設定する場合このオプションをオンにします) を選択します。ユーザー ID は RUM によってランダムに生成されます。詳細については、「[CloudWatch RUM ウェブクライアント Cookie (または類似の技術)](CloudWatch-RUM-privacy.md#CloudWatch-RUM-cookies)」を参照してください。

1. **[Session samples]** (セッションサンプル) で、RUM データの収集に使用されるユーザーセッションの割合を入力します。デフォルトでこの値は 100% に設定されています。この数を減らすと、取得されるデータは少なくなりますが料金が削減されます。RUM での料金の詳細については、「[RUM pricing](CloudWatch-RUM.md#RUMpricing)」を参照してください。

1. CloudWatch RUM 用に収集したエンドユーザーデータは 30 日間保持され、その後削除されます。RUM イベントのコピーを CloudWatch Logs に保存し、そのコピーの保持期間を設定する場合は、**[Data storage]** (データストレージ) で、**[Check this option to store your application telemetry data in your CloudWatch Logs account]** (テレメトリデータを CloudWatch Logs アカウントに保存するにはこのオプションをオンにします) を選択します。デフォルトでは、CloudWatch Logs のロググループは 30 日間データを保持します。ログの保持期間は、CloudWatch Logs コンソールで管理できます。

1. （オプション) アプリモニターへのリソースベースポリシーの追加を選択して、アプリケーションモニターに `PutRumEvents` リクエストを送信できるユーザーを管理できます。**[パブリックポリシーを作成]** を選択すると、誰でもアプリモニターに `PutRumEvents` リクエストを送信できるリソースポリシーがアプリモニターにアタッチされます。このメソッドの詳細については、「[CloudWatch RUM でのリソースベースのポリシーの使用](CloudWatch-RUM-resource-policies.md)」を参照してください。

1. 前のステップでリソースベースのポリシーをアタッチした場合、AWS 認証情報を使用して CloudWatch RUM へのリクエストに署名する必要はなく、認可の設定をスキップできます。それ以外の場合は、**[認可]** で、(新規または既存の) Amazon Cognito アイデンティティプールを使用するか、異なる ID プロバイダーを使用するかを指定します。新しい ID プールの作成は、他のセットアップ手順を必要としない最も簡単なオプションです。詳細については、「[AWS にデータを送信することを、ウェブアプリケーションに許可する](CloudWatch-RUM-get-started-authorization.md)」を参照してください。

   Amazon Cognito ID プールの新規作成には、管理者権限が必要です。詳細については、「[CloudWatch RUM 使用のための IAM ポリシー](CloudWatch-RUM-permissions.md)」を参照してください。

1. (オプション) デフォルトでは、アプリケーションに RUM コードスニペットを追加すると、ウェブクライアントにより、そのアプリケーションのすべてのページの HTML コード内にモニターリング用の JavaScript タグが挿入されます。これを変更するには、**[Configure pages]** (ページの設定) をクリックた後に、**[Include only these pages]** (これらのページのみを含める)、または**[Exclude these pages]** (これらのページを除外する) のどちらかを選択します。その上で、含める、もしくは除外するページを指定します。含めるか除外するページを指定するには、その完全な URL を入力します。追加のページを指定するには、**[Add URL]** (URLを追加) をクリックします。

1. アプリケーションモニターによってサンプリングされたユーザーセッションで AWS X-Ray トレースを有効化するには、[**アクティブなトレース**] をクリックし、[**AWS X-Ray でサービスをトレースする**] を選択します。

   これを選択すると、ユーザーセッション中に発行されアプリモニターによってサンプリングされた、`XMLHttpRequest` および `fetch` リクエストがトレースされるようになります。その後、これらのユーザーセッションについてのトレースとセグメントを、RUM ダッシュボード、X-Ray トレースマップページ、X-Ray トレースの詳細ページ上に表示できるようになります。これらのユーザーセッションは、[Application Signals](CloudWatch-Application-Monitoring-Sections.md) でアプリケーションを有効にすると、そこにクライアントページとしても表示されます。

   CloudWatch RUM ウェブクライアントの設定をさらに変更することで、HTTP リクエストに X-Ray トレースヘッダーを追加し、AWS のマネージド型サービスにおけるユーザーセッションを、下流方向にエンドツーエンドでトレースできるようになります。詳細については、「[X-Ray でのエンドツーエンドのトレースを有効にする](CloudWatch-RUM-modify-snippet.md#CloudWatch-RUM-xraytraceheader)」を参照してください。

1. (オプション) アプリケーションモニターにタグを追加する場合は、**[Tags]** (タグ)、**[Add new tag]** (新しいタグを追加) の順にクリックします。

   次に、**[Key]** (キー) でタグの名前を入力します。**[値]** では、任意でタグに値を追加できます。

   (オプション) 別のタグを追加するには、**[Add new tag]** (新しいタグを追加) を再度選択します。

   詳細については、「[AWS リソースのタグ付け](https://docs.aws.amazon.com/general/latest/gr/aws_tagging.html)」を参照してください。

1. **[Add app monitor]** (アプリケーションモニターを追加) をクリックします。

1. **[Sample code]** (サンプルコード) セクションで、アプリケーションに追加するために使用するコードスニペットをコピーできます。**[JavaScript]** または **[TypeScript]** を選択し、NPM を使用して、CloudWatch RUM ウェブクライアントを JavaScript モジュールとしてインストールすることをお勧めします。

   または、**[HTML]** を選択し、コンテンツ配信ネットワーク (CDN) を使用して、CloudWatch RUM ウェブクライアントをインストールすることもできます。CDN を使用するデメリットは、Web クライアントが広告ブロッカーによって頻繁にブロックされることです。

1. **[コピー]** または **[ダウンロード]**、続いて **[完了]** をクリックします。

# コードスニペットを変更して CloudWatch RUM ウェブクライアントを構成する (オプション)
<a name="CloudWatch-RUM-modify-snippet"></a>

アプリケーションに挿入する前のコードスニペットを変更して、いくつかのオプションを有効または無効にすることができます。詳細については、「[CloudWatch RUM web client documentation](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)」を参照してください。

次のセクションで説明するように、配慮しておくべき設定オプションが 4 つ存在します。

## 個人情報を含む可能性のあるリソース URL の収集を防止する
<a name="CloudWatch-RUM-resourceURL"></a>

デフォルトでは、CloudWatch RUM ウェブクライアントは、アプリケーションによってダウンロードされたリソースの URL を記録するように設定されています。これらのリソースには、HTML ファイル、画像、CSS ファイル、JavaScript ファイルなどが含まれます。アプリケーションによって、URL には個人を特定できる情報 (PII) が含まれている可能性があります。

アプリケーションがこのような構成の場合には、アプリケーションに挿入する前のコードスニペット内で `recordResourceUrl: false` を設定し、リソース URL のコレクションを無効にしておくことを強くお勧めします。

## ページビューを手動で記録する
<a name="CloudWatch-RUM-pageload"></a>

ウェブクライアントのデフォルト設定では、ページが最初にロードされた時点、ならびにブラウザの履歴 API が呼び出され時点でページビューが記録されます。デフォルトのページ ID は `window.location.pathname` です。ただし、場合によってはこの動作をオーバーライドしてアプリケーションを計測し、ページビューをプログラムで記録します。これにより、ページ ID とそれを記録するタイミングを管理できます。例えば、`/entity/123` または `/entity/456` などの変数識別子を持つ URI のウェブアプリケーションを考えてみましょう。デフォルトでは、CloudWatch RUM はパス名と一致する個別のページ ID を持つページビューイベントを URI ごとに生成しますが、代わりに同じページ ID でグループ化することもできます。これを実行するには、`disableAutoPageView` 設定を使用してウェブクライアントのページビュー自動化を無効にし、`recordPageView` コマンドを使用して目的のページ ID を設定します。詳細については、GitHub の「[アプリケーション固有の設定](https://github.com/aws-observability/aws-rum-web/blob/main/docs/configuration.md)」を参照してください。

**埋め込みスクリプトの例:**

```
cwr('recordPageView', { pageId: 'entityPageId' });
```

**JavaScript モジュールの例:**

```
awsRum.recordPageView({ pageId: 'entityPageId' });
```

## X-Ray でのエンドツーエンドのトレースを有効にする
<a name="CloudWatch-RUM-xraytraceheader"></a>

アプリケーションモニターを作成する際に、[**AWS X-Ray でサービスをトレースする**] を選択します。これにより、アプリケーションモニターがサンプリングするユーザーセッション中に発行された `XMLHttpRequest` および `fetch` リクエストのトレースを有効化します。その後、これらの HTTP リクエストについてのトレースを、CloudWatch RUM ダッシュボード、X-Ray トレースマップページ、X-Ray トレースの詳細ページ上に表示できるようになります。

デフォルトでは、これらのクライアント側トレースは、サーバー側のダウンストリームトレースとは接続されません。クライアント側のトレースをサーバー側トレースに接続し、エンドツーエンドのトレースを有効にするには、ウェブクライアントの `addXRayTraceIdHeader` オプションで `true` を設定します。これにより、CloudWatch RUM ウェブクライアントは、HTTP リクエストに X-Ray トレースヘッダーを追加します。

次に、クライアント側のトレースを追加する場合のコードブロック例を示します。可読性のために、このサンプルでは一部の構成オプションが省略されています。

```
<script>
    (function(n,i,v,r,s,c,u,x,z){...})(
        'cwr',
        '00000000-0000-0000-0000-000000000000',
        '1.0.0',
        'us-west-2',
        'https://client.rum.us-east-1.amazonaws.com/1.0.2/cwr.js',
        {
            enableXRay: true,
            telemetries: [ 
                'errors', 
                'performance',
                [ 'http', { addXRayTraceIdHeader: true } ]
            ]
        }
    );
</script>
```

**警告**  
HTTP リクエストに X-Ray トレースヘッダーを追加するための設定を、CloudWatch RUM のウェブクライアントで行うことで、クロスオリジンリソース共有 (CORS) の失敗を引き起こしたり、Sigv4 で署名されているリクエスト署名が無効化されたりする場合があります。詳細については、「[CloudWatch RUM web client documentation](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)」を参照してください。本番環境でクライアント側の X-Ray トレースヘッダーの追加を行う前に、アプリケーションのテストを実施することを強くお勧めします。

詳細については、「[CloudWatch RUM web client documentation](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md#http)」を参照してください。

## CloudWatch RUM への署名なしリクエストの送信
<a name="CloudWatch-RUM-unsigned"></a>

既定では、RUM ウェブクライアントは RUM に送信されたすべてのリクエストに署名します。クライアント設定で `signing:false` を設定した場合、リクエストは CloudWatch RUM に送信されると署名されません。アプリケーションモニターにアタッチされたパブリックリソースベースのポリシーがある場合にのみ、データは RUM に取り込まれます。詳細については、「[CloudWatch RUM でのリソースベースのポリシーの使用](CloudWatch-RUM-resource-policies.md)」を参照してください。

# CloudWatch アプリケーションモニタのコードスニペットをアプリケーションに挿入する
<a name="CloudWatch-RUM-get-started-insert-code-snippet"></a>

次に、前出のセクションで作成したコードスニペットをアプリケーションに挿入します。

**警告**  
コードスニペットによってダウンロードおよび構成されたウェブクライアントでは、Cookie (もしくは類似の技術) を利用して、エンドユーザーからのデータを収集できます。コードスニペットを挿入する前に、「[コンソールでのメタデータ属性によるフィルタリングCloudWatch RUM によるデータ保護とデータプライバシー](CloudWatch-RUM-privacy.md)」を参照してください。

生成されたコードスニペットをまだ用意していない場合は、[既に生成してあるコードスニペットを見つけるにはどうすればよいですか?](CloudWatch-RUM-find-code-snippet.md) の手順に従ってスニペット入手できます。

**CloudWatch RUM のコードスニペットをアプリケーションに挿入するには**

1. 前のセクションでコピーまたはダウンロードしたコードスニペットをアプリケーションの `<head>` 要素に挿入します。スニペットは、`<body>` 要素または他のすべての `<script>` タグより前に挿入してください。

   生成されるスクリプトの例を以下に示します。

   ```
   <script>
   (function (n, i, v, r, s, c, x, z) {
       x = window.AwsRumClient = {q: [], n: n, i: i, v: v, r: r, c: c};
       window[n] = function (c, p) {
           x.q.push({c: c, p: p});
       };
       z = document.createElement('script');
       z.async = true;
       z.src = s;
       document.head.insertBefore(z, document.getElementsByTagName('script')[0]);
   })('cwr',
       '194a1c89-87d8-41a3-9d1b-5c5cd3dafbd0',
       '1.0.0',
       'us-east-2',
       'https://client.rum.us-east-1.amazonaws.com/1.0.2/cwr.js',
       {
           sessionSampleRate: 1,
           identityPoolId: "us-east-2:c90ef0ac-e3b8-4d1a-b313-7e73cfd21443",
           endpoint: "https://dataplane.rum.us-east-2.amazonaws.com",
           telemetries: ["performance", "errors", "http"],
           allowCookies: true,
           enableXRay: false
       });
   </script>
   ```

1. 対象のウェブアプリケーションが複数のページを持つ場合は、データを収集した各 HTML ページごとに、ステップ 1 を繰り返す必要があります。

# ユーザーイベントを生成して CloudWatch アプリケーションモニタの設定内容をテストする
<a name="CloudWatch-RUM-get-started-generate-data"></a>

コードスニペットを挿入し、更新されたアプリケーションを実行したら、そのテストのためにユーザーイベントを手動で生成します。このテストでは、以下を実行することをお勧めします。このテストでは、標準の CloudWatch RUM 料金が発生します。
+ ウェブアプリケーション内のページ間を移動する。
+ 異なるブラウザとデバイスを使用しながら、複数のユーザーセッションを作成する。
+ リクエストを発行する。
+ JavaScript エラーを発生させる。

いくつかのイベントを生成したら、CloudWatch RUM ダッシュボードでそれらを確認します。詳細については、「[CloudWatch RUM ダッシュボードの表示](CloudWatch-RUM-view-data.md)」を参照してください。

ユーザーセッションのデータがダッシュボードに表示されるまでには、最大で 15 分かかる場合があります。

アプリケーションでイベントを生成してから、15 分経過してもデータが表示されない場合は、[CloudWatch RUM のトラブルシューティング](CloudWatch-RUM-troubleshooting.md) を参照してください。

# CloudWatch RUM でのリソースベースのポリシーの使用
<a name="CloudWatch-RUM-resource-policies"></a>

CloudWatch RUM アプリモニターにリソースポリシーをアタッチできます。既定では、アプリケーションモニターにはリソースポリシーがアタッチされていません。CloudWatch RUM リソースベースのポリシーは、クロスアカウントアクセスをサポートしていません。

AWS リソースのポリシーの詳細については、「[アイデンティティベースおよびリソースベースのポリシー](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_identity-vs-resource.html)」を参照してください。

リソースポリシーと ID ポリシーの評価方法の詳細については、「[ポリシーの評価論理](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_evaluation-logic.html)」を参照してください。

IAM ポリシーの文法の詳細については、「[IAM JSON ポリシー要素のリファレンス](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_elements.html)」を参照してください。

## サポートされているアクション
<a name="RUM-resource-policies-actions"></a>

アプリケーションモニターのリソースベースのポリシーは、`rum:PutRumEvents` アクションをサポートします。

## CloudWatch RUM で 使用するサンプルポリシー
<a name="RUM-resource-policies-samples"></a>

次の例では、SigV4 認証情報がないものを含め、誰でもアプリケーションモニターにデータを書き込むことができます。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rum:PutRumEvents",
            "Resource": "arn:aws:rum:us-east-1:123456789012:appmonitor/app monitor name",
            "Principal": "*"
        }
    ]
}
```

------

`aws:SourceIp` 条件キーを使用して、指定された送信元 IP アドレスをブロックするようにポリシーを変更できます。この例では、このポリシーを使用すると、リストされている IP アドレスの PutRumEvents は拒否されます。他の IP アドレスからの他のすべてのリクエストは受け入れられます。この条件キーの詳細については、IAM ユーザーガイドの「[ネットワークのプロパティ](https://docs.aws.amazon.com/IAM/latest/UserGuide/reference_policies_condition-keys.html#condition-keys-network-properties)」を参照してください。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Effect": "Allow",
            "Action": "rum:PutRumEvents",
            "Resource": "arn:aws:rum:us-east-1:123456789012:appmonitor/AppMonitorName",
            "Principal": "*"
        },
        {
            "Effect": "Deny",
            "Action": "rum:PutRumEvents",
            "Resource": "arn:aws:rum:us-east-1:123456789012:appmonitor/AppMonitorName",
            "Principal": "*",
            "Condition": {
                "NotIpAddress": {
                "aws:SourceIp": "198.51.100.252"
                }
            }
        }
    ]
}
```

------

さらに、`rum:alias` サービスコンテキストキーを使用して、受け入れるリクエストを制御できます。

ウェブアプリケーションモニターの場合、GitHub の「[アプリケーション固有の設定](https://github.com/aws-observability/aws-rum-web/blob/main/docs/configuration.md)」で説明されているように、CloudWatch RUM ウェブクライアントのバージョン 1.20 以降を使用して `Alias` を送信するようにウェブクライアントを設定する必要があります。

モバイルアプリケーションモニターの場合、SDK に従って計測を設定する必要があります。
+ iOS アプリケーションは [AWS Distro for OpenTelemetry (ADOT) iOS SDK ](https://github.com/aws-observability/aws-otel-swift)を使用します。
+ Android アプリケーションは [AWS Distro for OpenTelemetry (ADOT) Android SDK](https://github.com/aws-observability/aws-otel-android) を使用します。

次の例では、イベントを受け入れるには、リソースポリシーで、リクエストに `alias1` または `alias2` を含める必要があります。

```
    {
    "Version":"2012-10-17",                   
    "Statement": [
        {
            "Sid": "AllowRUMPutEvents",
            "Effect": "Allow",
            "Action": "rum:PutRumEvents",
            "Resource": "arn:aws:rum:us-east-1:123456789012:appmonitor/MyApplication",
            "Principal": "*",
            "Condition": {
                "StringEquals": {
                    "rum:alias":["alias1", "alias2"]
                }
            }
        }
    ]
}
```

# CloudWatch RUM ウェブクライアントの設定
<a name="CloudWatch-RUM-configure-client"></a>

アプリケーションでは、CloudWatch RUM によって生成されたコードスニペットの 1 つを使用して、CloudWatch RUM ウェブクライアントをインストールできます。生成されたスニペットは、NPM 経由の JavaScript モジュール、またはコンテンツ配信ネットワーク (CDN) の 2 つのインストール方法をサポートしています。ベストパフォーマンスを実現するため、NPM によるインストール方法を使用することをお勧めします。この方法を使用する詳細については、「[Installing as a JavaScript Module](https://github.com/aws-observability/aws-rum-web/blob/main/docs/npm_installation.md)」(JavaScript モジュールとしてインストールする) を参照してください。

CDN インストールオプションを使用すると、広告ブロッカーが、CloudWatch RUM によって提供されるデフォルトの CDN をブロックする場合があります。これにより、広告ブロッカーをインストールしているユーザーのアプリケーションモニターリングが無効になります。このため、デフォルトの CDN は、CloudWatch RUM を使用する初期オンボーディングにのみ使用することをお勧めします。この問題を軽減する方法の詳細については、「[Instrument the application](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md#instrument-the-application)」(アプリケーションの計測) を参照してください。

コードスニペットは、HTML ファイルの `<head>` タグ内に配置されており、ウェブクライアントをダウンロードしてインストールします。さらにモニターリング対象のアプリケーション向けに、インストールしたウェブクライアントを設定します。このスニペットは、次のような自己実行が可能な関数です。この例では、読みやすさのためにスニペットの関数の本体は省略されています。

```
<script>
(function(n,i,v,r,s,c,u,x,z){...})(
'cwr',
'00000000-0000-0000-0000-000000000000',
'1.0.0',
'us-west-2',
'https://client.rum.us-east-1.amazonaws.com/1.0.2/cwr.js',
{ /* Configuration Options Here */ }
);
<script>
```

## 引数
<a name="CloudWatch-RUM-configure-client-arguments"></a>

このコードスニペットでは、以下の 6 つの引数を受け入れます。
+ ウェブクライアントでコマンドを実行するための名前空間 (例: `'cwr'`)
+ アプリケーションモニターの ID (例: `'00000000-0000-0000-0000-000000000000'`)
+ アプリケーションのバージョン (例: `'1.0.0'`)
+ アプリケーションモニターの AWS リージョン (例: `'us-west-2'`)
+ ウェブクライアントの URL (例: `'https://client.rum.us-east-1.amazonaws.com/1.0.2/cwr.js'`)
+ アプリケーションに固有の設定オプション 詳細については、以下のセクションを参照してください。

## エラーの無視
<a name="CloudWatch-RUM-configure-ignore-errors"></a>

CloudWatch RUM ウェブクライアントは、アプリケーションで発生するあらゆる種類のエラーをリッスンします。CloudWatch RUM ダッシュボードに表示したくない JavaScript エラーがアプリケーションから発行される場合、CloudWatch RUM ウェブクライアントを設定してこれらのエラーを除外し、関連するエラーイベントのみを CloudWatch RUM ダッシュボードに表示することができます。例えば、修正方法がすでに特定されている一部の JavaScript エラーが大量に発生して他のエラーを覆い隠しているような場合は、これらのエラーをダッシュボードに表示しないように選択できます。また、サードパーティが所有するライブラリに帰属するために修正できないエラーも無視したい場合があります。

特定の JavaScript エラーを除外するためにウェブクライアントをインストルメントする方法の詳細については、ウェブクライアントの Github ドキュメントの「[Errors](https://github.com/aws-observability/aws-rum-web/blob/main/docs/configuration.md#errors)」(エラー) の例を参照してください。

## 設定オプション
<a name="CloudWatch-RUM-configure-options"></a>

CloudWatch RUM ウェブクライアントで使用できる設定オプションの詳細については、「[CloudWatch RUM web client documentation](https://github.com/aws-observability/aws-rum-web/blob/main/docs/configuration.md)」を参照してください。

# JavaScript エラースタックトレースの最小化解除を有効にする
<a name="CloudWatch-RUM-JavaScriptStackTraceSourceMaps"></a>

ウェブアプリケーションの JavaScript ソースコードが最小化されると、エラースタックトレースの読み取りが困難になる可能性があります。ソースマップを Amazon S3 にアップロードすることで、スタックトレースの最小化解除を有効にすることができます。CloudWatch RUM はソースマップを取得して、最小化されたソースコードの行と列の番号を最小化されていない元のソースコードにマッピングします。これにより、エラースタックトレースの読みやすさが向上し、元のソースコード内のエラーの場所を特定できます。

## 要件と構文
<a name="CloudWatch-RUM-RequirementsJavaScriptStackTraceSourceMaps"></a>

ソースマップは、複数のさまざまなリリースにわたるウェブアプリケーションの問題をデバッグおよび追跡するために不可欠です。各ウェブアプリケーションリリースに一意のソースマップがあることを確認します。各リリースには一意の releaseId が必要です。releaseId は 1～200 文字の文字列である必要があります。含めることができるのは、文字、数字、アンダースコア、ハイフン、コロン、スラッシュ、ピリオドのみです。`releaseId` を RUM イベントにメタデータとして追加するには、CloudWatch RUM ウェブクライアントを設定します。

ソースマップは、[ソースマップ V3 仕様](https://sourcemaps.info/spec.html)で定義された構造に従ったプレーン JSON ファイルであることが想定されます。`version`、`file`、`sources`、`names`、`mappings` の各フィールドは必須です。

各ソースマップのサイズが 50 MB の制限を超えないようにしてください。さらに、RUM サービスで取得できるのは、スタックトレースごとに最大 50 MB のソースマップです。必要に応じて、ソースコードを複数の小さなチャンクに分割します。詳細については、WebpackJS の「[Code Splitting](https://webpack.js.org/guides/code-splitting/)」を参照してください。

**Topics**
+ [要件と構文](#CloudWatch-RUM-RequirementsJavaScriptStackTraceSourceMaps)
+ [RUM サービスアクセスを許可するように Amazon S3 バケットリソースポリシーを設定する](#CloudWatch-RUM-ConfigureS3)
+ [ソースマップをアップロードする](#CloudWatch-RUM-UploadSourceMaps)
+ [CloudWatch RUM ウェブクライアントで releaseId を設定する](#CloudWatch-RUM-ConfigureRumID)
+ [CloudWatch RUM アプリケーションモニターを有効にして JavaScript スタックトレースの最小化を解除する](#CloudWatch-RUM-unminifyjavascript)
+ [RUM コンソールでの最小化が解除されたスタックトレースを表示する](#CloudWatch-RUM-viewunminifiedstacktraces)
+ [最小化が解除されたスタックトレースを CloudWatch Logs で表示する](#CloudWatch-RUM-viewunminifiedstacktracesCWL)
+ [ソースマップのトラブルシューティング](#CloudWatch-RUM-troubleshootsourcemaps)

## RUM サービスアクセスを許可するように Amazon S3 バケットリソースポリシーを設定する
<a name="CloudWatch-RUM-ConfigureS3"></a>

Amazon S3 バケットが RUM appMonitor と同じリージョンにあることを確認します。ソースマップファイルを取得するための RUM サービスアクセスを許可するように Amazon S3 バケットを設定します。`aws:SourceArn` と `aws:SourceAccount` のグローバル条件コンテキストキーを含めて、サービスのアクセス許可をリソースに制限します。これは、[混乱した使節の問題](https://docs.aws.amazon.com/IAM/latest/UserGuide/confused-deputy.html)に対する最も効果的な保護方法です。

次の例では、Amazon S3で `aws:SourceArn` と `aws:SourceAccount` のグローバル条件コンテキストキーを使用して、「混乱した代理」問題を回避する方法を示します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RUM Service S3 Read Permissions",
            "Effect": "Allow",
            "Principal": {
                "Service": "rum.amazonaws.com"
            },
            "Action": [
                "s3:GetObject",
                "s3:ListBucket"
            ],
            "Resource": [
                "arn:aws:s3:::BUCKET_NAME",
                "arn:aws:s3:::BUCKET_NAME/*"
            ],
            "Condition": {
                "StringEquals": {
                    "aws:SourceAccount": "ACCOUNT_ID",
                    "aws:SourceArn": "arn:aws:rum:REGION:ACCOUNT_ID:appmonitor/APP_MONITOR_NAME"
                }
            }
        }
    ]
}
```

------

AWS KMS キーを使用してデータを暗号化する場合は、キーのリソースポリシーを同様に設定して `aws:SourceArn` と `aws:SourceAccount` のグローバル条件コンテキストキーを含めて、キーを使用してソースマップファイルを取得するためのアクセスを RUM サービスに付与します。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Sid": "RUM Service KMS Read Permissions",
            "Effect": "Allow",
            "Principal": {
                "Service": "rum.amazonaws.com"
            },
            "Action": "kms:Decrypt",
            "Resource": "arn:aws:kms:us-east-1:123456789012:key/KEY_ID",
            "Condition": {
                "StringEquals": {
                "aws:SourceAccount": "123456789012",
    "aws:SourceArn": "arn:aws:rum:us-east-1:123456789012/APP_MONITOR_NAME"
                }
            }
        }
    ]
}
```

------

## ソースマップをアップロードする
<a name="CloudWatch-RUM-UploadSourceMaps"></a>

最小化中にソースマップを生成するように JavaScript バンドルを設定します。アプリケーションを構築すると、バンドルは、最小化された JavaScript ファイルとそれに対応するソースマップを含むディレクトリ (dist など) を作成します。例については、以下を参照してください。

```
./dist
    |-index.d5a07c87.js
    |-index.d5a07c87.js.map
```

ソースマップファイルを Amazon S3 のバケットにアップロードします。ファイルは、`releaseId` を名前とするフォルダに配置する必要があります。例えば、バケット名が `my-application-source-maps` で、`releaseId` が 2.0.0 の場合、ソースマップファイルは次の場所に配置されます。

```
my-application-source-maps
    |-2.0.0
        |-index.d5a07c87.js.map
```

ソースマップのアップロードを自動化するには、次の bash スクリプトを作成し、ビルドプロセスの一部として実行できます。

```
#!/bin/bash
# Ensure the script is called with required arguments
if [ "$#" -ne 2 ]; then
 echo "Usage: $0 S3_BUCKET_NAME RELEASE_ID"
 exit 1
fi

# Read arguments
S3_BUCKET="$1"
RELEASE_ID="$2"

# Set the path to your build directory
BUILD_DIR="./dist"


# Upload all .map files recursively
 if aws s3 cp "$BUILD_DIR" "s3://$S3_BUCKET/$RELEASE_ID/" --recursive --exclude "*" --include "*.map"; then
    echo "Successfully uploaded all source map files"
else
    echo "Failed to upload source map files"
fi
```

## CloudWatch RUM ウェブクライアントで releaseId を設定する
<a name="CloudWatch-RUM-ConfigureRumID"></a>

CloudWatch RUM は、設定済みの `releaseId` を使用して、ソースマップファイルを取得するフォルダを決定します。`releaseId` にソースマップファイルフォルダと同じ名前を付けます。上記 bash スクリプトまたは同様の bash スクリプトを使用した場合、スクリプトで設定された `releaseId` は、CloudWatch RUM ウェブクライアントで設定されたものと同じである必要があります。CloudWatch RUM ウェブクライアントのバージョン 1.21.0 以降を使用する必要があります。

```
import { AwsRum, AwsRumConfig } from "aws-rum-web";

try {
    const config: AwsRumConfig = {
        sessionSampleRate: 1,
        endpoint: "https://dataplane.rum.us-west-2.amazonaws.com",
        telemetries: ["performance", "errors", "http"],
        allowCookies: true,
        releaseId: "RELEASE_ID", //Add this
    };

    const APPLICATION_ID: string = "APP_MONITOR_ID";
    const APPLICATION_VERSION: string = "1.0.0";
    const APPLICATION_REGION: string = "us-west-2";

    new AwsRum(APPLICATION_ID, APPLICATION_VERSION, APPLICATION_REGION, config);
} catch (error: any) {
    // Ignore errors thrown during CloudWatch RUM web client initialization
}
```

## CloudWatch RUM アプリケーションモニターを有効にして JavaScript スタックトレースの最小化を解除する
<a name="CloudWatch-RUM-unminifyjavascript"></a>

JavaScript スタックトレースの最小化を解除するには、アプリケーションモニターの SourceMap ステータスを `ENABLED` に設定します。アプリケーションモニターのすべてのソースマップを含むバケットまたはフォルダの Amazon S3 URI を指定します。

ソースマップを (サブフォルダではなく) メインバケットに直接保存する場合、Amazon S3 URI は `Amazon S3://BUCKET_NAME` の形式である必要があります。この場合、ソースマップファイルは次の場所に配置する必要があります。

```
BUCKET_NAME
    |- RELEASE_ID
        |-index.d5a07c87.js.map
```

子ディレクトリがルートの場合、Amazon S3 URI は `Amazon S3://BUCKET_NAME/DIRECTORY` の形式である必要があります。この場合、ソースマップファイルは次の場所に配置する必要があります。

```
BUCKET_NAME
    |- DIRECTORY
        |-RELEASE_ID
            |-index.d5a07c87.js.map
```

## RUM コンソールでの最小化が解除されたスタックトレースを表示する
<a name="CloudWatch-RUM-viewunminifiedstacktraces"></a>

ソースマップを Amazon S3 にアップロードし、RUM アプリモニターでソースマップを有効にして、CloudWatch RUM ウェブクライアントで設定された `releaseId` を使用してウェブアプリケーションをデプロイした後、RUM コンソールで **[イベント]** を選択します。このタブには、生の RUM イベントデータが表示されます。JS エラーイベントタイプでフィルタリングして最新の JS エラーイベントを表示します。機能を有効にした後に取り込まれたイベントの新しい `event_details.unminifiedStack` フィールドに最小化が解除あれたスタックトレースが表示されます。

## 最小化が解除されたスタックトレースを CloudWatch Logs で表示する
<a name="CloudWatch-RUM-viewunminifiedstacktracesCWL"></a>

**[データストレージ]** をオンにして、CloudWatch Logs で RUM イベントストレージを有効にします。有効にすると、新しい **event\$1details.unminifiedStack** フィールドを検索できます。これにより、CloudWatch Logs クエリを使用して傾向を分析し、複数のセッションにわたる問題を関連付けることができます。

## ソースマップのトラブルシューティング
<a name="CloudWatch-RUM-troubleshootsourcemaps"></a>

CloudWatch RUM には、ソースマップのセットアップのトラブルシューティングにすぐに使えるメトリクスが用意されています。これらのメトリクスは、`AWS/RUM` という名前の名前空間で発行されます。次のメトリクスは、application\$1name ディメンションとともに発行されます。このディメンションの値は、アプリケーションモニターの名前です。メトリクスは、`aws:releaseId` ディメンションとともに発行されます。このディメンションの値は、JavaScript エラーイベントに関連付けられた `releaseId` です。


| MetricName | Unit | 説明 | 
| --- | --- | --- | 
|  UnminifyLineFailureCount  |  カウント  |  JS エラーイベントのスタックトレースラインのうち、最小化されなかったものの数。障害に関する追加の詳細は、event\$1details.unminifiedStack フィールドの失敗した特定の行に追加されます。  | 
|  UnminifyLineSuccessCount  |  カウント  | JS エラーイベントのスタックトレースラインのうち、正常に最小化されたものの数。 | 
| UnminifyEventFailureCount | カウント | いずれの行も最小化されなかった JS エラーイベントの数。最小化の失敗に関する詳細は、event\$1details.unminifiedStack フィールドに追加されます。 | 
| UnminifyEventSuccessCount | カウント | 少なくとも 1 つのスタックトレース行が最小化された JS エラーイベントの数。 | 

CloudWatch RUM は、以下を始めとするさまざまな理由でスタックトレース行の最小化に失敗することがあります。
+ アクセス許可の問題が原因で対応するソースマップファイルが取得できない。バケットリソースポリシーが正しく設定されていることを確認してください。
+ 対応するソースマップファイルが存在しない。ソースマップファイルが CloudWatch RUM ウェブクライアントで設定された releaseId と同じ名前の正しいバケットまたはフォルダにアップロードされていることを確認してください。
+ 対応するソースマップファイルが大きすぎる。ソースコードを小さなチャンクに分割してください。
+ スタックトレース用に既に取得されている 50 MB 分のソースマップファイル。スタックトレースの長さを 50 MB に減らします。これはサービス側の制限です。
+ ソースマップが無効で、インデックスを作成できなかった。ソースマップがソースマップ V3 仕様で定義された構造に従ったプレーン JSON であること、およびバージョン、ファイル、ソース、名前、マッピングのフィールドが含まれていることを確認してください。
+ ソースマップが、最小化されたソースコードを最小化されていないスタックトレースにマッピングできなかった。ソースマップが、指定された releaseId の正しいソースマップであることを確認してください。

# 地域化
<a name="CloudWatch-RUM-Regionalization"></a>

このセクションでは、CloudWatch RUM をさまざまなリージョンのアプリケーションで使用する戦略について説明します。

## アプリケーションが複数の AWS リージョンにデプロイされている
<a name="CloudWatch-RUM-Regionalization-multiple"></a>

アプリケーションが複数の AWS リージョンにデプロイされている場合、以下の 3 つのオプションがあります。
+ 1 つのリージョン、1 つのアカウントに 1 つのアプリモニタをデプロイして、すべてのリージョンにサービスを提供します。
+ リージョンごとに一意のアカウントで、個別のアプリモニタをデプロイします。
+ リージョンごとに、すべて 1 つのアカウントで、個別のアプリモニタをデプロイします。

1 つのアプリモニタを使用する利点は、すべてのデータが 1 つのビジュアライゼーションに一元化され、すべてのログが CloudWatch Logs の同じロググループに書き込まれることです。アプリモニタが 1 つしかないと、リクエストに若干のレイテンシーが発生し、単一障害点が発生します。

複数のアプリモニタを使用すると、単一障害点はなくなりますが、すべてのデータを 1 つのビジュアライゼーションにまとめることはできません。

### アプリケーションがデプロイされている一部のリージョンで、CloudWatch RUM がリリースされていない
<a name="CloudWatch-RUM-Regionalization-notavailable"></a>

CloudWatch RUM は多くのリージョンでリリースされており、地理的にも広範囲に及んでいます。CloudWatch RUM が利用可能なリージョンにセットアップすることで、そのメリットを得ることができます。接続先のリージョンにアプリモニタをセットアップしていれば、エンドユーザーはどこにいてもセッションを含めることができます。

ただし、CloudWatch RUM は中国のどのリージョンでもまだ利用可能になっていません。これらのリージョンから CloudWatch RUM にデータを送信することはできません。

# ページグループを使用する
<a name="CloudWatch-RUM-page-groups"></a>

ページグループを使用して、アプリケーション内の異なるページを相互に関連付けて、ページグループの集計分析を確認できるようにします。例えば、すべてのランディングページのロード時間の集計を確認したい場合があります。

ページをページグループに入れるには、CloudWatch RUM ウェブクライアントのページビューイベントに 1 つまたは複数のタグを追加します。次の例では、`/home` ページを `en` という名前のページグループと `landing` という名前のページグループに入れています。

**埋め込みスクリプトの例**

```
cwr('recordPageView', { pageId: '/home', pageTags: ['en', 'landing']});
```

**JavaScript モジュールの例**

```
awsRum.recordPageView({ pageId: '/home', pageTags: ['en', 'landing']});
```

**注記**  
ページグループは、さまざまなページにわたる分析の集計を容易にすることを目的としています。アプリケーションに合わせて `pageIds` を定義し、操作する方法については、「[コードスニペットを変更して CloudWatch RUM ウェブクライアントを構成する (オプション)](CloudWatch-RUM-modify-snippet.md)」の「**ページビューを手動で記録する**」セクションを参照してください。

# カスタムメタデータを指定する
<a name="CloudWatch-RUM-custom-metadata"></a>

CloudWatch RUM は、メタデータとして各イベントに追加データをアタッチします。イベントメタデータはキーと値のペアの形式の属性で構成されます。これらの属性を使用して、CloudWatch RUM コンソールでイベントを検索またはフィルタリングできます。デフォルトでは、CloudWatch RUM はいくつかのメタデータを自動的に作成します。デフォルトメタデータの詳細については、「[RUM イベントのメタデータ](CloudWatch-RUM-datacollected.md#CloudWatch-RUM-datacollected-metadata)」を参照してください。

また、CloudWatch RUM ウェブクライアントを使用して、CloudWatch RUM イベントにカスタムメタデータを追加することもできます。カスタムメタデータには、セッション属性とページ属性を含めることができます。

カスタムメタデータを追加するには、CloudWatch RUM ウェブクライアントのバージョン 1.10.0 以降を使用する必要があります。

## 要件と構文
<a name="CloudWatch-RUM-custom-metadata-syntax"></a>

各イベントのメタデータには最大で 10 個のカスタム属性を含めることができます。カスタム属性の構文要件は次のとおりです。
+ **キー**
  + 最大 128 文字
  + 英数字、コロン (:)、アンダースコア (\$1) を使用できます。
  + 先頭を `aws:` にすることはできません。
  + 次のセクションに記載されている予約キーワードのみで構成することはできません。これらのキーワードを長いキー名の一部として使用することはできます。
+ **[値]**
  + 最大 256 文字
  + 文字列、数値、またはブール値である必要があります

**予約キーワード**

次の予約キーワードをキー名そのものとして使用することはできません。次のキーワードを `applicationVersion` のように長いキー名の一部として使用することはできます。
+ `browserLanguage`
+ `browserName`
+ `browserVersion`
+ `countryCode`
+ `deviceType`
+ `domain`
+ `interaction`
+ `osName`
+ `osVersion`
+ `pageId`
+ `pageTags`
+ `pageTitle`
+ `pageUrl`
+ `parentPageId`
+ `platformType`
+ `referrerUrl`
+ `subdivisionCode`
+ `title`
+ `url`
+ `version`

**注記**  
CloudWatch RUM は、属性に無効なキーまたは値が含まれている場合、またはイベントあたりのカスタム属性の上限 10 個に既に達している場合、RUM イベントからカスタム属性を削除します。

## セッション属性を追加する
<a name="CloudWatch-RUM-session-attributes"></a>

カスタムセッション属性を設定すると、セッション内のすべてのイベントに追加されます。セッション属性は、CloudWatch RUM ウェブクライアントの初期化中または実行時に `addSessionAttributes` コマンドを使用して設定します。

例えば、アプリケーションのバージョンをセッション属性として追加できます。次に、CloudWatch RUM コンソールで、エラーをバージョン別にフィルタリングして、エラー率の増加がアプリケーションの特定のバージョンに関連しているかどうかを確認できます。

**初期化時のセッション属性の追加、NPM の例**

太字のコードセクションでセッション属性が追加されます。

```
import { AwsRum, AwsRumConfig } from 'aws-rum-web';

try {
  const config: AwsRumConfig = {
    allowCookies: true,
    endpoint: "https://dataplane.rum.us-west-2.amazonaws.com",
    guestRoleArn: "arn:aws:iam::000000000000:role/RUM-Monitor-us-west-2-000000000000-00xx-Unauth",
    identityPoolId: "us-west-2:00000000-0000-0000-0000-000000000000",
    sessionSampleRate: 1,
    telemetries: ['errors', 'performance'],
    sessionAttributes: {
        applicationVersion: "1.3.8"
    }
  };

  const APPLICATION_ID: string = '00000000-0000-0000-0000-000000000000';
  const APPLICATION_VERSION: string = '1.0.0';
  const APPLICATION_REGION: string = 'us-west-2';

  const awsRum: AwsRum = new AwsRum(
    APPLICATION_ID,
    APPLICATION_VERSION,
    APPLICATION_REGION,
    config
  );
} catch (error) {
  // Ignore errors thrown during CloudWatch RUM web client initialization
}
```

**実行時のセッション属性の追加、NPM の例**

```
awsRum.addSessionAttributes({ 
    applicationVersion: "1.3.8"    
})
```

**初期化時のセッション属性の追加、埋め込みスクリプトの例**

太字のコードセクションでセッション属性が追加されます。

```
<script>
    (function(n,i,v,r,s,c,u,x,z){...})(
        'cwr',
        '00000000-0000-0000-0000-000000000000',
        '1.0.0',
        'us-west-2',
        'https://client.rum.us-east-1.amazonaws.com/1.0.2/cwr.js',
        {
            sessionSampleRate:1,
            guestRoleArn:'arn:aws:iam::000000000000:role/RUM-Monitor-us-west-2-000000000000-00xx-Unauth',
            identityPoolId:'us-west-2:00000000-0000-0000-0000-000000000000',
            endpoint:'https://dataplane.rum.us-west-2.amazonaws.com',
            telemetries:['errors','http','performance'],
            allowCookies:true,
            sessionAttributes: {
                applicationVersion: "1.3.8"
            }
        }
    );
</script>
```

**実行時のセッション属性の追加、埋め込みスクリプトの例**

```
<script>
    function addSessionAttribute() {
        cwr('addSessionAttributes', {
            applicationVersion: "1.3.8"
        })
    }
            
</script>
```

## ページ属性を追加する
<a name="CloudWatch-RUM-page-attributes"></a>

カスタムページ属性を設定すると、現在のページのすべてのイベントに追加されます。ページ属性は、CloudWatch RUM ウェブクライアントの初期化中または実行時に `recordPageView` コマンドを使用して設定します。

例えば、ページテンプレートをページ属性として追加できます。次に、CloudWatch RUM コンソールで、エラーをページテンプレート別にフィルタリングして、エラー率の増加がアプリケーションの特定のページテンプレートに関連しているかどうかを確認できます。

**初期化時のページ属性の追加、NPM の例**

太字のコードセクションでページ属性が追加されます。

```
const awsRum: AwsRum = new AwsRum(
    APPLICATION_ID,
    APPLICATION_VERSION,
    APPLICATION_REGION,
    { disableAutoPageView:  true // optional }
);
awsRum.recordPageView({  
    pageId:'/home',  
    pageAttributes: {
      template: 'artStudio'
    }
});
const credentialProvider = new CustomCredentialProvider();
if(awsCreds) awsRum.setAwsCredentials(credentialProvider);
```

**実行時のページ属性の追加、NPM の例**

```
awsRum.recordPageView({ 
    pageId: '/home', 
    pageAttributes: {
        template: 'artStudio'
    } 
});
```

**初期化時のページ属性の追加、埋め込みスクリプトの例**

太字のコードセクションでページ属性が追加されます。

```
<script>
    (function(n,i,v,r,s,c,u,x,z){...})(
        'cwr',
        '00000000-0000-0000-0000-000000000000',
        '1.0.0',
        'us-west-2',
        'https://client.rum.us-east-1.amazonaws.com/1.0.2/cwr.js',
        {
            disableAutoPageView: true //optional
        }
    );
    cwr('recordPageView', { 
       pageId: '/home',  
       pageAttributes: {
           template: 'artStudio'
       }
    });
    const awsCreds = localStorage.getItem('customAwsCreds');
    if(awsCreds) cwr('setAwsCredentials', awsCreds)
</script>
```

**実行時のページ属性の追加、埋め込みスクリプトの例**

```
<script>
    function recordPageView() {
        cwr('recordPageView', { 
            pageId: '/home', 
            pageAttributes: {
                template: 'artStudio'
            }
        });
    }        
</script>
```

## コンソールでのメタデータ属性によるフィルタリング
<a name="CloudWatch-RUM-custom-attiributes-console"></a>

CloudWatch RUM コンソールでビジュアライゼーションを組み込みまたはカスタムのメタデータ属性でフィルタリングするには、検索バーを使用します。検索バーでは、可視化に適用するフィルター用語を **[key=value]** (キー=値) の形式で最大 20 個指定できます。例えば、Chrome ブラウザのデータのみをフィルタリングするには、**browserName=Chrome** というフィルター用語を追加できます。

デフォルトでは、CloudWatch RUM コンソールは最も一般的な 100 個の属性のキーと値を取得して、検索バーのドロップダウンに表示します。さらにメタデータ属性をフィルター用語として追加するには、検索バーに属性のキーと値を完全な形で入力します。

フィルターには最大 20 のフィルター用語を含めることができ、アプリケーションモニターごとに最大 20 のフィルターを保存できます。フィルターを保存すると、そのフィルターは **[Saved filters]** (保存済みのフィルター) ドロップダウンに保存されます。保存したフィルターを削除することもできます。

# カスタムイベントを送信する
<a name="CloudWatch-RUM-custom-events"></a>

CloudWatch RUM は、[CloudWatch RUM ウェブクライアントによって収集される情報](CloudWatch-RUM-datacollected.md) に記載されているイベントを記録して取り込みます。CloudWatch RUM ウェブクライアントのバージョン 1.12.0 以降を使用している場合は、追加のカスタムイベントを定義、記録、送信できます。定義したイベントタイプごとに、イベントタイプ名と送信するデータを定義します。各カスタムイベントペイロードは最大 6 KB です。

カスタムイベントは、アプリケーションモニターでカスタムイベントが有効になっている場合にのみ取り込まれます。アプリケーションモニターの構成設定を更新するには、CloudWatch RUM コンソールまたは [UpdateAppMonitor](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_UpdateAppMonitor.html) API を使用します。

カスタムイベントを有効にし、カスタムイベントを定義して送信すると、それらを検索できます。それらを検索するには、CloudWatch RUM コンソールの **[Events]** (イベント) タブを使用します。イベントタイプを使用して検索します。

## 要件と構文
<a name="CloudWatch-RUM-custom-event-syntax"></a>

カスタムイベントは、イベントタイプとイベントの詳細で構成されます。これらに対する要件は次のとおりです。
+ **イベントタイプ**
  + これは、イベントの**タイプ**でも**名前**でもかまいません。例えば、**JsError** という名前の CloudWatch RUM 組み込みイベントタイプのイベントタイプは、`com.amazon.rum.js_error_event` です。
  + 1～256 文字である必要があります。
  + 英数字、アンダースコア、ハイフン、およびピリオドの組み合わせを使用できます。
+ **イベントの詳細**
  + CloudWatch RUM に記録したい実際のデータが含まれます。
  + フィールドと値で構成されるオブジェクトである必要があります。

## カスタムイベントの記録例
<a name="CloudWatch-RUM-custom-event-examples"></a>

CloudWatch RUM ウェブクライアントでカスタムイベントを記録するには 2 つの方法があります。
+ CloudWatch RUM ウェブクライアントの `recordEvent` API を使用する。
+ カスタマイズされたプラグインを使用する。

**`recordEvent` API を使用してカスタムイベントを送信する、NPM の例**

```
awsRum.recordEvent('my_custom_event', {
        location: 'IAD', 
        current_url: 'amazonaws.com', 
        user_interaction: {
            interaction_1 : "click",
            interaction_2 : "scroll"
        }, 
        visit_count:10
    }
)
```

**`recordEvent` API を使用してカスタムイベントを送信する、埋め込みスクリプトの例**

```
cwr('recordEvent', {
    type: 'my_custom_event', 
    data: {
        location: 'IAD', 
        current_url: 'amazonaws.com', 
        user_interaction: {
            interaction_1 : "click",
            interaction_2 : "scroll"
        }, 
        visit_count:10
    }
})
```

**カスタマイズされたプラグインを使用してカスタムイベントを送信する例**

```
// Example of a plugin that listens to a scroll event, and
// records a 'custom_scroll_event' that contains the timestamp of the event.
class MyCustomPlugin implements Plugin {
    // Initialize MyCustomPlugin.
    constructor() {
        this.enabled;
        this.context;
        this.id = 'custom_event_plugin';
    }
    // Load MyCustomPlugin.
    load(context) {
        this.context = context;
        this.enable();
    }
    // Turn on MyCustomPlugin.
    enable() {
        this.enabled = true;
        this.addEventHandler();
    }
    // Turn off MyCustomPlugin.
    disable() {
        this.enabled = false;
        this.removeEventHandler();
    }
    // Return MyCustomPlugin Id.
    getPluginId() {
        return this.id;
    }
    // Record custom event.
    record(data) {
        this.context.record('custom_scroll_event', data);
    }
    // EventHandler.
    private eventHandler = (scrollEvent: Event) => {
        this.record({timestamp: Date.now()})
    }
    // Attach an eventHandler to scroll event.
    private addEventHandler(): void {
        window.addEventListener('scroll', this.eventHandler);
    }
    // Detach eventHandler from scroll event.
    private removeEventHandler(): void {
        window.removeEventListender('scroll', this.eventHandler);
    }
}
```

# CloudWatch RUM ダッシュボードの表示
<a name="CloudWatch-RUM-view-data"></a>

CloudWatch RUM は、ロード時間、Apdex スコア、デバイスの情報、ユーザーセッションの地域的な位置、エラーのあるセッションなど、アプリケーションのパフォーマンスに関するデータをユーザーセッションから収集する際に役立ちます。これらの情報はすべて、ダッシュボードに表示されます。

RUM ダッシュボードを表示するには:

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

RUM コンソールには、すべてのアプリケーションモニターのリストビューが表示されます。**[プラットフォーム]** 列は、各アプリケーションモニターがウェブ、Android、iOS のうち、どのアプリケーション用かを示します。**[パフォーマンス]**、**[エラー]**、**[セッション]**、**[メトリクス]**、**[設定]** の各タブを使用して詳細ビューにアクセスするには、アプリケーションモニターを選択します。

## ウェブアプリケーションダッシュボード
<a name="CloudWatch-RUM-web-dashboard"></a>

ウェブアプリケーションモニターを選択すると、次のタブが表示されます。
+ **[パフォーマンス]** タブには、ロード時間、リクエストの情報、ウェブバイタル、ページロードの時間的推移など、ページのパフォーマンスに関する情報が表示されます。このビューにはインタラクティブなウェブバイタルグラフがあり、ページのコアウェブバイタルのさまざまなパーセンタイル値を表示したり、グラフのデータポイントを選択して CloudWatch RUM でキャプチャされた関連イベントを表示したりできます。そこから、メトリクスの急増に関連するイベントをさらに調べたり、選択したイベントの詳細ページを表示して、パフォーマンスの問題を引き起こす特定の条件を特定したりできます。

  このタブでは、**[ページロード]**、**[リクエスト]**、**[ロケーション]** のビューを切り替えて、ページパフォーマンスの詳細を表示することもできます。
+ **[エラー]** タブでは、Javascript エラーに関する情報が表示されます。この情報には、ユーザーに対し最も頻繁に表示されているエラーメッセージ、最もエラーが多いデバイスとブラウザ情報などが含まれています。このビューには、エラーのヒストグラムとエラーのリストビューが含まれます。エラーのリストは、ユーザーとイベントの詳細でフィルタリングできます。エラーメッセージを選択すると、詳細が表示されます。
+ [**HTTP requests**] タブには、エラーが最も多いリクエスト URL、エラーが最も多いデバイスとブラウザ情報が表示されます。このタブには、リクエストのヒストグラム、リクエストのリストビュー、およびネットワークエラーのリストビューが含まれます。エラーのリストは、ユーザーとイベントの詳細でフィルタリングできます。レスポンスコードを選択するとリクエストの詳細が、エラーメッセージを選択するとネットワークエラーの詳細が、表示されます。
+ [**Sessions**] タブには、セッションメトリクスが表示されます。You can request a quota increaseこのタブには、セッション開始イベントのヒストグラムとセッションのリストビューが含まれます。セッションのリストは、イベントタイプ、ユーザーの詳細、およびイベントの詳細でフィルタリングできます。**sessionId** を選択すると、セッションの詳細が表示されます。
+ **イベント** タブには、RUM イベントのヒストグラムと、イベントのリストビューが表示されます。セッションのリストは、イベントタイプ、ユーザーの詳細、およびイベントの詳細でフィルタリングできます。RUM イベントを選択すると、未処理のイベントが表示されます。
+ **[ブラウザとデバイス]** タブには、アプリケーションにアクセスした各種のブラウザやデバイスでの、パフォーマンスや使用状況などに関する情報が表示されます。このビューにあるコントロールでは、フォーカスするビューを **[ブラウザ]** と**[デバイス]** の間で切り替えます。

  対象を単一のブラウザに絞り込むと、そのブラウザのバージョン別に分類されたデータが表示されます。
+ **[User Journey]** (ユーザージャーニー) タブには、ユーザーがアプリケーションをナビゲートするために使用しているパスが表示されます。ユーザーがアプリケーションに入ったポイントと、アプリケーションを終了したページを確認できます。また、それらのユーザーが通過したパスと、同じパスをたどるユーザーの割合なども確認できます。いずれかのノードで一時停止することで、そのページの詳細を取得できます。1 つのパスを選択すると、接続を見やすく強調表示することもできます。
+  **[メトリクス]** タブには、パフォーマンスウェブバイタル、エラーメトリクス (JavaScript エラー、HTTP エラー/障害)、ボリューム、ユーザーフロー、apdex メトリクスなど、アプリケーションモニターによって発行されたすべてのデフォルトの CloudWatch メトリクスが表示されます。アプリケーションの拡張メトリクスを作成した場合、タブにはこれらのメトリクスのサブセットも含まれ、拡張メトリクスセクションに表示されます。このサブセットには、PageViewCount、PerformanceNavigationDuration、Http4xxCount、Http5xxCount、JsErrorCount タイプのメトリクスが含まれます。ダッシュボードには、メトリクスタイプごとに 3 つのメトリクスバリエーションが表示されます。これらは CloudWatch メトリクスであるため、**[ダッシュボードに追加]** オプションを使用してこのタブを独自のダッシュボードにエクスポートし、更新してさらにメトリクスを含めるようにすることもできます。

(オプション) 最初の 6 つのタブで [**Pages**] ボタンを選択すると、リストからページまたはページグループを選択できます。これにより、表示されるデータがアプリケーションの単一ページまたはページグループに関するものに絞り込まれます。さらに、リスト内のページとページグループをお気に入りとしてマークすることも可能です。

## モバイルアプリケーションダッシュボード
<a name="CloudWatch-RUM-mobile-dashboard"></a>

モバイルアプリケーションモニターを選択すると、次のタブが表示されます。
+ **[パフォーマンス]** タブには、画面のロード時間、アプリケーションの起動時間 (コールドとウォーム)、パフォーマンスメトリクス、Apdex スコアの時系列など、モバイルアプリケーションのパフォーマンスに関するインサイトが表示されます。詳細ビューには、画面名、OS バージョン、アプリケーションバージョン、デバイス、および国で分類したパフォーマンスが表示されます。グラフ内の画面のロード時間、アプリケーションの起動時間、または位置データポイントをクリックすると、右側の診断パネルが開き、最新の相関セッションで構成されるデータポイントに関連する詳細なインサイトと、トラブルシューティング用の **[セッション]** タブへのリンクが表示されます。

  このタブでは、**[画面ロード]**、**[アプリケーション起動]**、**[場所]** のビューを切り替えて、アプリケーションパフォーマンスの詳細を表示することもできます。

  タブには、エンドユーザーの満足度を示す Apdex (Application Performance Index) スコアの機能もあります。このスコアは、0 (最低の満足度) から 1 (最高の満足度) までの範囲を取ります。このスコアは、アプリケーションのパフォーマンスのみを基に算出されています。Apdex スコアの詳細については、「[CloudWatch RUM での Apdex スコアの評価方式](#CloudWatch-RUM-apdex)」を参照してください。
+ **[エラー]** タブでは、ネットワークエラー、クラッシュ、ANR (Android)/アプリハング (iOS) の 3 つのカテゴリにアプリケーションの問題を分類します。**[ネットワークエラー]** タブには、ネットワークレイテンシー、クライアントエラー (4xx ステータスコード)、サーバーエラー (5xx ステータスコード) を示す折れ線グラフがあります。グラフ内のこれらの線のデータポイントをクリックすると、診断パネルが開きます。下部の表に、最もよくある 100 のネットワークルートが一覧表示されます。ラジオボタンをクリックすると、選択したネットワークルートで折れ線グラフがフィルタリングされます。

  同様に、**[クラッシュ]** タブと **[ANR/アプリハング]** タブには、各エラーの数の折れ線が表示されますが、これらは扱いやすくありません。下部の表に、最もよくあるクラッシュメッセージまたは ANR/アプリハングのスタックトレースが表示されます。ラジオボタンをクリックするとグラフがフィルタリングされ、エラーメッセージをクリックするとスタックトレース全体が表示されます。
+ **[セッション]** タブには、すべてのセッションを時系列の降順で一覧表示する表が表示されます。下部には、ウォーターフォール形式に視覚化されて選択したセッションのすべてのテレメトリが表示されるため、ユーザーとのやり取りを追跡し、パフォーマンスの問題を特定するのに役立ちます。ウォーターフォール形式内の各行を選択して診断パネルを開くことができます。HTTP リクエストの場合、トレースコンソールにリンクする **[traceId]** が表示されます。

  2xx 以外のステータスコードを持つ HTTP リクエスト、クラッシュ、または ANR (Android)/アプリハング (iOS) の場合、診断パネルにはスタックトレースを含む **[例外]** タブが含まれます。ウォーターフォールで **[表示]** ボタンを使用すると、この情報にすばやくアクセスできます。
+ **[メトリクス]** タブには、パフォーマンスメトリクス (画面のロード時間、アプリケーションのコールド起動時間)、エラーメトリクス (クラッシュ、ANR/アプリハング、HTTP エラー/障害)、ボリュームおよび apdex メトリクスなど、アプリケーションモニターによって発行されたすべてのデフォルトの CloudWatch メトリクスが表示されます。アプリケーションの拡張メトリクスを作成した場合、タブにはこれらのメトリクスのサブセットも含まれ、拡張メトリクスセクションに表示されます。このサブセットには、ScreenLoadTime、ScreenLoadCount、CrashCount、Http4xxCount, Http5xxCount、ANRCount/AppHangCount、ColdLaunchTime、および WarmLaunchTime タイプのメトリクスが含まれます。ダッシュボードには、メトリクスタイプごとに 3 つのメトリクスバリエーションが表示されます。これらは CloudWatch メトリクスであるため、**[ダッシュボードに追加]** オプションを使用してこのタブを独自のダッシュボードにエクスポートし、更新してさらにメトリクスを含めるようにすることもできます。
+ **[設定]** タブでは、アプリケーションモニターの一般的な設定と設定詳細にアクセスできます。また、**[コードスニペット]** タブにアクセスすることもできます。ここには、手動とゼロコードの両方の計測オプションを含む、ADOT SDK を使用してモバイルアプリケーションを計測する手順が含まれています。

### CloudWatch RUM での Apdex スコアの評価方式
<a name="CloudWatch-RUM-apdex"></a>

Apdex (Application Performance Index) は、レポートやベンチマークのための方法、およびアプリケーションの応答時間を評価する方法を定義した、オープンな規格です。Apdex スコアは、時間の経過に伴いアプリケーションのパフォーマンスが受ける影響を特定し、理解するために役立ちます。

Apdex スコアは、エンドユーザーの満足度を示します。このスコアは、0 (最低の満足度) から 1 (最高の満足度) までの範囲を取ります。このスコアは、アプリケーションのパフォーマンスのみを基に算出されています。ユーザーに、アプリケーションの評価が求められることはありません。

個々の Apdex スコアには、3 つのしきい値のいずれかが対応しています。Apdex のしきい値と、実際のアプリケーションの応答時間に基づいて、パフォーマンスが以下の 3 種類に定義されます。
+ **満足** – 実際のアプリケーションの応答時間が、Apdex のしきい値以下。CloudWatch RUM の場合、このしきい値は 2,000 ミリ秒以下です。
+ **許容範囲** – 実際のアプリケーションの応答時間は、Apdex のしきい値より長いものの、そのしきい値の 4 倍以下の範囲に収まる。CloudWatch RUM の場合、この範囲は 2000～8000 ms です。
+ **不満** – 実際のアプリケーションの応答時間が、Apdex のしきい値の 4 倍を超過。CloudWatch RUM の場合、8000 ミリ秒を超えた範囲がこれに相当します。

最終的な 0～1 の Apdex スコアは、次の式を使用して計算されます。

`(positive scores + tolerable scores/2)/total scores * 100`

# CloudWatch RUM で収集できる CloudWatch メトリクス
<a name="CloudWatch-RUM-metrics"></a>

このセクションの表は、ウェブアプリケーション、モバイルアプリケーションの一方または両方から CloudWatch RUM で自動的に収集するメトリクスの一覧です。これらのメトリクスは CloudWatch コンソールで確認できます。詳細については、「[利用可能なメトリクスを表示する](viewing_metrics_with_cloudwatch.md)」を参照してください。

必要に応じて、CloudWatch に拡張メトリクスを送信することもできます。詳細については、「[拡張メトリクス](CloudWatch-RUM-custom-and-extended-metrics.md#CloudWatch-RUM-vended-metrics)」を参照してください。

これらのメトリクスは、`AWS/RUM` という名前の名前空間で発行されます。次のすべてのメトリクスは、`application_name` ディメンションによって発行されます。このディメンションの値は、アプリケーションモニターの名前です。次の表に記載されているように、一部のメトリクスはディメンションを追加して発行されます。


**ウェブメトリクス**  

| メトリクス | 単位 | 説明 | 
| --- | --- | --- | 
|  `HttpStatusCodeCount` |  カウント  |  レスポンスステータスコードによるアプリケーション内の HTTP レスポンスの数。 追加のディメンション: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-metrics.html)  | 
|  `Http4xxCount` |  カウント  |  4xx レスポンスステータスコードによるアプリケーション内の HTTP レスポンスの数。 これらは、4xx コードを生成する `http_event` RUM イベントに基づいて計算されます。  | 
|  `Http4xxCountPerSession` |  カウント  |  4xx レスポンスステータスコードによるセッション内の HTTP レスポンスの数。 これらは、4xx コードを生成する `http_event` RUM イベントに基づいて計算されます。  | 
|  `Http4xxCountPerPageView` |  カウント  |  4xx レスポンスステータスコードによるページレビュー内の HTTP レスポンスの数。 これらは、4xx コードを生成する `http_event` RUM イベントに基づいて計算されます。  | 
|  `Http5xxCount` |  カウント  |  5xx レスポンスステータスコードによるアプリケーション内の HTTP レスポンスの数。 これらは、5xx コードを生成する `http_event` RUM イベントに基づいて計算されます。  | 
|  `Http5xxCountPerSession` |  カウント  |  5xx レスポンスステータスコードによるセッション内の HTTP レスポンスの数。 これらは、5xx コードを生成する `http_event` RUM イベントに基づいて計算されます。  | 
|  `Http5xxCountPerPageView` |  カウント  |  5xx レスポンスステータスコードによるページレビュー内の HTTP レスポンスの数。 これらは、5xx コードを生成する `http_event` RUM イベントに基づいて計算されます。  | 
|  `JsErrorCount` |  カウント  |  取り込まれた JavaScript エラーイベントの数。  | 
|  `JsErrorCountPerSession` |  カウント  |  セッションで取り込まれた JavaScript エラーイベントの数。  | 
|  `JsErrorCountPerPageView` |  カウント  |  ページレビューで取り込まれた JavaScript エラーイベントの数。  | 
|  `NavigationFrustratedTransaction` |  カウント  |  適切ではないしきい値である 8000ms よりも多い `duration` でのナビゲーションイベントの数。ナビゲーションイベントの期間は、`PerformanceNavigationDuration` メトリクスで追跡されます。  | 
|  `NavigationSatisfiedTransaction` |  カウント  |  Apdex の目標である 2000ms 以下の `duration` でのナビゲーションイベントの数。ナビゲーションイベントの期間は、`PerformanceNavigationDuration` メトリクスで追跡されます。  | 
|  `NavigationToleratedTransaction` |  カウント  |  2000 ミリ秒から 8000 ミリ秒の間の `duration` でのナビゲーションイベントの数。ナビゲーションイベントの期間は、`PerformanceNavigationDuration` メトリクスで追跡されます。  | 
|  `PageViewCount` |  カウント  |  アプリケーションモニターによって取り込まれたページビューイベントの数。 これは `page_view_event` RUM イベントをカウントして計算されます。  | 
|  `PageViewCountPerSession` |  カウント  |  セッションのページビューイベントの数。 | 
|  `PerformanceResourceDuration` |  ミリ秒  |  リソースイベントの `duration`。 追加のディメンション: [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-metrics.html)  | 
|  `PerformanceNavigationDuration` |  ミリ秒  |  ナビゲーションイベントの `duration`。  | 
|  `RumEventPayloadSize` |  バイト  |  CloudWatch RUM によって取り込まれるすべてのイベントのサイズ。このメトリクスの `SampleCount` 統計を使用して、アプリケーションモニターが取り込むイベントの数をモニターリングすることもできます。  | 
|  `SessionCount` |  カウント  |  アプリケーションモニターによって取り込まれたセッション開始イベントの数。つまり、開始された新しいセッションの数です。  | 
|  `SessionDuration` |  ミリ秒  |  セッションの期間。この期間はセッション内の最初のイベントから最後のイベントまでの時間に基づいて計算されます。  | 
|  `TimeOnPage` |  ミリ秒  |  ページビューの期間。 この期間は次のページビューまでの時間に基づいて計算されますが、そのページの最初のイベントと最後のイベントの間の時間となるセッションの最後のページは除外されます。  | 
|  `WebVitalsCumulativeLayoutShift` |  なし  |  累積的レイアウトシフトイベントの値を追跡します。  | 
|  `WebVitalsFirstInputDelay` |  ミリ秒  |  最初の入力遅延イベントの値を追跡します。  | 
|  `WebVitalsLargestContentfulPaint` |  ミリ秒  |  最大のコンテンツフルペイントイベントの値を追跡します。  | 
|  `WebVitalsInteractionToNextPaint` |  ミリ秒  |  操作から次のペイントイベントまでの値を追跡します。  | 

モバイルアプリケーションの拡張メトリクスを設定して、分析のためにディメンションを追加できます。


**モバイルメトリクス**  

| メトリクス | 単位 | 説明 | 
| --- | --- | --- | 
|  `ANRCount`  |  カウント  |  Android のみ: Application Not Responding (ANR) インシデントの数。アプリケーションが 5 秒以上応答せず、アプリケーションがクラッシュした場合に発生します。  | 
|  `AppHangCount`  |  カウント  |  iOS のみ: メインループでアプリケーションが 250 ms 以上応答しなくなった回数。  | 
|  `ColdAppLaunchFrustratedTransaction`  |  カウント  |  アプリケーションのコールド起動完了まで 8 秒を超える回数。ユーザーが不満を持つ可能性が高くなります。  | 
|  `ColdAppLaunchSatisfiedTransaction`  |  カウント  |  アプリケーションのコールド起動完了まで 2 秒未満の回数。満足のいくユーザーエクスペリエンスになります。  | 
|  `ColdAppLaunchToleratedTransaction`  |  カウント  |  アプリケーションのコールド起動完了まで 2～8 秒の回数。許容できるが、理想的ではないユーザーエクスペリエンスになります。  | 
|  `ColdLaunchTime`  |  ミリ秒  |  終了状態からアプリケーションを起動するのにかかる時間。 Android の場合: アプリケーション `onCreate` から最初のアクティビティの作成が完了するまでの時間。 iOS の場合: アプリケーションの開始 (`sysctl` プロセス開始コマンドによって決定) から `didBecomeActiveNotification` までの時間。  | 
|  `CrashCount`  |  カウント  |  処理できない例外または OS 終了によって発生した予期しないアプリケーション終了の回数。 Android の場合: 処理できない例外またはシステム終了によるクラッシュ。 iOS の場合: 処理できない例外、致命的なエラー、またはシステム終了によるクラッシュ。 クラッシュデータはローカルに保存され、次回のアプリケーション起動時に報告されます。  | 
|  `DroppedEventsCount`  |  カウント  |  イベントあたりの最大サイズ制限である 30 KB を超えたためにドロップされたログイベントの数。  | 
|  `DroppedSpansCount`  |  カウント  |  スパンあたりの最大サイズ制限である 30 KB を超えたためにドロップされたスパンの数。  | 
|  `Http4xxCount`  |  カウント  |  HTTP リクエスト中にウェブアプリケーションまたはモバイルアプリケーションで発生した HTTP クライアントエラーの数を記録します。  | 
|  `Http5xxCount`  |  カウント  |  HTTP リクエスト中にウェブアプリケーションまたはモバイルアプリケーションで発生した HTTP サーバーエラーの数を記録します。  | 
|  `LogPayloadSize`  |  バイト  |  CloudWatch RUM に送信されるログテレメトリデータのバイト単位のサイズ。 このメトリクスの `SampleCount` 統計を使用して、アプリケーションモニターが取り込むログイベントの数をモニタリングすることもできます。  | 
|  `NetworkLatency`  |  ミリ秒  |  ネットワークリクエストが完了するまでにかかる時間。リクエストの開始からレスポンスの完了までの往復時間を測定します。  | 
|  `ScreenLoadCount`  |  カウント  |  画面ロードの合計数。  | 
|  `ScreenLoadToleratedTransaction`  |  カウント  |  2～8 秒の間に完了した画面ロードの数。許容できるが、理想的ではないユーザーエクスペリエンスになります。  | 
|  `SessionCount`  |  カウント  |  アプリケーションを使用した一意のユーザーセッションの合計数。セッションは、ユーザーがアプリケーションを開いたときに開始し、30 分間非アクティブ状態になるか、明示的に終了されたときに終了します。  | 
|  `SpanPayloadSize`  |  バイト  |  CloudWatch RUM に送信されるスパンテレメトリデータのバイト単位のサイズ。 このメトリクスの `SampleCount` 統計を使用して、アプリケーションモニターが取り込むスパンの数をモニタリングすることもできます。  | 
|  `WarmAppLaunchFrustratedTransaction`  |  カウント  |  アプリケーションのウォーム起動完了まで 8 秒を超える回数。ユーザーが不満を持つ可能性が高くなります。  | 
|  `WarmAppLaunchSatisfiedTransaction`  |  カウント  |  アプリケーションのウォーム起動完了まで 2 秒未満の回数。満足のいくユーザーエクスペリエンスになります。  | 
|  `WarmAppLaunchToleratedTransaction`  |  カウント  |  アプリケーションのウォーム起動完了まで 2～8 秒の回数。許容できるが、理想的ではないユーザーエクスペリエンスになります。  | 
|  `WarmLaunchTime`  |  ミリ秒  |  バックグラウンド状態からアプリケーションを起動するのにかかる時間。 Android の場合: アプリケーション `onCreate` から最初のアクティビティの作成が完了するまでの時間。 iOS の場合: `UIApplicationWillEnterForegroundNotification` から `didBecomeActiveNotification` までの時間。  | 

# CloudWatch に送信できるカスタムメトリクスと拡張メトリクス
<a name="CloudWatch-RUM-custom-and-extended-metrics"></a>

デフォルトでは、RUM アプリケーションモニタはメトリクスを CloudWatch に送信します。これらのデフォルトのメトリクスとディメンションは、「[CloudWatch RUM で収集できる CloudWatch メトリクス](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-metrics.html)」に記載されています。

アプリモニターをセットアップして、メトリクスをエクスポートすることもできます。アプリモニターは、拡張メトリクス、カスタムメトリクス、またはその両方を送信できます。CloudWatch に送信できます。
+ **カスタムメトリクス** – カスタムメトリクスはユーザーが定義するメトリクスです。カスタムメトリクスでは、任意のメトリクス名と名前空間を使用できます。メトリクスを取得するには、任意のカスタムイベント、組み込みイベント、カスタム属性、デフォルト属性を使用します。

  カスタムメトリクスを CloudWatch に送信できます。
+ **拡張メトリクス** – 追加のディメンションを使用して、デフォルトの CloudWatch RUM メトリクスをどれでも CloudWatch に送信できます。これにより、これらのメトリクスはよりきめ細かいビューを提供します。

**Topics**
+ [カスタムメトリクス](#CloudWatch-RUM-custom-metrics)
+ [拡張メトリクス](#CloudWatch-RUM-vended-metrics)

## カスタムメトリクス
<a name="CloudWatch-RUM-custom-metrics"></a>

カスタムメトリクスを送信するには、コンソールではなく、AWS API または AWS CLI を使用する必要があります。AWS API を使用する方法については、「[PutRumMetricsDestination](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_PutRumMetricsDestination.html)」および「[BatchCreateRumMetricDefinitions](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_BatchCreateRumMetricDefinitions.html)」を参照してください。

1 つの送信先に含めることができる拡張メトリクスおよびカスタムメトリクス定義の最大数は、2,000 です。各送信先に送信するカスタムメトリクスまたは拡張メトリクスごとに、ディメンション名とディメンション値の各組み合わせが、この制限に対してカウントされます。CloudWatch RUM のあらゆる種類のイベントまたは属性から派生したカスタムメトリクスに対しては、料金が発生しません。

次の例は、カスタムイベントから派生したカスタムメトリクスの作成方法を示しています。使用されるカスタムイベントの例は次のとおりです。

```
cwr('recordEvent', {
    type: 'my_custom_event', 
    data: {
        location: 'IAD', 
        current_url: 'amazonaws.com', 
        user_interaction: {
            interaction_1 : "click",
            interaction_2 : "scroll"
        }, 
        visit_count:10
    }
})
```

このカスタムイベントがあれば、Chrome ブラウザから `amazonaws.com` URL への訪問数をカウントするカスタムメトリクスを作成できます。次の定義では、アカウントの `RUM/CustomMetrics/PageVisits` 名前空間に `AmazonVisitsCount` という名前のメトリクスを作成します。

```
{
    "AppMonitorName":"customer-appMonitor-name",
    "Destination":"CloudWatch",
    "MetricDefinitions":[
        {
            "Name":"AmazonVisitsCount",
            "Namespace":"PageVisit",
            "ValueKey":"event_details.visit_count",
            "UnitLabel":"Count",
            "DimensionKeys":{
                "event_details.current_url": "URL"
            },
            "EventPattern":"{\"metadata\":{\"browserName\":[\"Chrome\"]},\"event_type\":[\"my_custom_event\"],\"event_details\": {\"current_url\": [\"amazonaws.com\"]}}" 
        }
    ]
}
```

## 拡張メトリクス
<a name="CloudWatch-RUM-vended-metrics"></a>

拡張メトリクスを設定すると、デフォルトの CloudWatch RUM メトリクスをどれでも、追加のディメンションとともに CloudWatch に送信できます。これにより、メトリクスのビューがきめ細かくなります。

デフォルトの CloudWatch RUM メトリクスの詳細については、「[CloudWatch RUM で収集できる CloudWatch メトリクス](CloudWatch-RUM-metrics.md)」を参照してください。

1 つの送信先に含めることができる拡張メトリクスおよびカスタムメトリクス定義の最大数は、2,000 です。各送信先に送信する拡張メトリクスまたはカスタムメトリクスごとに、ディメンション名とディメンション値の各組み合わせが、この制限に対する拡張メトリクスとしてカウントされます。

CloudWatch に拡張メトリクスを送信すると、CloudWatch RUM コンソールを使用してそのメトリクスに CloudWatch アラームを作成できます。

CloudWatch RUM のデフォルトメトリクスに対して作成された拡張メトリクスには、料金が発生しません。

### ウェブアプリケーションの拡張メトリクス
<a name="CloudWatch-RUM-web-extended-metrics"></a>

ウェブアプリケーションの拡張メトリクスでは、次のディメンションがサポートされています。
+ `BrowserName`

  ディメンション値の例: `Chrome`、`Firefox`、`Chrome Headless`
+ `CountryCode` これには、2 文字のコードの ISO-3166 形式を使用します。

  ディメンション値の例: `US`、`JP`、`DE`
+ `DeviceType`

  ディメンション値の例: `desktop`、`mobile`、`tablet`、`embedded`
+ `FileType`

  ディメンション値の例: `Image`、`Stylesheet`
+ `OSName`

  ディメンション値の例: `Linux`、`Windows`、`iOS`、`Android`
+ `PageId`

### モバイルアプリケーションの拡張メトリクス
<a name="CloudWatch-RUM-mobile-extended-metrics"></a>

モバイルアプリケーションの拡張メトリクスでは、次のディメンションがサポートされています。
+ `ScreenName`
  + 画面名属性の値 - アプリケーションの `attributes.screen.name`
  + 値の例: HomeScreen、SettingsView、ProfilePage
+ `DeviceModel`
  + デバイスモデル属性の値 - `resource.attributes.device.model.name`
  + 値の例: iPhone14,3、SM-G998B
+ `OSVersion`
  + オペレーティングシステムのバージョン属性の値 - `resource.attributes.os.version`
  + 値の例: 16.0、13.0

**注記**  
現在サポートされているモバイルアプリケーションのデフォルトメトリクス: `ScreenLoadTime`、`ScreenLoadCount`、`NetworkLatency`、`Http4xxCount`、`Http5xxCount`、`CrashCount`、`ANRCount`、`AppHangCount`、`ColdLaunchTime`、`WarmLaunchTime`、`SessionCount`、`SpanPayloadSize`、および `LogPayloadSize`。

### コンソールを使用して拡張メトリクスをセットアップする
<a name="CloudWatch-RUM-extended-metrics-console"></a>

コンソールを使用して CloudWatch に拡張メトリクスを送信するには、次の手順に従います。

AWS API を使用して CloudWatch に拡張メトリクスを送信する方法については、「[PutRumMetricsDestination](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_PutRumMetricsDestination.html)」と「[BatchCreateRumMetricDefinitions](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_BatchCreateRumMetricDefinitions.html)」を参照してください。

**コンソールを使用してアプリケーションモニタをセットアップし、RUM 拡張メトリクスを CloudWatch に送信するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. メトリクスを送信するアプリケーションモニターの名前を選択します。

1. **[Configuration]** (設定) タブを選択し、**[RUM extended metrics]** (RUM 拡張メトリクス) を選択します。

1. **[Send metrics]** (メトリクスを送信) を選択します。

1. メトリクス名を 1 つまたは複数選択して、ディメンションを追加して送信します。

1. これらのメトリクスのディメンションとして使用するファクターを 1 つまたは複数選択します。選択すると、その選択によって作成される拡張メトリクスの数が **[Number of extended metrics]** (拡張メトリクスの数) に表示されます。

   この数は、選択したメトリクス名の数に、作成したさまざまなディメンションの数を掛けて計算されます。

   1. ページ ID をディメンションとして含むメトリクスを送信するには、**[ページ ID を参照]** を選択し、使用するページ ID を選択します。

   1. デバイスタイプをディメンションとして含むメトリクスを送信するには、**[Desktop devices]** (デスクトップデバイス) または **[Mobile and tablets]** (モバイルとタブレット) を選択します。

   1. オペレーティングシステムをディメンションとして含むメトリクスを送信するには、**[Operating system]** (オペレーティングシステム) で 1 つまたは複数のオペレーティングシステムを選択します。

   1. ブラウザタイプをディメンションとして含むメトリクスを送信するには、**[Browsers]** (ブラウザ) で 1 つまたは複数のブラウザを選択します。

   1. 地理的位置情報をディメンションとして含むメトリクスを送信するには、**[Locations]** (ロケーション) で 1 つまたは複数のロケーションを選択します。

      このアプリケーションモニターがメトリクスを報告したロケーションのみがリストに表示され、そこから選択できます。

1. 選択が終わったら、**[Send metrics]** (メトリクスを送信) を選択します。

1. (オプション) **[Extended metrics]** (拡張メトリクス) リストで、いずれかのメトリクスを監視するアラームを作成するには、そのメトリクスの行で **[Create alarm]** (アラームを作成) を選択します。

   CloudWatch アラーム全般については、「[Amazon CloudWatch でのアラームの使用](CloudWatch_Alarms.md)」を参照してください。CloudWatch RUM 拡張メトリクスにアラームを設定するチュートリアルについては、「[チュートリアル: 拡張メトリクスを作成してアラームを設定する](#CloudWatch-RUM-extended-metrics-alarmtutorial)」を参照してください。

**拡張メトリクスの送信を停止する**

**コンソールを使用して拡張メトリクスの送信を停止するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. メトリクスを送信するアプリケーションモニターの名前を選択します。

1. **[Configuration]** (設定) タブを選択し、**[RUM extended metrics]** (RUM 拡張メトリクス) を選択します。

1. 送信を停止するには、メトリクス名とディメンションの組み合わせを 1 つまたは複数選択します。次に、**[Actions]** (アクション)、**[Delete]** (削除) の順に選択します。

### チュートリアル: 拡張メトリクスを作成してアラームを設定する
<a name="CloudWatch-RUM-extended-metrics-alarmtutorial"></a>

このチュートリアルでは、CloudWatch に送信する拡張メトリクスを設定する方法と、そのメトリクスにアラームを設定する方法を示します。このチュートリアルでは、Chrome ブラウザの JavaScript エラーを追跡するメトリクスを作成します。

**この拡張メトリクスをセットアップしてアラームを設定するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. メトリクスを送信するアプリケーションモニターの名前を選択します。

1. **[Configuration]** (設定) タブを選択し、**[RUM extended metrics]** (RUM 拡張メトリクス) を選択します。

1. **[Send metrics]** (メトリクスを送信) を選択します。

1. **[JSErrorCount]** を選択します。

1. **[Browsers]** (ブラウザ) で **[Chrome]** を選択します。

   この **[JSErrorCount]** と **[Chrome]** の組み合わせにより、1 つの拡張メトリクスが CloudWatch に送信されます。このメトリクスでは、Chrome ブラウザを使用するユーザーセッションの JavaScript エラーのみがカウントされます。メトリクス名は **[JsErrorCount]** になり、ディメンション名は **[Browser]** (ブラウザ) になります。

1. **[Send metrics]** (メトリクスを送信) を選択します。

1. **[Extended metrics]** (拡張メトリクス) リストで、**[Name]** (名前) に **[JsErrorCount]** と表示され、**[BrowserName]** に **[Chrome]**」と表示されている行で **[Create alarm]** (アラームを作成) を選択します。

1. **[Specify metric and conditions]** (メトリクスと条件の指定) で、**[Metric name]** (メトリクス名) と **[BrowserName]** フィールドに正しい値が事前に入力されていることを確認します。

1. **[Statistic]** (統計) で、アラームに使用したい統計を選択します。このタイプのカウントメトリクスには、**[Average]** (平均) が適しています。

1. **[期間]** で、**[5 分]** を選択します。

1. **[条件]** で、次の操作を行います。
   + **[Static]** (静的) を選択します。
   + エラー数がこれから指定するしきい値を超えるとアラームが ALARM 状態になるように指定するには、**[Greater]** (より大きい) を選択します。
   + **[しきい値]** に、アラームしきい値となる数を入力します。5 分間のエラー数がこの数を超えると、アラームは ALARM 状態になります。

1. (オプション) デフォルトでは、エラー数が 5 分間に設定したしきい値を超えるとすぐに、アラームは ALARM 状態になります。必要に応じてこれを変更して、5 分間にこの数を超えることが複数回あった場合に、その回数によってアラームが ALARM 状態になるようにできます。

   そのためには、**[Additional configuration]** (その他の設定) を選択し、**[Datapoints to alarm]** (アラームを実行するデータポイント) で、5 分間にエラー数がしきい値を超えることが何回あるとアラームがトリガーされるかを指定します。例えば、2 回中 2 回を選択して 5 分の期間が 2 回連続してしきい値を超えている場合にのみアラームがトリガーされるようにしたり、3 回中 2 回を選択して連続する 3 回の 5 分の期間のうちいずれか 2 回しきい値を超えた場合にアラームがトリガーされるようにしたりできます。

   この種のアラーム評価の詳細については、「[アラーム評価](alarm-evaluation.md)」を参照してください。

1. **[次へ]** を選択します。

1. **[Configure actions]** (アクションの設定) で、アラームがアラーム状態になったときに実行する処理を指定します。Amazon SNS を使用して通知を受け取るには、以下を実行します。
   + **[通知を追加]** をクリックします。
   + **[アラーム状態]** を選択します。
   + 既存の SNS トピックを選択するか、新しく作成することができます。新しく作成する場合は、名前を指定し、メールアドレスを少なくとも 1 つ追加します。

1. [**次へ**] を選択します。

1. 名前を入力し、必要に応じてアラームの説明を入力して **[Next]** (次へ) を選択します。

1. 詳細を確認し、**[Create alarm]** (アラームを作成) を選択します。

# CloudWatch RUM によるデータ保護とデータプライバシー
<a name="CloudWatch-RUM-privacy"></a>

Amazon CloudWatch RUM でのデータ保護とデータプライバシーには、AWS [責任共有モデル](https://aws.amazon.com/compliance/shared-responsibility-model/)が適用されます。このモデルで定義されるように、AWS は、すべての AWS クラウドを実行するグローバルなインフラストラクチャの保護に責任を負います。ユーザーは、このインフラストラクチャでホストされるコンテンツに対する管理を維持する責任があります。データプライバシーの詳細については、「[データプライバシーのよくある質問](https://aws.amazon.com/compliance/data-privacy-faq/)」を参照してください。欧州でのデータ保護の詳細については、AWS セキュリティブログの記事「[ The AWS Shared Responsibility Model and GDPR](https://aws.amazon.com/blogs/security/the-aws-shared-responsibility-model-and-gdpr/)」を参照してください。GDPR 要件の遵守に関するその他のリソースについては、[一般データ保護規則 (GDPR) センター](https://aws.amazon.com/compliance/gdpr-center/)を参照してください。

Amazon CloudWatch RUM は、収集対象となるエンドユーザーからのデータ入力に基づいてコードスニペットを生成します。このスニペットは、ウェブサイトまたはウェブアプリケーションのコードに埋め込んで使用します。コードスニペットによってダウンロードおよび構成されたウェブクライアントでは、Cookie (もしくは類似の技術) を利用して、エンドユーザーからのデータを収集できます。Cookie (または類似の技術) の使用は、特定の法領域におけるデータプライバシー規制の対象となります。Amazon CloudWatch RUM を使用する前に、プライバシーに関する法的に適切な通知の提供し、クッキーの使用とエンドユーザーデータの (収集を含む) 処理に必要な同意を得るために適用される法的要件を含む、適用法の下でのコンプライアンス義務に関して評価を行うことを強くお勧めします。ウェブクライアントが Cookie (または類似の技術) を使用する方法と、ウェブクライアントが収集するエンドユーザーデータの内容については、「[CloudWatch RUM ウェブクライアントによって収集される情報](CloudWatch-RUM-datacollected.md)」および「[CloudWatch RUM ウェブクライアント Cookie (または類似の技術)](#CloudWatch-RUM-cookies)」を参照してください。

エンドユーザーのアカウント番号、E メールアドレス、その他の個人情報などの機密性がある識別情報は、自由形式のフィールドに格納することは避けるように強くお勧めします。Amazon CloudWatch RUM、または他のサービスに入力したデータは、診断ログに含まれる場合があります。



## CloudWatch RUM ウェブクライアント Cookie (または類似の技術)
<a name="CloudWatch-RUM-cookies"></a>

CloudWatch RUM ウェブクライアントでは、デフォルトで、ユーザーセッションから一定のデータが収集されます。ページロード全体で永続化するユーザー ID とセッション ID をウェブクライアントに収集させるために、Cookie を有効化することができます。ユーザー ID は、RUM によってランダムに生成されます。

これらの Cookie を有効化して、RUM ダッシュボードでアプリケーションモニターに関する表示を行うと、RUM は以下の種類のデータを表示します。
+ 一意のユーザー数や、個々のエラーが発生しているユーザーの数など、ユーザー ID に基づいて集計されたデータ。
+ セッションの総数やエラーが発生したセッションの数など、セッション ID に基づいて集計されたデータ。
+ *ユーザージャーニー*。これは、サンプリングされた各ユーザーセッションに含まれるページ移動のシーケンスです。

**重要**  
これらの Cookie (または類似の技術) を有効にしない場合でも、ウェブクライアントは、エンドユーザーセッションに関する特定の情報 (ブラウザの種類/バージョン、オペレーティングシステムの種類/バージョン、デバイスの種類など) を記録します。これら収集された情報は、ウェブバイタル、ページの表示数、エラーが発生したページ数など、ページ固有に集約されたインサイトを提供するために使用されます。データ記録の詳細については、「[CloudWatch RUM ウェブクライアントによって収集される情報](CloudWatch-RUM-datacollected.md)」を参照してください。

# CloudWatch RUM ウェブクライアントによって収集される情報
<a name="CloudWatch-RUM-datacollected"></a>

このセクションでは、**PutRumEvents** スキーマについて記述します。このスキーマでは、CloudWatch RUM を使用してユーザーセッションから収集できるデータの構造を定義します。

**PutRumEvents** リクエストは、以下のフィールドを持つデータ構造を CloudWatch RUM に送信します。
+ この RUM イベントのバッチ ID
+ 以下を含む、アプリケーションモニターの詳細情報: 
  + アプリケーションモニター ID
  + モニターリング対象アプリケーションのバージョン
+ 以下を含むユーザーの詳細情報: ** このデータは、アプリケーションモニターで Cookie が有効化されている場合にのみ収集されます。**
  + ウェブクライアントによって生成されたユーザー ID
  + セッション ID
+ このバッチ内での [RUM イベント](#CloudWatch-RUM-datacollected-event)の配列

## RUM イベントのスキーマ
<a name="CloudWatch-RUM-datacollected-event"></a>

各 RUM イベントの構造には、以下のフィールドが含まれます。
+ イベントの ID
+ タイムスタンプ
+ イベントタイプ
+ ユーザーエージェント
+ [メタデータ](#CloudWatch-RUM-datacollected-metadata)
+ [RUM イベントの詳細](#CloudWatch-RUM-datacollected-eventDetails)

## RUM イベントのメタデータ
<a name="CloudWatch-RUM-datacollected-metadata"></a>

メタデータには、ページメタデータ、ユーザエージェントのメタデータ、地理的位置情報のメタデータ、およびドメインメタデータが含まれます。

### ページメタデータ
<a name="CloudWatch-RUM-datacollected-metadata-page"></a>

ページメタデータには、以下が含まれます。
+ ページ ID
+ ページタイトル
+ 親ページ ID。– **これらのデータは、アプリケーションモニタで Cookie が有効化されている場合にのみ収集されます。**
+ 操作に関する深度 – **これは、アプリケーションモニタで Cookie が有効化されている場合にのみ収集されます。**
+ ページタグ — ページイベントにタグを追加して、ページをグループ化できます。詳細については、「[ページグループを使用する](CloudWatch-RUM-page-groups.md)」を参照してください。

### ユーザーエージェントのメタデータ
<a name="CloudWatch-RUM-datacollected-metadata-useragent"></a>

ユーザーエージェントのメタデータには、以下が含まれます。
+ ブラウザで使用する言語
+ ブラウザ名
+ ブラウザのバージョン
+ オペレーティングシステム名
+ オペレーティングシステムのバージョン
+ デバイスタイプ
+ プラットフォームの種類

### 地理的位置情報のメタデータ
<a name="CloudWatch-RUM-datacollected-metadata-geolocation"></a>

地理的位置情報のメタデータには以下が含まれます。
+ 国コード
+ 区域コード

### ドメインメタデータ
<a name="CloudWatch-RUM-datacollected-metadata-domain"></a>

ドメインメタデータには URL ドメインが含まれます。

## RUM イベントの詳細
<a name="CloudWatch-RUM-datacollected-eventDetails"></a>

イベントの詳細は、イベントタイプに応じて、以下のいずれかのタイプのスキーマに従います。

### セッション開始イベント
<a name="CloudWatch-RUM-datacollected-sessionstart"></a>

このイベントにはフィールドは含まれません。**このデータは、アプリケーションモニターで Cookie が有効化されている場合にのみ収集されます。**

### ページビュースキーマ
<a name="CloudWatch-RUM-datacollected-pageview"></a>

**ページビュー**イベントには、以下のプロパティが含まれます。ページビューコレクションを非アクティブ化するように、ウェブクライアントを設定できます。詳細については、「[CloudWatch RUM web client documentation](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)」を参照してください。


| 名前 | 型 | 説明 | 
| --- | --- | --- | 
|  **ページ ID** |  String  |  アプリケーション内でこのページを一意に表す ID です。デフォルトでは URL パスが使用されます。  | 
|  **親ページ ID** |  String  |  現在のページに移動する時点で、ユーザーに対し表示されていたページの ID です。**このデータは、アプリケーションモニターで Cookie が有効化されている場合にのみ収集されます。**  | 
|  **操作に関する深度** |  String  |  **このデータは、アプリケーションモニターで Cookie が有効化されている場合にのみ収集されます。**  | 

### JavaScript エラースキーマ
<a name="CloudWatch-RUM-datacollected-JavaScriptError"></a>

エージェントによって生成される JavaScript エラーイベントには、以下のプロパティが含まれます。ウェブクライアントは、エラーテレメトリの収集を選択した場合にのみ、これらのイベントを収集します。


| 名前 | 型 | 説明 | 
| --- | --- | --- | 
|  **エラータイプ** |  String  |  エラーの名前 (存在する場合)。詳細については、「[Error.prototype.name](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/name)」を参照してください。 ブラウザによっては、エラータイプをサポートしていない場合があります。  | 
|  **エラーメッセージ** |  String  |  エラーが返すメッセージ。詳細については、「[Error.prototype.message](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/message)」を参照してください。エラーフィールドが存在しない場合、これはエラーイベントのメッセージになります。詳細については、「[ErrorEvent](https://developer.mozilla.org/en-US/docs/Web/API/ErrorEvent)」を参照してください。 異なるブラウザ間では、エラーメッセージが一貫しない場合があります。  | 
|  **スタックトレース** |  String  |  エラーのスタックトレース (それが存在する場合) は 150 文字に切り捨てられます。詳細については、「[Error.prototype.stack](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Error/Stack)」を参照してください。 ブラウザによっては、スタックトレースをサポートしていない場合があります。  | 

### DOM イベントスキーマ
<a name="CloudWatch-RUM-datacollected-DOMEvent"></a>

エージェントによって生成されるドキュメントオブジェクトモデル (DOM) イベントには、以下のプロパティが含まれます。これらのイベントは、デフォルトでは収集されません。収集されるのは、インタラクションテレメトリをアクティブにした場合のみです。詳細については、「[CloudWatch RUM web client documentation](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)」を参照してください。


| 名前 | 型 | 説明 | 
| --- | --- | --- | 
|  **イベント** |  String  |  クリック、スクロール、ホバーなど、DOM イベントの種類。詳細については、「[イベントのリファレンス](https://developer.mozilla.org/en-US/docs/Web/Events)」を参照してください。  | 
|  **要素** |  String  |  DOM 要素タイプ  | 
|  **要素 ID** |  String  |  イベントを生成した要素が ID を持つ場合、その ID がこのプロパティに格納されます。詳細については、「[Element.id](https://developer.mozilla.org/en-US/docs/Web/API/Element/id)」を参照してください。  | 
|  **CSSLocator** |  String  |  DOM 要素の識別に使用される CSS ロケーター。  | 
|  **InteractionId** |  String  |  ユーザーと UI 間のインタラクションにおける一意の ID です。  | 

### ナビゲーションイベントスキーマ
<a name="CloudWatch-RUM-datacollected-NavigationEvent"></a>

ナビゲーションイベントは、アプリケーションモニターでパフォーマンステレメトリが有効になっている場合にのみ収集されます。

ナビゲーションイベントでは、[ナビゲーションタイミングレベル 1](https://www.w3.org/TR/navigation-timing/#performancetiming)、および[ナビゲーションタイミングレベル 2](https://w3c.github.io/navigation-timing) の API を使用します。レベル 2 の API は、すべてのブラウザーでサポートされている訳ではないため、これらの新しいフィールドはオプションです。

**注記**  
タイムスタンプのメトリクスは、[DOMHighResTimestamp](https://www.w3.org/TR/hr-time-2/#sec-domhighrestimestamp) に基づいています。レベル 2 の API のデフォルトでは、すべてのタイミングが `startTime` に対し相対的です。また、レベル 1 では、タイムスタンプメトリクスから `navigationStart` メトリクスを減算して相対値を算出します。タイムスタンプの値はすべてミリ秒単位で表示されます。

ナビゲーションイベントには、以下のプロパティが含まれます。


| 名前 | 型 | 説明 | 注意事項 | 
| --- | --- | --- | --- | 
|  **initiatorType** |  String  |  パフォーマンスイベントを開始したリソースのタイプを表します。 |  **値:** 「ナビゲーション」 **レベル 1:** 「ナビゲーション」 **レベル 2:** entryData.initiatorType | 
|  **navigationType** |  String  |  ナビゲーションのタイプを表します。この属性は必須ではありません。 |  **値:** この値は以下のいずれかにする必要があります。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html) | 
|  **startTime** |  Number  |  イベントがトリガーされるタイミングを示します。 |  **値:** 0 **レベル 1:** entryData.navigationStart - entryData.navigationStart  **レベル 2:** entryData.startTime | 
|  **unloadEventStart** |  Number  |  ウィンドウ内の前のドキュメントが、アンロードを (`unload` イベントがスローされた後に) 開始したタイミングを示します。 |  **値:**先に表示されたドキュメントが存在しないか、そのドキュメントもしくは必要なリダイレクトの 1 つでオリジンが異なっている場合、返される値は 0 です。 **レベル 1:** <pre>entryData.unloadEventStart > 0<br />  ? entryData.unloadEventStart - entryData.navigationStart<br />  : 0<br /></pre> **レベル 2:** entryData.unloadEventStart | 
|  **promptForUnload** |  Number  |  ドキュメントのアンロードに要した時間。つまり `unloadEventStart` と `unloadEventEnd` の間の時間です。`UnloadEventEnd` は、アンロードイベントのハンドラが終了したタイミングを、ミリ秒単位の時間で表します。 |  **値:**先に表示されたドキュメントが存在しないか、そのドキュメントもしくは必要なリダイレクトの 1 つでオリジンが異なっている場合、返される値は 0 です。 **レベル 1:** entryData.unloadEventEnd - entryData.unloadEventStart **レベル 2:** entryData.unloadEventEnd - entryData.unloadEventStart | 
|  **redirectCount** |  Number  |  現在のブラウジングコンテキストの下で行われた、最後の非リダイレクトナビゲーション以降のリダイレクトの数を表す数値。 この属性は必須ではありません。 |  **値:**リダイレクトが存在しない場合、またはリダイレクトがあってもそのオリジンが送信先ドキュメントと異なっている場合、返される値は 0 です。 **レベル 1:** 利用不可 **レベル 2:** entryData.redirectCount | 
|  **redirectStart** |  Number  |  最初の HTTP リダイレクトが開始された時刻。  |  **値:**リダイレクトが存在しない場合、またはリダイレクトがあってもそのオリジンが送信先ドキュメントと異なっている場合、返される値は 0 です。 **レベル 1:** <pre>entryData.redirectStart > 0<br />  ? entryData.redirectStart - entryData.navigationStart<br />  : 0</pre> **レベル 2:** entryData.redirectStart | 
|  **redirectTime** |  Number  |  HTTP リダイレクトに要した時間。これは、`redirectStart` と `redirectEnd` の間の差です。  |  **レベル 1:**: entryData.redirectEnd - entryData.redirectStart **レベル 2:**: entryData.redirectEnd - entryData.redirectStart | 
|  **workerStart** |  Number  |  これは `PerformanceResourceTiming` インターフェイスのプロパティです。この値は、ワーカースレッドでのオペレーションの開始を示します。 この属性は必須ではありません。 |  **値:** Service Worker スレッドがすでに実行中である、またはそのスレッドを開始する直前である場合、このプロパティは `FetchEvent` をディスパッチする直前の時間を返します。リソースが Service Worker によって傍受されない場合は 0 を返します。 **レベル 1:** 利用不可 **レベル 2:** entryData.workerStart | 
|  **workerTime** |  Number  |  リソースが Service Worker によって傍受されている場合、この値にはワーカースレッドでの処理に要する時間が返されます。 この属性は必須ではありません。 |  **レベル 1:** 利用不可  **レベル 2:** <pre>entryData.workerStart > 0<br />   ? entryData.fetchStart - entryData.workerStart<br />   : 0</pre>  | 
|  **fetchStart** |  Number  |  ブラウザで、HTTP リクエストによるドキュメントのフェッチが準備ができた時刻。これは、アプリケーションキャッシュがチェックされる前のタイミングです。 |  **レベル 1:**  <pre>: entryData.fetchStart > 0<br />  ? entryData.fetchStart - entryData.navigationStart<br />  : 0</pre> **レベル 2:** entryData.fetchStart | 
|  **domainLookupStart** |  Number  |  ドメインルックアップが開始された時間。 |  **値:** 永続接続が使用されている場合、または情報がキャッシュまたはローカルリソースに格納されている場合、この値は `fetchStart` と同じ値になります。 **レベル 1:** <pre>entryData.domainLookupStart > 0<br />  ? entryData.domainLookupStart - entryData.navigationStart<br />  : 0</pre> **レベル 2:** entryData.domainLookupStart | 
|  **dns** |  Number  |  ドメインルックアップに必要な時間。 |  **値:** リソースと DNS レコードがキャッシュされている場合、この値には 0 が想定されます。 **レベル 1:** entryData.domainLookupEnd - entryData.domainLookupStart **レベル 2:** entryData.domainLookupEnd - entryData.domainLookupStart | 
|  **nextHopProtocol** |  String  |  リソースの取得に使用されるネットワークプロトコルを表す文字列。 この属性は必須ではありません。 |  **レベル 1:** 利用不可 **レベル 2:** entryData.nextHopProtocol | 
|  **connectStart** |  Number  |  ユーザーエージェントがドキュメントを取得するためにサーバーへの接続を確立した時点の直前の時間。 |  **値:** RFC2616 の永続接続が使用されている場合、または現在のドキュメントが関連するアプリケーションキャッシュまたはローカルリソースから取得された場合、この属性は値として `domainLookupEnd` を返します。 **レベル 1:** <pre>entryData.connectStart > 0<br />  ? entryData.connectStart - entryData.navigationStart<br />  : 0</pre> **レベル 2:** entryData.connectStart  | 
|  **接続** |  Number  |  転送のための接続の確立、または SSL 認証の実行に必要な時間を測定します。また、ブラウザによって発行される同時リクエストが多すぎる場合の、ブロック時間の長さも含まれます。  |  **レベル 1:** entryData.connectEnd - entryData.connectStart **レベル 2:** entryData.connectEnd - entryData.connectStart | 
|  **secureConnectionStart** |  Number  |  現在のページの URL スキームが「https」の場合、この属性は、ユーザーエージェントが現在の接続を保護するためのハンドシェイクプロセスを開始する直前の時間を返します。HTTPS を使用しない場合は 0 を返します。URL スキームの詳細については、「[URL representation](https://url.spec.whatwg.org/#concept-url-scheme)」を参照してください。  |  **計算式:** entryData.secureConnectionStart | 
|  **tlsTime** |  Number  |  SSL ハンドシェイクを完了するのに要した時間。  |  **レベル 1:** <pre>entryData.secureConnectionStart > 0<br />   ? entryData.connectEnd - entryData.secureConnectionStart<br />   : 0</pre> **レベル 2:** <pre>entryData.secureConnectionStart > 0<br />   ? entryData.connectEnd - entryData.secureConnectionStart<br />   : 0</pre>  | 
|  **requestStart** |  Number  |  ユーザーエージェントが、サーバー、関連するアプリケーションキャッシュ、またはローカルからのリソースに対する要求を開始した時点の直前の時間。  | **レベル 1:** <pre>: entryData.requestStart > 0<br />  ? entryData.requestStart - entryData.navigationStart<br />  : 0<br /></pre> **レベル 2:** entryData.requestStart | 
|  **timeToFirstByte** |  Number  |  リクエストが発行された後、情報の最初のバイトを受信するまでに要した時間。この時間は `startTime` に対して相対的です。  | **レベル 1:** entryData.responseStart - entryData.requestStart **レベル 2:** entryData.responseStart - entryData.requestStart | 
|  **responseStart** |  Number  |  ユーザーエージェントの HTTP パーサーが、関連するアプリケーションキャッシュ、ローカルリソース、またはサーバーから、最初の応答バイトを受信した直後の時間。  | **レベル 1:** <pre>entryData.responseStart > 0<br />   ? entryData.responseStart - entryData.navigationStart<br />   : 0</pre> **レベル 2:** entryData.responseStart   | 
|  **responseTime** |  String  |  関連するアプリケーションキャッシュ、ローカルリソース、またはサーバーから、バイト形式の完全な応答を受信するまでに要した時間。  | **レベル 1:** <pre>entryData.responseStart > 0<br />  ? entryData.responseEnd - entryData.responseStart<br />  : 0</pre> **レベル 2:** <pre>entryData.responseStart > 0<br />  ? entryData.responseEnd - entryData.responseStart<br />  : 0</pre>  | 
|  **domInteractive** |  Number  |  パーサーがメインドキュメントでの作業を終了し、HTML DOM が構築された時間。この際には、`Document.readyState` が「interactive」に変化し、それに対応する `readystatechange` イベントがスローされます。  | **レベル 1:** <pre>entryData.domInteractive > 0<br />  ? entryData.domInteractive - entryData.navigationStart<br />  : 0</pre> **レベル 2:** entryData.domInteractive  | 
|  **domContentLoadedEventStart** |  Number  |  ユーザーエージェントが、現在のドキュメントで DOMContentLoaded イベントを発行した時点の直前の時間を表します。DOMContentLoaded イベントは、最初の HTML ドキュメントが完全に読み込まれ、解析されたタイミングで発行されます。この時点では、メイン HTML ドキュメントの解析が完了し、ブラウザがレンンダーツリーの作成を開始しており、また、サブリソースをロードする必要があります。これにより、スタイルシート、画像、およびサブフレームのローディングが完了するのを待つことはありません。  | **レベル 1:** <pre>entryData.domContentLoadedEventStart > 0<br />  ? entryData.domContentLoadedEventStart - entryData.navigationStart<br />  : 0<br /></pre> **レベル 2:** entryData.domContentLoadedEventStart  | 
|  **domContentLoaded** |  Number  |  これは、レンダーツリー構築の開始と終了の時間で、`domContentLoadedEventStart` と `domContentLoadedEventEnd` によりマークされます。この値により、CloudWatch RUM は実行の追跡を行います。このプロパティ値は、`domContentLoadedStart` と `domContentLoadedEnd` の間の差です。 この期間の間に、DOM と CSSOM の準備が整います。このプロパティは、非同期的および動的に作成されたスクリプトを除き、スクリプトが実行されるまで待機します。また、スクリプトがスタイルシートに依存している場合、`domContentLoaded` はスタイルシートのために待機します。画像のためには待機しません。  `domContentLoadedStart` そして `domContentLoadedEnd` での実際の値は、Google Chrome の ネットワークパネルに表示される `domContentLoaded` に近似します。この値は、ページの読み込みプロセスの開始から、HTML DOM と CSSOM のレンダリングツリーが構築されるまでに要した時間を示します。ナビゲーションメトリクスの場合、`domContentLoaded` 値は開始値と終了値間の差を表します。これは、サブリソースのダウンロードとレンダリングツリー構築に要した時間のみを反映します。   | **レベル 2:** entryData.domContentLoadedEventEnd – entryData.domContentLoadedEventStart  **レベル 2:** entryData.domContentLoadedEventEnd – entryData.domContentLoadedEventStart  | 
|  **domComplete** |  Number  |  現在のドキュメントの準備を完了したことを、ブラウザが知らせてきた時点の直前の時間。この時点で、画像などのサブリソースの読み込みは完了しています。これには、CSS や同期 JavaScript などのブロッキングコンテンツのダウンロードにかかる時間も含まれます。この値は、Google Chrome のネットワークパネルに表示される `loadTime` の値に近似します。  | **レベル 1:** <pre>entryData.domComplete > 0<br />  ? entryData.domComplete - entryData.navigationStart<br />  : 0<br /></pre> **レベル 2:** entryData.domComplete  | 
|  **domProcessingTime** |  Number  |  レスポンスとロードイベント開始までの間の合計時間。  | **レベル 1:** entryData.loadEventStart - entryData.responseEnd **レベル 2:** entryData.loadEventStart - entryData.responseEnd  | 
|  **loadEventStart** |  Number  |  現在のドキュメントの `load` イベントが発行された直前の時間。 |  **レベル 1:** <pre>entryData.loadEventStart > 0<br />  ? entryData.loadEventStart - entryData.navigationStart<br />  : 0<br /></pre> **レベル 2:** entryData.loadEventStart | 
|  **loadEventTime** |  Number  |  `loadEventStart` と `loadEventEnd` の違い。このロードイベントを待っている追加の関数またはロジックは、この間に起動されます。 |  **レベル 1:** entryData.loadEventEnd - entryData.loadEventStart **レベル 2:** entryData.loadEventEnd - entryData.loadEventStart | 
|  **duration** |  String  |  この期間は、ページの合計読み込み時間です。メインページとそのすべての同期サブリソースをダウンロードし、さらにページをレンダリングするため要した時間を記録します。この後も、スクリプトなどの非同期リソースのダウンロードは継続します。この値は、`loadEventEnd` と `startTime` の 2 つのプロパティ間の差になります。  | **レベル 1:** entryData.loadEventEnd - entryData.navigationStart **レベル 2:** entryData.duration | 
|  **headerSize** |  Number  |  `transferSize` と `encodedBodySize` の間の差を返します。 この属性は必須ではありません。  | **レベル 1:** 利用不可 **レベル 2:** entryData.transferSize – entryData.encodedBodySize **レベル 2:** entryData.transferSize – entryData.encodedBodySize | 
|  **compressionRatio** |  Number  |  `encodedBodySize` と `decodedBodySize` の比率です。`encodedBodySize` の値は、HTTP ヘッダーを除くリソースの圧縮後のサイズです。`decodedBodySize` の値は、HTTP ヘッダーを除くリソースの解凍後のサイズです。 この属性は必須ではありません。  | **レベル 1:** 利用不可。 **レベル 2:**<pre>entryData.encodedBodySize > 0<br />  ? entryData.decodedBodySize / entryData.encodedBodySize<br />  : 0</pre>  | 
|  **navigationTimingLevel** |  Number  |  ナビゲーションタイミング API のバージョン。  | **値:** 1 または 2  | 

### リソースイベントスキーマ
<a name="CloudWatch-RUM-datacollected-ResourceEvent"></a>

リソースイベントは、アプリケーションモニターでパフォーマンステレメトリが有効化されている場合にのみ収集されます。

タイムスタンプのメトリクスは、型定義 [DOMHighResTimeStamp](https://www.w3.org/TR/hr-time-2/#sec-domhighrestimestamp) に基づきます。レベル 2 の API のデフォルトでは、すべてのタイミングは `startTime` に対して相対的です。レベル 1 API の場合には、タイムスタンプのメトリクスから `navigationStart` メトリクスが減算され、相対値が取得されます。タイムスタンプの値はすべてミリ秒単位で表示されます。

エージェントによって生成されたリソースイベントには、以下のプロパティが含まれます。


| 名前 | 型 | 説明 | 注意事項 | 
| --- | --- | --- | --- | 
|  **targetUrl** |  String  |  リソースの URL を返します。 |  **計算式:** [entryData.name](http://entrydata.name/) | 
|  **initiatorType** |  String  |  パフォーマンスリソースイベントを開始したリソースのタイプを表します。 |  **値:** 「resource」 **計算式:** entryData.initiatorType | 
|  **duration** |  String  |  `responseEnd` と `startTime` の 2 つのプロパティ間の差を返します。この属性は必須ではありません。  | **計算式:** entryData.duration | 
|  **transferSize** |  Number  |  レスポンスヘッダーフィールドとレスポンスペイロード本体を含む、フェッチされたリソースのサイズ (オクテット単位) を返します。この属性は必須ではありません。  | **計算式:** entryData.transferSize | 
|  **fileType** |  String  |  ターゲット URL パターンから派生した拡張。  |   | 

### 最大のコンテンツフルペイントイベントのスキーマ
<a name="CloudWatch-RUM-datacollected-LargestPaintEvent"></a>

最大のコンテンツペイントイベントには、以下のプロパティが含まれています。

これらのイベントは、アプリケーションモニターでパフォーマンステレメトリが有効化されている場合にのみ収集されます。


| 名前 | 説明 | 
| --- | --- | 
|  **値** |  詳細については、「[Web Vitals](https://web.dev/vitals/)」を参照してください。 | 

### 最初の入力遅延イベント
<a name="CloudWatch-RUM-datacollected-FirstInputDelayEvent"></a>

最初の入力遅延イベントには、以下のプロパティが含まれます。

これらのイベントは、アプリケーションモニターでパフォーマンステレメトリが有効化されている場合にのみ収集されます。


| 名前 | 説明 | 
| --- | --- | 
|  **値** |  詳細については、「[Web Vitals](https://web.dev/vitals/)」を参照してください。 | 

### 累積的レイアウトシフトイベント
<a name="CloudWatch-RUM-datacollected-CumulativeShift"></a>

累積的レイアウトシフトイベントには、以下のプロパティが含まれます。

これらのイベントは、アプリケーションモニターでパフォーマンステレメトリが有効化されている場合にのみ収集されます。


| 名前 | 説明 | 
| --- | --- | 
|  **値** |  詳細については、「[Web Vitals](https://web.dev/vitals/)」を参照してください。 | 

### HTTP イベント
<a name="CloudWatch-RUM-datacollected-HTTP"></a>

HTTP イベントには、以下のプロパティが含まれます。これには、`Response` フィールドまたは `Error` フィールドのいずれかが含まれますが、両方が含まれることはありません。

これらのイベントは、アプリケーションモニターで HTTP テレメトリが有効化されている場合にのみ収集されます。


| 名前 | 説明 | 
| --- | --- | 
|  **リクエスト** |  リクエストフィールドには以下が含まれます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **レスポンス** |  レスポンスには以下が含まれます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **[エラー]** |  このエラーフィールドには以下が含まれます。 [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/ja_jp/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 

### X-Ray トレースイベントのスキーマ
<a name="CloudWatch-RUM-datacollected-xraytraceEvent"></a>

これらのイベントは、アプリケーションモニターで X-Ray トレースが有効化されている場合にのみ収集されます。

X-Ray トレースイベントのスキーマの詳細については、「[AWS X-Ray セグメントのドキュメント](https://docs.aws.amazon.com/xray/latest/devguide/xray-api-segmentdocuments.html)」を参照してください。

# 単一ページアプリケーションのルート変更の時間計測
<a name="CloudWatch-RUM-route-change-timing"></a>

従来のマルチページアプリケーションでは、ユーザーが新しいコンテンツのロードを要求すると、ユーザーは実際にはサーバーから新しい HTML ページを要求することになります。その結果、CloudWatch RUM ウェブクライアントは、通常のパフォーマンス API メトリクスを使用してロード時間をキャプチャします。

しかし、単一ページのウェブアプリケーションでは、JavaScript と Ajax を使用して、サーバーから新しいページをロードせずにインターフェイスが更新されます。単一ページの更新は、ブラウザの時間計測 API では記録されず、ルート変更の時間計測を使用します。

CloudWatch RUM は、サーバーからの全ページロードと単一ページ更新の両方のモニターリングをサポートしていますが、次の違いがあります。
+ ルート変更の時間計測については、`tlsTime`、`timeToFirstByte` などのようなブラウザ提供のメトリクスはありません。
+ ルート変更の時間計測については、`initiatorType` フィールドは `route_change` になります。

CloudWatch RUM ウェブクライアントは、ルートの変更につながる可能性のあるユーザーインタラクションをリッスンし、そのようなユーザーインタラクションが記録されると、ウェブクライアントはタイムスタンプを記録します。次の両方に該当すると、ルート変更の時間計測が開始されます。
+ ブラウザ履歴 API (ブラウザの [進む] ボタンと [戻る] ボタンを除く) を使用してルート変更を実行した。
+ ルート変更検出時刻と最新のユーザーインタラクションタイムスタンプの差が 1000 ms 未満。これにより、データスキューが回避されます。

その後、ルート変更の時間計測が始まると、進行中の AJAX リクエストと DOM ミューテーションがない場合、その時間計測は完了します。このとき、最後に完了したアクティビティのタイムスタンプが完了タイムスタンプとして使用されます。

進行中の AJAX リクエストまたは DOM ミューテーションが 10 秒 (デフォルト) を超えると、ルート変更の時間計測がタイムアウトします。この場合、CloudWatch RUM ウェブクライアントは、このルート変更の時間計測を記録しなくなります。

その結果、ルート変更イベントの期間は次のように計算されます。

```
(time of latest completed activity) - (latest user interaction timestamp)
```

# CloudWatch RUM を使用するアプリケーションを管理する
<a name="CloudWatch-RUM-manage"></a>

下記のセクションの各ステップを使用して、アプリケーションでの CloudWatch RUM の使用を管理します。

**Topics**
+ [既に生成してあるコードスニペットを見つけるにはどうすればよいですか?](CloudWatch-RUM-find-code-snippet.md)
+ [CloudWatch RUM アプリケーションモニター設定の編集](CloudWatch-RUM-edit-application.md)
+ [CloudWatch RUM の使用を停止するかアプリケーションモニタを削除する](CloudWatch-RUM-delete-appmonitor.md)

# 既に生成してあるコードスニペットを見つけるにはどうすればよいですか?
<a name="CloudWatch-RUM-find-code-snippet"></a>

既にアプリケーション用に生成してある CloudWatch RUM コードスニペットを検索するには、以下のステップを実行します。

**既に生成したコードスニペットを検索するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. **[設定]** タブ、**[コードスニペット]** セクションに移動します。

1. 各計測の **[コピー/ダウンロード]** を選択します。

# CloudWatch RUM アプリケーションモニター設定の編集
<a name="CloudWatch-RUM-edit-application"></a>

アプリケーションモニターの設定を変更するには、以下のステップに従います。アプリケーションモニターでは、名前以外の任意の設定の変更が可能です。

**アプリケーションでの CloudWatch RUM の使用方法を編集するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. アプリケーションの名前の横にあるボタンをクリックした後、 **[Actions]** (アクション)、**[Edit]** (編集) の順にクリックします。

1. アプリケーション名以外の設定を変更します。この設定の詳細については、「[ウェブアプリケーションの CloudWatch RUM アプリケーションモニターの作成](CloudWatch-RUM-get-started-create-app-monitor.md)」を参照してください。

1. 完了したら、**[保存]** を選択します。

   設定を変更することで、コードスニペットも変更されます。この場合は、更新されたコードスニペットをアプリケーション内に挿入しなおす必要があります。

1. コードスニペットが作成されたら、**[クリップボードにコピー]** または **[ダウンロード]** を選択してから、**[完了]** を選択します。

   新しい設定でモニターリングを開始するには、新しいコードスニペットをアプリケーションに挿入します。

# CloudWatch RUM の使用を停止するかアプリケーションモニタを削除する
<a name="CloudWatch-RUM-delete-appmonitor"></a>

アプリケーションでの CloudWatch RUM の使用を停止するには、アプリケーションのコードから、RAM が生成したコードスニペットを削除します。

RUM のアプリケーションモニターを削除するには、以下のステップに従います。

**アプリケーションモニターを削除するには**

1. CloudWatch コンソールの [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) を開いてください。

1. ナビゲーションペインで、**[Application Signals]**、**[RUM]** の順に選択します。

1. アプリケーションの名前の横にあるボタンをクリックし、**[Actions]** (アクション)、**[Delete]** (削除) の順にクリックします。

1. 確認ボックスに **Delete** を入力し、**[Delete]** (削除) をクリックします。

1. まだ残されているのであれば、アプリケーションのコードから CloudWatch RUM コードスニペットを削除します。

# CloudWatch RUM のトラブルシューティング
<a name="CloudWatch-RUM-troubleshooting"></a>

このセクションでは、CloudWatch RUM でのトラブルシューティングに役立つヒントを示します。

## 実行しているアプリケーションに関するデータが見つからない
<a name="CloudWatch-RUM-troubleshooting-nodata"></a>

まず、コードスニペットがアプリケーションに正しく挿入されていることを確認します。詳細については、「[CloudWatch アプリケーションモニタのコードスニペットをアプリケーションに挿入する](CloudWatch-RUM-get-started-insert-code-snippet.md)」を参照してください。

それが原因ではない場合は、アプリケーションへのトラフィックがまだ発生していないことが考えられます。ユーザーと同じ方法でアプリケーションにアクセスし、トラフィックを生成して確認ます。

## アプリケーションのデータの記録が停止する
<a name="CloudWatch-RUM-troubleshooting-nonewdata"></a>

アプリケーションが更新され、CloudWatch RUM のコードスニペットが含まれなくなった可能性があります。アプリケーションコードを確認します。

他には、誰かがコードスニペットを更新した後に、更新されたスニペットをアプリケーションに挿入しなかった可能性もあります。[既に生成してあるコードスニペットを見つけるにはどうすればよいですか?](CloudWatch-RUM-find-code-snippet.md) にある指示に従って、現時点の正しいコードスニペットを見つけます。その上で、アプリケーションに貼り付けられているコードスニペットと比較します。