

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

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

使用 CloudWatch RUM，您可以執行實際使用者監控，從實際使用者工作階段近乎即時地收集和檢視 Web 和行動應用程式效能的用戶端資料。對於 Web 應用程式，您可以分析頁面載入時間、用戶端錯誤和使用者行為。對於行動應用程式，您可以監控螢幕載入時間、應用程式啟動時間、網路錯誤、當機，以及 Android Application Not Responding (ANR) 和 iOS App Hangs 等平台特定問題。當您檢視此資料時，您可以看到所有彙總在一起，也可以查看依裝置類型、作業系統和應用程式用量的其他特性分類。

您可以使用收集到的資料對用戶端效能問題進行快速識別和偵錯。CloudWatch RUM 可協助您將應用程式效能中的異常狀況視覺化，並尋找相關的偵錯資料，例如錯誤訊息、堆疊追蹤和使用者工作階段。您也可以使用 RUM 來了解最終使用者影響的範圍，包括使用者數量、地理位置和使用的瀏覽器/裝置。

您為 CloudWatch RUM 收集的最終使用者資料會保留 30 天，然後自動刪除。如果您想要將 RUM 遙測資料保留更長的時間，您可以選擇讓應用程式監視器將遙測的副本傳送到您帳戶中的 CloudWatch Logs。然後，您可以調整該日誌群組的保留期間。

若要使用 RUM，您可以建立*應用程式監控*並提供一些資訊。RUM 會產生程式碼片段，可用來將相依性插入新增至您的應用程式。程式碼片段會視需要提取 RUM 用戶端程式碼。RUM 用戶端會從應用程式使用者工作階段的百分比擷取資料，這會顯示在預先建置的儀表板中。您可以指定要收集資料的使用者工作階段百分比。

 CloudWatch RUM 與 [Application Signals](CloudWatch-Application-Monitoring-Sections.md) 整合，可探索並監控您的應用程式服務、用戶端、Synthetics Canaries 和服務相依性。使用 Application Signals 查看服務清單或視覺化地圖，根據您的服務等級目標 (SLO) 檢視運作狀態指標，並深入了解相關的 X-Ray 追蹤以取得更詳細的疑難排解。若要在 Application Signals 中查看 RUM 用戶端頁面請求，請在[建立應用程式監視器](CloudWatch-RUM-get-started-create-app-monitor.md)時開啟 X-Ray 主動追蹤。對於 Web 應用程式，您也可以[手動設定 RUM Web 用戶端](CloudWatch-RUM-configure-client.md)來啟用此功能。您的 RUM 用戶端會顯示在與您的服務相連的[應用程式地圖](ServiceMap.md)以及它們呼叫之服務的[服務詳細資訊](ServiceDetail.md)頁面中。

RUM 用戶端是開放原始碼。如需詳細資訊，請參閱 [CloudWatch RUM Web 用戶端](https://github.com/aws-observability/aws-rum-web)、[AWS Ditro 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 （美國西部）
+ 亞太地區 (孟買)
+ 亞太地區 (海德拉巴)
+ 亞太地區 (墨爾本)
+ 亞太地區 (大阪)
+ 亞太區域 (首爾)
+ 亞太區域 (新加坡)
+ 亞太地區 (悉尼)
+ 亞太地區 (雅加達)
+ 亞太地區 (馬來西亞)
+ 亞太區域 (泰國)
+ 亞太地區 (東京)
+ 亞太地區 (香港)
+ 加拿大 (中部)
+ 歐洲 (法蘭克福)
+ 歐洲 (愛爾蘭)
+ 歐洲 (倫敦)
+ 歐洲 (米蘭)
+ Europe (Paris)
+ 歐洲 (西班牙)
+ 歐洲 (斯德哥爾摩)
+ 歐洲 (蘇黎世)
+ AWS 歐洲主權雲端 （德國）
+ Middle East (Bahrain)
+ 中東 (阿拉伯聯合大公國)
+ 墨西哥 (中部)
+ 南美洲 (聖保羅)
+ 以色列 (特拉維夫)
+ 加拿大西部 (卡加利)

# 設定行動應用程式以使用 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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

1. 選擇 **Add app monitor** (新增應用程式監控)。

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. 若要新增另一個標籤，請再次選擇 **Add new tag** (新增標籤)。

   如需詳細資訊，請參閱[《標記 AWS 和標籤編輯器使用者指南》中的標記資源](https://docs.aws.amazon.com/tagging/latest/userguide/tagging-resources.html)。 *AWS *

1. 選擇 **Add app monitor** (新增應用程式監控)。

1. 在**範例程式碼**區段中，您可以複製要新增至應用程式的程式碼片段。使用 AWS Distro for OpenTelemetry (ADOT) SDK，您可以選擇**手動檢測**以設定應用程式程式碼中的監控，或選擇**零代碼檢測**，這需要最少的組態變更。

   對於 Android 和 iOS 應用程式，零代碼檢測是最簡單的選項，因為它會使用組態檔案自動初始化遙測集合。手動檢測可讓您進一步控制初始化和組態程序。

1. 選擇 **Copy** (複製) 或 **Download** (下載)，然後選擇 **Done** (完成)。

### 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 監控。開發套件支援 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 監控。開發套件提供自動檢測，並支援已簽章和未簽章的身分驗證模型。

## 身分驗證和安全性
<a name="CloudWatch-RUM-authentication"></a>

Mobile RUM 支援其 SDKs中定義的彈性身分驗證模型。
+ iOS 應用程式使用 [AWS Distro for OpenTelemetry (ADOT) iOS 開發套件](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，您必須以具有 **AmazonCloudWatchRUMFullAccess** IAM 政策的 IAM 使用者或角色登入。此外，您可能需要其他政策或許可：
+ 若要建立可以建立新 Amazon Cognito 身分集區以供授權使用的應用程式監控，您必須擁有**管理員** IAM 角色或 **AdministratorAccess** IAM 政策。
+ 若要建立將資料傳送至 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 角色或政策將需要特定 AWS KMS 許可，以允許建立金鑰、更新金鑰政策、搭配 Amazon S3 使用 AWS KMS 金鑰，以及設定 Amazon S3 儲存貯體的加密組態。為了安全起見，請將這些許可的範圍限定在特定用途。以下範例限制存取特定區域和 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** 政策。

# 設定 Web 應用程式以使用 CloudWatch RUM
<a name="CloudWatch-RUM-get-started"></a>

使用這些區段中的步驟來設定 Web 應用程式，以開始使用 CloudWatch RUM 從實際使用者工作階段收集效能資料。

**Topics**
+ [授權您的 Web 應用程式將資料傳送至 AWS](CloudWatch-RUM-get-started-authorization.md)
+ [為 Web 應用程式建立 CloudWatch RUM 應用程式監視器](CloudWatch-RUM-get-started-create-app-monitor.md)
+ [修改程式碼片段以設定 CloudWatch RUM Web 用戶端 (選用)](CloudWatch-RUM-modify-snippet.md)
+ [將 CloudWatch 應用程式監視器程式碼片段插入您的應用程式](CloudWatch-RUM-get-started-insert-code-snippet.md)
+ [透過產生使用者事件測試 CloudWatch 應用程式監視器設定](CloudWatch-RUM-get-started-generate-data.md)

# 授權您的 Web 應用程式將資料傳送至 AWS
<a name="CloudWatch-RUM-get-started-authorization"></a>

有四個設定資料身分驗證的選項：
+ 使用 Amazon Cognito，讓 CloudWatch RUM 為應用程式建立新的 Amazon Cognito 身分池。這個方法需要最少的設定工作。

  身分集區將包含未進行身分驗證的身分。這可讓 CloudWatch RUM Web 用戶端將資料傳送至 CloudWatch RUM，而無需對應用程式的使用者進行身分驗證。

  Amazon Cognito 身分集區具有連接的 IAM 角色。Amazon Cognito 未進行身分驗證的身分可讓 Web 用戶端擔任授權將資料傳送到 CloudWatch RUM 的 IAM 角色。
+ 使用 Amazon Cognito 進行身分驗證。如果您使用此功能，則可以使用現有的 Amazon Cognito 身分池，或建立新的身分集區以搭配此應用程式監視器使用。如果您使用現有的身分池，還必須修改連結至身分集區的 IAM 角色。針對支援未驗證使用者的身分池使用此選項。您只能從相同的區域使用身分池。
+ 使用您已經設定的現有身分提供者所提供的身分驗證。在此情況下，您必須從身分提供者取得憑證，且您的應用程式必須將這些憑證轉寄至 RUM Web 用戶端。

  對於僅支援已驗證使用者的身分池，請使用此選項。
+ 使用資源型政策來管理應用程式監視器的存取權。這包括在沒有 AWS 憑證的情況下，將未經驗證的請求傳送至 CloudWatch RUM 的功能。如需了解資源型政策和 RUM 的詳細資訊，請參閱 [搭配資源型政策使用 CloudWatch RUM](CloudWatch-RUM-resource-policies.md)。

以下章節更會詳細探討這些選項。

## 使用現有 Amazon Cognito 身分集區
<a name="CloudWatch-RUM-get-started-authorization-existingcognito"></a>

如果您選擇使用 Amazon Cognito 身分池，則請在將應用程式新增至 CloudWatch RUM 時指定身分集區。集區必須支援啟用對未經身分驗證之身分的存取權。您只能從相同的區域使用身分池。

您也必須將下列許可新增到連接至與此身分集區相關聯之 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>

如果您選擇使用第三方供應商的私有身分驗證，則必須從身分提供者取得憑證，並將其轉寄至 AWS。最好的方法是使用*安全字符廠商*。您可以使用任何安全字符廠商，包括 Amazon Cognito AWS Security Token Service。如需 的詳細資訊 AWS STS，請參閱[歡迎使用 AWS Security Token Service API 參考](https://docs.aws.amazon.com/STS/latest/APIReference/welcome.html)。

如果您想要在此案例中使用 Amazon Cognito 作為字符廠商，則可以將 Amazon Cognito 設定為與身分驗證供應商一起使用。如需詳細資訊，請參閱 [Amazon Cognito 身分集區 (聯合身分) 入門](https://docs.aws.amazon.com/cognito/latest/developerguide/getting-started-with-identity-pools.html)。

將 Amazon Cognito 設定為與身分提供者一起使用後，您還需要執行下列動作：
+ 建立具備下列許可的 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 中登入資料提供者的詳細資訊，請參閱適用於 JavaScript 的 v3 開發人員指南中的在 [Web 瀏覽器中設定登入](https://docs.aws.amazon.com/sdk-for-javascript/v3/developer-guide/setting-credentials-browser.html)資料、適用於 JavaScript 的 SDK 的 v2 開發人員指南中的在 [Web 瀏覽器中設定登入資料](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 Web 用戶端的 SDK 來設定 Web 用戶端身分驗證方法。如需有關 Web 用戶端 SDK 的詳細資訊，請參閱 [CloudWatch RUM Web 用戶端 SDK](https://github.com/aws-observability/aws-rum-web)。

# 為 Web 應用程式建立 CloudWatch RUM 應用程式監視器
<a name="CloudWatch-RUM-get-started-create-app-monitor"></a>

若要開始搭配應用程式使用 CloudWatch RUM，您可以建立*應用程式監控*。建立應用程式監視器時，RUM 會產生程式碼片段，供您貼入應用程式。程式碼片段會提取 RUM 用戶端程式碼。RUM 用戶端會從應用程式的使用者工作階段擷取資料，並將其傳送至 RUM。

## 為 Web 平台建立應用程式監控
<a name="web-platform-app-monitor"></a>

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

1. 選擇 **Add app monitor** (新增應用程式監控)。

1. 對於 **App monitor name** (應用程式監控名稱)，輸入用於在 CloudWatch RUM 主控台內識別此應用程式監控的名稱。

1. 選取 **Web** 做為平台。

1. 對於**應用程式網域**，輸入您應用程式擁有管理授權的註冊網域名稱。也可以使用萬用字元 `*` 來允許任何子網域或頂層網域 (例如 \$1.amazon.com、amazon.\$1、\$1.amazon.\$1)。

1. 對於 **Configure RUM data collection** (設定 RUM 資料收集)，指定是否要應用程式監控來收集下列各項：
   + **Performance telemetry** (效能遙測) – 收集頁面載入和資源載入時間的相關資訊
   + **JavaScript errors** (JavaScript 錯誤) – 收集您應用程式所引發之未處理 JavaScript 錯誤的相關資訊

     您可以選取**取消壓縮 JavaScript 錯誤堆疊追蹤**，以偵錯未壓縮的 JavaScript 錯誤。若要使用此功能，請將來源映射檔案上傳至 Amazon S3 儲存貯體或資料夾，並提供 Amazon S3 URI。啟用後，RUM 將使用這些來源映射，並透過新增未壓縮堆疊追蹤來豐富 JavaScript 錯誤事件。請注意，啟用後，此功能只會處理新的 JavaScript 錯誤事件，無法用於先前收集的資料。如需詳細資訊，請參閱[啟用 JavaScript 錯誤堆疊追蹤的反壓縮功能](CloudWatch-RUM-JavaScriptStackTraceSourceMaps.md)。
   + **HTTP errors** (HTTP 錯誤) – 收集應用程式所擲回之 HTTP 錯誤的相關資訊

   選取這些選項可提供有關應用程式的更多資訊，但也會產生更多 CloudWatch RUM 事件，並因此會產生更多費用。

   如果您沒有選取任何這些項目，則應用程式監控仍會收集工作階段啟動事件和頁面 ID，以便查看有多少使用者正在使用您的應用程式，包括依作業系統類型和版本、瀏覽器類型和版本、裝置類型和位置劃分的明細內容。

1. 如果您希望能夠從取樣的使用者工作階段中收集使用者 ID 和工作階段 ID，則選擇 **Check this option to allow the CloudWatch RUM Web Client to set cookies** (核取此選項以允許 CloudWatch RUM Web 用戶端設定 Cookie)。使用者 ID 是由 RUM 隨機產生。如需詳細資訊，請參閱[CloudWatch RUM Web 用戶端 Cookie (或類似技術)](CloudWatch-RUM-privacy.md#CloudWatch-RUM-cookies)。

1. 對於 **Session samples** (工作階段範例)，輸入會用於收集 RUM 資料的使用者工作階段百分比。預設為 100%。減少此數量會讓您減少資料，但也會降低費用。如需有關 RUM 定價的詳細資訊，請參閱 [RUM 定價](CloudWatch-RUM.md#RUMpricing)。

1. 您為 CloudWatch RUM 收集的最終使用者資料會保留 30 天，然後刪除。如果您想要在 CloudWatch Logs 中保留 RUM 事件的複本，並設定保留這些複本的時間，則請選擇 **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 身分池，還是使用不同的身分提供者。建立新的身分集區是不需要其他設定步驟的最簡單選項。如需詳細資訊，請參閱[授權您的 Web 應用程式將資料傳送至 AWS](CloudWatch-RUM-get-started-authorization.md)。

   建立新的 Amazon Cognito 身分集區需要管理許可。如需詳細資訊，請參閱[使用 CloudWatch RUM 的 IAM 政策](CloudWatch-RUM-permissions.md)。

1. (選用) 根據預設，當您將 RUM 程式碼片段新增至應用程式時，Web 用戶端會將 JavaScript 標籤插入以監控應用程式所有頁面之 HTML 程式碼中的使用情況。若要變更此選項，請選擇 **Configure pages** (設定頁面)，然後選擇 **Include only these pages** (僅包含這些頁面) 或 **Exclude these pages** (排除這些頁面)。然後，指定要包含或排除的頁面。若要指定要包含或排除的頁面，請輸入其完整 URL。若要指定其他頁面，請選擇 **Add URL** (新增網址)。

1. 若要啟用應用程式監視器取樣之使用者工作階段的 AWS X-Ray 追蹤，請選擇**主動追蹤**，然後選取**使用 追蹤我的服務 AWS X-Ray。**

   如果您選取此選項，則會追蹤由應用程式監控取樣的使用者工作階段期間所發出的 `XMLHttpRequest` 和 `fetch` 請求。然後，您可以在 RUM 儀表板、X-Ray 追蹤地圖以及追蹤詳細資訊頁面中查看這些使用者工作階段的追蹤和區段。在為應用程式啟用它之後，這些使用者工作階段也會在 [Application Signals](CloudWatch-Application-Monitoring-Sections.md) 中顯示為用戶端頁面。

   透過對 CloudWatch RUM Web 用戶端進行其他組態變更，您可以將 X-Ray 追蹤標頭新增至 HTTP 請求，以啟用end-to-end追蹤。 AWS 如需詳細資訊，請參閱[啟用 X-Ray 端對端追蹤](CloudWatch-RUM-modify-snippet.md#CloudWatch-RUM-xraytraceheader)。

1. (選用) 若要新增標籤至應用程式監控，請選擇 **Tags** (標籤)、**Add new tag** (新增標籤)。

   之後，在 **Key** (索引鍵) 中，輸入標籤的名稱。您可以在 **Value (值)** 中為標籤新增選用值。

   若要新增另一個標籤，請再次選擇 **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 Web 用戶端，作為 JavaScript 模組。

   或者，您可以選擇 **HTML** 以使用內容交付網路 (CDN) 安裝 CloudWatch RUM Web 用戶端。使用 CDN 的缺點是 Web 用戶端通常會遭廣告封鎖程式封鎖。

1. 選擇 **Copy** (複製) 或 **Download** (下載)，然後選擇 **Done** (完成)。

# 修改程式碼片段以設定 CloudWatch RUM Web 用戶端 (選用)
<a name="CloudWatch-RUM-modify-snippet"></a>

您可以在將程式碼片段插入應用程式之前修改程式碼片段，以啟用或停用數個選項。如需詳細資訊，請參閱 [CloudWatch RUM Web 用戶端文件](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)。

有四個您應該務必注意到的組態選項，如這些章節所述。

## 防止收集可能包含個人資訊的資源 URL
<a name="CloudWatch-RUM-resourceURL"></a>

根據預設，CloudWatch RUM Web 用戶端會設定為記錄應用程式所下載的資源 URL。這些資源包括 HTML 檔案、映像、CSS 檔案、JavaScript 檔案等。對於某些應用程式，URL 可能包含個人身分識別資訊 (PII)。

如果您的應用程式發生這種情況，強烈建議您透過在程式碼片段組態中設定 `recordResourceUrl: false` 來停用資源 URL 收集，之後再將其插入到您的應用程式中。

## 手動記錄頁面檢視
<a name="CloudWatch-RUM-pageload"></a>

預設情況下，Web 用戶端會記錄頁面第一次載入時，以及呼叫瀏覽器歷史記錄 API 時的頁面檢視次數。預設頁面 ID 為 `window.location.pathname`。但在某些情況下，您可以覆寫此行為並檢測應用程式，進而以程式設計方式記錄頁面檢視。這樣做可讓您控制頁面 ID 以及其記錄時間。舉例來說，假設 Web 應用程式的 URI 具有變數識別符，例如 `/entity/123` 或 `/entity/456`。依預設，CloudWatch RUM 會為每個 URI 產生頁面檢視事件，其中包含與路徑名稱相符的不同頁面 ID，但您可以依相同的頁面 ID 將其進行分組。若要完成此操作，請使用 `disableAutoPageView` 組態停用 Web 客戶端的頁面檢視自動化，然後使用 `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>

當您建立應用程式監控時，選取 **Trace my service with AWS X-Ray** (使用 追蹤我的服務) 會啟用對應用程式監控取樣之使用者工作階段期間所提出 `XMLHttpRequest` 和 `fetch` 請求的追蹤。然後，您可以在 CloudWatch RUM 儀表板、X-Ray 追蹤地圖以及追蹤詳細資訊頁面中查看這些 HTTP 請求的追蹤。

根據預設，這些用戶端追蹤不會連線到下游伺服器端追蹤。若要將用戶端追蹤連線至伺服器端追蹤並啟用端對端追蹤，請在 Web 用戶端中將 `addXRayTraceIdHeader` 選項設定為 `true`。這會導致 CloudWatch RUM Web 用戶端將 X-Ray 追蹤標頭新增至 HTTP 請求。

下列程式碼區塊會顯示新增用戶端追蹤的範例。為了便於閱讀，此範例會省略某些組態選項。

```
<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>
```

**警告**  
將 CloudWatch RUM Web 用戶端設定為將 X-Ray 追蹤標頭新增至 HTTP 請求，可能會導致跨來源資源共用 (CORS) 失敗或導致使用 SigV4 簽署的請求簽章無效。如需詳細資訊，請參閱 [CloudWatch RUM Web 用戶端文件](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md)。強烈建議您在生產環境中新增用戶端 X-Ray 追蹤標頭之前，先測試您的應用程式。

如需詳細資訊，請參閱 [CloudWatch RUM Web 用戶端文件](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md#http)

## 將未簽署的請求傳送至 CloudWatch RUM
<a name="CloudWatch-RUM-unsigned"></a>

根據預設，RUM Web 用戶端會簽署傳送至 RUM 的所有請求。如果您在用戶端組態中設定 `signing:false`，請求會在傳送至 CloudWatch RUM 時取消簽署。只有在應用程式監視器上連結以公有資源為基礎的政策時，資料才會擷取至 RUM。如需詳細資訊，請參閱[搭配資源型政策使用 CloudWatch RUM](CloudWatch-RUM-resource-policies.md)。

# 將 CloudWatch 應用程式監視器程式碼片段插入您的應用程式
<a name="CloudWatch-RUM-get-started-insert-code-snippet"></a>

接下來，您會將上一節所建立的程式碼片段插入您的應用程式。

**警告**  
由程式碼片段下載和設定的 Web 用戶端會使用 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. 如果您的應用程式是多頁面 Web 應用程式，則您必須針對要包含在資料收集中的每個 HTML 頁面重複步驟 1。

# 透過產生使用者事件測試 CloudWatch 應用程式監視器設定
<a name="CloudWatch-RUM-get-started-generate-data"></a>

插入程式碼片段且已更新的應用程式正在執行之後，您可以手動產生使用者事件來對其進行測試。為了對此進行測試，建議您進行下列動作。這項測試會產生標準 CloudWatch RUM 費用。
+ 在 Web 應用程式中的頁面之間導航。
+ 使用不同的瀏覽器和裝置建立多個使用者工作階段。
+ 提出請求。
+ 導致 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)。

如需如何評估資源政策和身分政策的詳細資訊，請參閱[政策評估邏輯](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`服務內容金鑰來控制接受的請求。

對於 Web 應用程式監控，您必須將 Web 用戶端設定為`Alias`使用 1.20 版或更新版本的 CloudWatch RUM Web 用戶端傳送，如 GitHub [ 上的應用程式特定組態](https://github.com/aws-observability/aws-rum-web/blob/main/docs/configuration.md)中所述。

對於行動應用程式監視器，您必須根據 SDK 設定檢測。
+ iOS 應用程式使用 [AWS Distro for OpenTelemetry (ADOT) iOS 開發套件](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 Web 用戶端
<a name="CloudWatch-RUM-configure-client"></a>

您的應用程式可以使用 CloudWatch RUM 產生的其中一個程式碼片段，安裝 CloudWatch RUM Web 用戶端。產生的程式碼片段支援兩種安裝方法：透過 NPM 作為 JavaScript 模組進行安裝，或者從內容交付網路 (CDN) 安裝。為獲得最佳效能，我們建議您使用 NPM 安裝方法。如需有關使用此方法的詳細資訊，請參閱[作為 JavaScript 模組進行安裝](https://github.com/aws-observability/aws-rum-web/blob/main/docs/npm_installation.md)。

如果您使用 CDN 安裝選項，廣告封鎖程式可能會封鎖 CloudWatch RUM 提供的預設 CDN。這將停用對已安裝廣告封鎖程式的使用者的應用程式監控。因此，我們建議您僅在最初使用 CloudWatch RUM 入門時使用預設 CDN。如需有關此問題緩解方法的詳細資訊，請參閱[檢測應用程式](https://github.com/aws-observability/aws-rum-web/blob/main/docs/cdn_installation.md#instrument-the-application)。

程式碼片段位於 HTML 檔案的 `<head>` 標籤，並透過下載 Web 用戶端，然後為其監控的應用程式設定 Web 用戶端，來安裝 Web 用戶端。程式碼片段是自行執行的函數，看起來類似下列內容。在此範例中，為了易於閱讀，已省略程式碼片段函數的主體。

```
<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>

程式碼片段接受六個引數：
+ 用於在 Web 用戶端上執行命令的命名空間，例如 `'cwr'`
+ 應用程式監控的 ID，例如 `'00000000-0000-0000-0000-000000000000'`
+ 應用程式版本，例如 `'1.0.0'`
+ 應用程式監視器 AWS 的區域，例如 `'us-west-2'`
+ Web 用戶端的 URL，例如 `'https://client.rum.us-east-1.amazonaws.com/1.0.2/cwr.js'`
+ 應用程式特定的組態選項。如需詳細資訊，請參閱下一節。

## 忽略錯誤
<a name="CloudWatch-RUM-configure-ignore-errors"></a>

CloudWatch RUM Web 用戶端會偵聽應用程式中發生的所有類型錯誤。如果應用程式發出您不想在 CloudWatch RUM 儀表板中檢視的 JavaScript 錯誤，您可以設定 CloudWatch RUM Web 用戶端來篩選掉這些錯誤，讓您在 CloudWatch RUM 儀表板上僅查看相關的錯誤事件。例如，您可能會選擇不檢視儀表板中的某些 JavaScript 錯誤，因為您已經找出修正方法，而且這些錯誤的數量正在掩蓋其他錯誤。您可能還想忽略無法修正的錯誤，因為這些錯誤是由第三方擁有的程式庫所擁有。

如需有關如何檢測 Web 用戶端以篩選掉特定 JavaScript 錯誤的詳細資訊，請參閱 Web 用戶端 Github 文件中的[錯誤](https://github.com/aws-observability/aws-rum-web/blob/main/docs/configuration.md#errors)中的範例。

## 組態選項
<a name="CloudWatch-RUM-configure-options"></a>

如需 CloudWatch RUM Web 用戶端可用組態選項的相關資訊，請參閱 [CloudWatch RUM Web 用戶端文件](https://github.com/aws-observability/aws-rum-web/blob/main/docs/configuration.md)

# 啟用 JavaScript 錯誤堆疊追蹤的反壓縮功能
<a name="CloudWatch-RUM-JavaScriptStackTraceSourceMaps"></a>

當您的 Web 應用程式 JavaScript 原始程式碼被壓縮時，錯誤堆疊追蹤可能難以讀取。您可以透過將來源映射上傳至 Amazon S3，來啟用堆疊追蹤的反壓縮功能。CloudWatch RUM 將擷取來源映射，以將壓縮的來源程式碼中的行號和欄號映射回原始未被壓縮的來源程式碼。這將提高錯誤堆疊追蹤的可讀性，並有助於識別原始來源程式碼中錯誤的位置。

## 要求與語法
<a name="CloudWatch-RUM-RequirementsJavaScriptStackTraceSourceMaps"></a>

來源映射對於跨不同版本偵錯和追蹤 Web 應用程式的問題至關重要。請確定每個 Web 應用程式版本都有唯一的來源映射。每個版本都應有自己的唯一 releaseId。releaseId 必須是長度介於 1 到 200 個字元之間的字串，而且只能包含字母、數字、底線、連字號、冒號、斜線和句點。若要將 `releaseId` 作為中繼資料新增至 RUM 事件，請設定 CloudWatch RUM Web 用戶端。

根據[來源映射 V3 規格](https://sourcemaps.info/spec.html)所定義的結構，來源映射應該是純 JSON 檔案。必要欄位包括：`version`、`file`、`sources`、`names` 和 `mappings`。

請確定每個來源映射的大小不超過 50 MB 的限制。此外，RUM 服務只會擷取每個堆疊追蹤最多 50 MB 的來源映射。如有需要，請將原始程式碼分割成多個較小的區塊。如需詳細資訊，請參閱[使用 WebpackJS 分解程式碼](https://webpack.js.org/guides/code-splitting/)。

**Topics**
+ [要求與語法](#CloudWatch-RUM-RequirementsJavaScriptStackTraceSourceMaps)
+ [設定 Amazon S3 儲存貯體資源政策以允許 RUM 服務存取](#CloudWatch-RUM-ConfigureS3)
+ [上傳來源映射](#CloudWatch-RUM-UploadSourceMaps)
+ [在 CloudWatch RUM Web 用戶端中設定 releaseId](#CloudWatch-RUM-ConfigureRumID)
+ [啟用 CloudWatch RUM 應用程式監視器以反壓縮 JavaScript 堆疊追蹤](#CloudWatch-RUM-unminifyjavascript)
+ [在 RUM 主控台中檢視未壓縮的堆疊追蹤](#CloudWatch-RUM-viewunminifiedstacktraces)
+ [在 CloudWatch Logs 中檢視未壓縮的堆疊追蹤](#CloudWatch-RUM-viewunminifiedstacktracesCWL)
+ [對來源映射進行疑難排解](#CloudWatch-RUM-troubleshootsourcemaps)

## 設定 Amazon S3 儲存貯體資源政策以允許 RUM 服務存取
<a name="CloudWatch-RUM-ConfigureS3"></a>

請確定您的 Amazon S3 儲存貯體與 RUM appMonitor 位於相同的區域。設定 Amazon S3 儲存貯體以允許 RUM 服務存取，從而擷取來源映射檔案。包含 `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 套件，以在壓縮期間產生來源映射。當您建置應用程式時，套件會建立目錄 (例如 dist)，其中包含已壓縮的 JavaScript 檔案及其對應的來源映射。如需範例，請參閱下列內容。

```
./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 Web 用戶端中設定 releaseId
<a name="CloudWatch-RUM-ConfigureRumID"></a>

CloudWatch RUM 使用設定的 `releaseId` 來判斷資料夾，以擷取來源映射檔案。將 `releaseId` 的名稱設定為與您的來源映射檔案資料夾相同。如果您使用上述或類似的 bash 指令碼，則指令碼中設定的 `releaseId` 應與 CloudWatch RUM Web 用戶端中設定的相同。若要新增自訂中繼資料，必須使用 1.21.0 或更高版本的 CloudWatch RUM Web 用戶端。

```
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 Web 用戶端中設定的 `releaseId` 來部署 Web 應用程式後，請選取 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 | 單位 | Description | 
| --- | --- | --- | 
|  UnminifyLineFailureCount  |  計數  |  JS 錯誤事件中無法取消壓縮的堆疊追蹤行計數。有關失敗的其他詳細資訊將新增到 event\$1details.unminifiedStack 欄位中失敗的特定行。  | 
|  UnminifyLineSuccessCount  |  計數  | JS 錯誤事件中已成功取消壓縮的堆疊追蹤行計數。 | 
| UnminifyEventFailureCount | 計數 | 未壓縮任何行的 JS 錯誤事件計數。有關失敗的其他詳細資訊將新增到 event\$1details.unminifiedStack 欄位。 | 
| UnminifyEventSuccessCount | 計數 | 至少有一個堆疊追蹤行取消壓縮成功的 JS 錯誤事件計數。 | 

CloudWatch RUM 可能會因各種原因而無法反壓縮堆疊追蹤中的一行，包括但不限於：
+ 由於許可問題，無法擷取對應的來源映射檔案。請確定儲存貯體資源政策已正確設定。
+ 對應的來源映射檔案不存在。請確定來源映射檔案已上傳至與 CloudWatch RUM Web 用戶端中設定的 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 區域，您有三個選項：
+ 在單一區域的單一帳戶中，部署一個應用程式監視器，並為所有區域提供服務。
+ 在多個唯一的帳戶中，為每個區域部署獨立的應用程式監視器。
+ 為每個區域部署獨立的應用程式監視器，且全部都在單一帳戶中。

使用單一應用程式監視器的好處是所有資料都會集中至單一視覺效果中，且所有記錄均會寫入 CloudWatch Logs 中的相同日誌群組。使用單一應用程式監視器時，請求會有少量的額外延遲，以及單一失敗點。

使用多個應用程式監視器可移除單一失敗點，但會導致所有資料無法合併為單一視覺效果。

### 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 Web 用戶端中的頁面檢視事件，以將頁面放入頁面群組。下列範例將 `/home` 頁面放入名為 `en` 的頁面群組和名為 `landing` 的頁面群組。

**內嵌指令碼範例**

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

**JavaScript 模組範例**

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

**注意**  
頁面群組旨在協助彙總不同頁面的分析。如需有關如何為應用程式定義和操作 `pageIds` 的資訊，請參閱「[修改程式碼片段以設定 CloudWatch RUM Web 用戶端 (選用)](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 Web 用戶端將自訂中繼資料新增至 CloudWatch RUM 事件。自訂中繼資料可以包含工作階段屬性和頁面屬性。

若要新增自訂中繼資料，您必須使用版本 1.10.0 或更新版本的 CloudWatch RUM Web 用戶端。

## 要求與語法
<a name="CloudWatch-RUM-custom-metadata-syntax"></a>

每個事件可以在中繼資料中包含多達 10 個自訂屬性。自訂屬性的語法要求如下：
+ **鍵**
  + 最多 128 個字元。
  + 可以包含英數字元、冒號 (:) 和底線 (\$1)。
  + 開頭不能是 `aws:`。
  + 不能完全由下一節中列出的任何保留關鍵字組成。可以將這些關鍵字用作鍵名稱的一部分。
+ **Values (數值)**
  + 最多 256 個字元。
  + 必須是字串、數字或布林值

**保留的關鍵字**

您不能使用下列保留關鍵字作為完整鍵名稱。您可以使用下列關鍵字作為鍵名稱的一部分，例如 `applicationVersion`。
+ `browserLanguage`
+ `browserName`
+ `browserVersion`
+ `countryCode`
+ `deviceType`
+ `domain`
+ `interaction`
+ `osName`
+ `osVersion`
+ `pageId`
+ `pageTags`
+ `pageTitle`
+ `pageUrl`
+ `parentPageId`
+ `platformType`
+ `referrerUrl`
+ `subdivisionCode`
+ `title`
+ `url`
+ `version`

**注意**  
如果屬性包含無效的鍵或值，或者已達到每個事件 10 個自訂屬性的限制，CloudWatch RUM 會從 RUM 事件中移除自訂屬性。

## 新增工作階段屬性
<a name="CloudWatch-RUM-session-attributes"></a>

如果您設定自訂工作階段屬性，屬性會新增至工作階段中的所有事件。您可以使用 `addSessionAttributes` 命令在 CloudWatch RUM Web 用戶端初始化期間或在執行階段期間來設定工作階段屬性。

例如，您可以將應用程式的版本新增為工作階段屬性。然後，在 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>

如果您設定自訂頁面屬性，這些屬性會新增至目前頁面上的所有事件。您可以使用 `recordPageView` 命令在 CloudWatch RUM Web 用戶端初始化期間或在執行階段期間設定頁面屬性。

例如，您可以新增頁面範本作為頁面屬性。然後，在 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 Web 用戶端所收集的資訊](CloudWatch-RUM-datacollected.md) 中列出的事件。如果您使用的是 CloudWatch RUM Web 用戶端 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>

自訂事件包含事件類型和事件詳細資料。具體要求如下：
+ **事件類型**
  + 這可以是事件的 **type** (類型) 或 **name** (名稱)。例如，CloudWatch RUM 內建的事件類型稱為 **JsError**，事件類型為 `com.amazon.rum.js_error_event`。
  + 長度必須介於 1 與 256 個字元之間。
  + 可以是英數字元、底線、連字號和句點的組合。
+ **事件詳細資訊**
  + 包含您要在 CloudWatch RUM 記錄的實際資料。
  + 必須是由欄位和值組成的物件。

## 記錄自訂事件的範例
<a name="CloudWatch-RUM-custom-event-examples"></a>

有兩種方法可以在 CloudWatch RUM Web 用戶端中記錄自訂事件。
+ 使用 CloudWatch RUM Web 用戶端的 `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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

RUM 主控台會顯示所有應用程式監控的清單檢視。**平台**欄指出每個應用程式監視器是否適用於 Web、Android 或 iOS 應用程式。選取應用程式監視器，以使用**效能**、**錯誤**、**工作階段**、**指標**和**組態**索引標籤存取詳細檢視。

## Web 應用程式儀表板
<a name="CloudWatch-RUM-web-dashboard"></a>

選取 Web 應用程式監視器時，您會看到下列索引標籤：
+ **效能**索引標籤會顯示頁面效能資訊，包括載入時間、請求資訊、Web 關鍵數值，以及一段時間內的頁面載入。此檢視具有互動式 Web 關鍵點圖形，您可以在其中檢視頁面中核心 Web 關鍵點的不同百分位數值，並在圖形上選擇資料點，以檢視 CloudWatch RUM 擷取的相關事件。您可以在此處探索更多與指標峰值相關的事件，或檢視所選事件的頁面詳細資訊，以識別導致效能問題的特定條件。

  在此索引標籤上，您也可以切換**頁面載入**、**請求**和**位置**之間的檢視，了解頁面效能的詳細資訊。
+ **錯誤**標籤會顯示 Javascript 錯誤資訊，包括使用者最常見的錯誤訊息，以及錯誤最多的裝置和瀏覽器。此檢視包含錯誤的長條圖和錯誤的清單檢視。您可以依使用者和事件詳細資訊，篩選錯誤清單。選擇錯誤訊息以查看更多詳細資訊。
+ **HTTP 請求**標籤會顯示 HTTP 請求資訊，包括錯誤最多的請求 URL，以及錯誤最多的裝置和瀏覽器。此標籤包含請求的長條圖、請求的清單檢視，以及網路錯誤的清單檢視。您可以依使用者和事件詳細資訊篩選清單。選擇回應代碼或錯誤訊息，分別查看請求或網路錯誤的詳細資訊。
+ **工作階段**標籤會顯示工作階段指標。此標籤包含工作階段開始事件的長條圖，以及工作階段的清單檢視。您可以依事件類型、使用者詳細資訊和事件詳細資訊，篩選工作階段清單。選擇 **sessionId**，查看工作階段的更多詳細資訊。
+ **事件**標籤會顯示 RUM 事件的長條圖，以及事件的清單檢視。您可以依事件類型、使用者詳細資訊和事件詳細資訊，篩選事件清單。選擇 RUM 事件以查看原始事件。
+ **Browsers & Devices** (瀏覽器和裝置) 索引標籤會顯示資訊，例如用來存取應用程式的不同瀏覽器和裝置的效能和使用情況。此檢視包含用來在聚焦於**瀏覽器**和**裝置**之間切換檢視的控制項。

  如果您將範圍縮小為單一瀏覽器，則會看到依瀏覽器版本劃分的資料。
+ **User Journey** (使用者旅程) 索引標籤會顯示客戶用來導覽應用程式的路徑。您可以看到客戶在何處進入您的應用程式，以及他們退出應用程式的頁面。您也可以查看他們選用的路徑，以及遵循這些路徑的客戶百分比。您可以在節點上暫停，以取得有關該頁面的更多詳細資訊。您可以選擇單一路徑來反白顯示連線，以便於檢視。
+  **指標**索引標籤會顯示應用程式監視器發佈的所有預設 CloudWatch 指標，包括效能 Web 關鍵指標、錯誤指標 (JavaScript 錯誤、HTTP 錯誤/故障）、磁碟區、使用者流程和 apdex 指標。如果您為應用程式建立延伸指標，標籤也會在延伸指標區段中包含這些指標的子集。此子集包含 PageViewCount、PerformanceNavigationDuration、Http4xxCount, Http5xxCount 和 JsErrorCount 類型的指標。儀表板顯示每種指標類型的三種指標變化。由於這些是 CloudWatch 指標，您也可以使用**新增至儀表板選項將此標籤匯出至您自己的儀表板**，並更新以包含更多指標。

(選用) 在前六個標籤中的任何一個上，您可以選擇**頁面**按鈕，然後從清單中選取頁面或頁面群組。這會將顯示的資料縮小至應用程式的單一頁面或頁面群組。您也可以將清單中的頁面和頁面群組標記為我的最愛。

## 行動應用程式儀表板
<a name="CloudWatch-RUM-mobile-dashboard"></a>

選取行動應用程式監視器時，您會看到下列索引標籤：
+ **效能**索引標籤可讓您深入了解行動應用程式的效能，包括螢幕載入時間、應用程式啟動時間 （冷和暖）、效能指標，以及一段時間內的 Apdex 分數。詳細檢視會依畫面名稱、作業系統版本、應用程式版本、裝置和國家/地區細分效能。按一下圖表中的畫面載入時間、應用程式啟動時間或位置資料點，將開啟右側的診斷面板，提供與資料點相關的進一步洞見，其中包含最新的相關工作階段和**工作階段**索引標籤的連結，以進行故障診斷。

  在此索引標籤上，您也可以在**畫面載入**、**應用程式啟動**和**位置**之間切換檢視，以查看應用程式效能的詳細資訊。

  標籤也具有應用程式效能索引 (Apdex) 分數，表示最終使用者的滿意度。分數範圍從 0 (最不滿意) 到 1 (最滿意)。分數僅根據應用程式效能而定。如需 Apdex 分數的詳細資訊，請參閱 [CloudWatch RUM 如何設定 Apdex 分數](#CloudWatch-RUM-apdex)。
+ **Errors** 索引標籤將應用程式問題分為三個類別：Network Errors、Crashes 和 ANRs (Android)/App Hangs (iOS)。**網路錯誤**索引標籤具有折線圖，顯示網路延遲、用戶端錯誤 (4xx 狀態碼） 和伺服器錯誤 (5xx 狀態碼）。按一下圖表中任一行的資料點將開啟診斷面板。下表列出 100 個最常見的網路路由。按一下選項按鈕會依選取的網路路由篩選折線圖。

  同樣地，**Crashes** 和 **ANRs/App Hangs** 索引標籤會顯示每個錯誤計數的行序列，而且這些都是難處理的。下表顯示最常見的頂端當機訊息或 ANR/App Hang 堆疊追蹤。按一下選項按鈕會篩選圖表，而按一下錯誤訊息會顯示完整的堆疊追蹤。
+ **工作階段**索引標籤會顯示資料表，以遞減時間順序列出所有工作階段。在底部，瀑布視覺化會顯示所選工作階段的所有遙測，協助您追蹤使用者互動並識別效能問題。可以選擇瀑布中的每一列來開啟診斷面板。對於 HTTP 請求，您會看到連結至 Traces 主控台的 **traceId**。

  對於具有非 2xx 狀態碼、當機或 ANRs(Android)/App Hangs (iOS) 的 HTTP 請求，診斷面板會包含具有堆疊追蹤的**例外**狀況索引標籤。瀑布中的**檢視**按鈕可讓您快速存取此資訊。
+ **指標**索引標籤會顯示應用程式監視器發佈的所有預設 CloudWatch 指標，包括效能指標 （畫面載入時間、冷應用程式啟動時間）、錯誤指標 （當機、ANRsApp Hangs、HTTP 錯誤/故障）、磁碟區和 apdex 指標。如果您為應用程式建立延伸指標，標籤也會在延伸指標區段中包含這些指標的子集。此子集包含 ScreenLoadTime、ScreenLoadCount、CrashCount、Http4xxCount, Http5xxCount、ANRCount/AppHangCount、ColdLaunchTime 和 WarmLaunchTime 類型的指標。儀表板顯示每種指標類型的三種指標變化。由於這些是 CloudWatch 指標，您也可以使用**新增至儀表板選項，將此標籤匯出至您自己的儀表板**，並將其更新為包含更多指標。
+ **組態**索引標籤可讓您存取應用程式監視器的一般設定和組態詳細資訊。您也可以存取**程式碼片段**索引標籤，其中包含使用 ADOT SDK 檢測行動應用程式的指示，包括手動和零代碼檢測選項。

### CloudWatch RUM 如何設定 Apdex 分數
<a name="CloudWatch-RUM-apdex"></a>

Apdex (應用程式效能指標) 是一項開放的標準，其定義了一種報告、基準化分析和評估應用程式回應時間的方法。Apdex 分數可協助您了解並識別隨時間推移對應用程式效能的影響。

Apdex 分數表示最終使用者的滿意度。分數範圍從 0 (最不滿意) 到 1 (最滿意)。分數僅根據應用程式效能而定。不會要求使用者對應用程式進行評分。

每個個別 Apdex 分數分屬於三種閾值之一。根據 Apdex 閾值和實際應用程式回應時間，有三種效能類型，如下所示：
+ **滿意** - 實際應用程式回應時間小於或等於 Apdex 閾值。對於 CloudWatch RUM 而言，此閾值為 2000 毫秒或更少。
+ **可容忍** — 實際應用程式回應時間大於 Apdex 閾值，但小於或等於 Apdex 閾值的四倍。對於 CloudWatch RUM，此範圍為 2000 – 8000 毫秒。
+ 令人**沮喪**：實際應用程式回應時間大於 Apdex 閾值的四倍。對於 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 從 Web 應用程式、行動應用程式或兩者自動收集的指標。您可以在 CloudWatch 主控台中查看這些指標。如需詳細資訊，請參閱[檢視可用的指標](viewing_metrics_with_cloudwatch.md)。

您也可以選擇將延伸指標傳送至 CloudWatch。如需詳細資訊，請參閱[延伸指標](CloudWatch-RUM-custom-and-extended-metrics.md#CloudWatch-RUM-vended-metrics)。

這些指標會名稱為 `AWS/RUM` 的命名空間中發布。所有以下指標在發布時具有 `application_name` 維度：此維度的值是應用程式監控的名稱。某些指標也會以其他維度發佈，如下表所列。


**Web 指標**  

| 指標 | 單位 | Description | 
| --- | --- | --- | 
|  `HttpStatusCodeCount` |  計數  |  應用程式中依回應狀態程式碼顯示的 HTTP 回應計數。 其他維度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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` |  計數  |  導覽事件計數，`duration` 高於令人困擾的閾值，即 8000ms。導覽事件的持續時間以 `PerformanceNavigationDuration` 指標進行追蹤。  | 
|  `NavigationSatisfiedTransaction` |  計數  |  導覽事件計數，`duration` 低於 Apdex 目標，即 2000ms。導覽事件的持續時間以 `PerformanceNavigationDuration` 指標進行追蹤。  | 
|  `NavigationToleratedTransaction` |  計數  |  導覽事件計數，`duration` 介於 2000ms 和 8000ms 之間。導覽事件的持續時間以 `PerformanceNavigationDuration` 指標進行追蹤。  | 
|  `PageViewCount` |  計數  |  應用程式監視器擷取的頁面檢閱事件計數。 這透過計算 `page_view_event` RUM 事件數目來計算。  | 
|  `PageViewCountPerSession` |  計數  |  工作階段中的頁面檢視事件計數。 | 
|  `PerformanceResourceDuration` |  毫秒  |  資源事件的 `duration`。 其他維度： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-metrics.html)  | 
|  `PerformanceNavigationDuration` |  毫秒  |  導覽事件的 `duration`。  | 
|  `RumEventPayloadSize` |  位元組  |  CloudWatch RUM 擷取的每個事件大小。您還可以使用此指標的 `SampleCount` 統計數字，以監控應用程式監視器正在擷取的事件數目。  | 
|  `SessionCount` |  計數  |  應用程式監視器擷取的工作階段啟動事件計數。換言之，啟動的新工作階段數目。  | 
|  `SessionDuration` |  毫秒  |  工作階段的持續時間。這些根據工作階段中第一個和最後一個事件之間的時間來計算。  | 
|  `TimeOnPage` |  毫秒  |  頁面檢視的持續時間。 這些根據距離下一次頁面檢視的時間計算；但工作階段中的最後一個頁面除外，此時根據該頁面上第一個事件與最後一個事件之間的時間間隔計算。  | 
|  `WebVitalsCumulativeLayoutShift` |  無  |  追蹤累計版面配置移位事件的值。  | 
|  `WebVitalsFirstInputDelay` |  毫秒  |  追蹤第一個輸入延遲事件的值。  | 
|  `WebVitalsLargestContentfulPaint` |  毫秒  |  追蹤最大的內容繪製事件的值。  | 
|  `WebVitalsInteractionToNextPaint` |  毫秒  |  追蹤與下一個繪製事件互動的值。  | 

您可以為行動應用程式設定延伸指標，以提供額外的維度進行分析。


**行動指標**  

| 指標 | 單位 | Description | 
| --- | --- | --- | 
|  `ANRCount`  |  計數  |  僅限 Android：應用程式無回應 (ANR) 事件的數量，當應用程式超過 5 秒沒有回應，導致應用程式當機。  | 
|  `AppHangCount`  |  計數  |  僅限 iOS：應用程式在主迴圈上超過 250 毫秒沒有回應的次數。  | 
|  `ColdAppLaunchFrustratedTransaction`  |  計數  |  需要超過 8 秒才能完成的冷應用程式啟動次數，可能會導致使用者沮喪。  | 
|  `ColdAppLaunchSatisfiedTransaction`  |  計數  |  在不到 2 秒內完成的冷應用程式啟動次數，可提供令人滿意的使用者體驗。  | 
|  `ColdAppLaunchToleratedTransaction`  |  計數  |  在 2 到 8 秒之間完成的冷應用程式啟動次數，可提供可容忍但不理想的使用者體驗。  | 
|  `ColdLaunchTime`  |  毫秒  |  從終止狀態啟動應用程式所需的時間。 對於 Android：從應用程式`onCreate`到第一個活動完成建立的時間。 對於 iOS：從應用程式啟動 （由`sysctl`程序啟動命令決定） 到 的時間`didBecomeActiveNotification`。  | 
|  `CrashCount`  |  計數  |  未處理的例外狀況或作業系統終止所造成的非預期應用程式終止次數。 對於 Android：由於未處理的例外狀況或系統終止而當機。 對於 iOS：由於未處理的例外狀況、嚴重錯誤或系統終止而當機。 當機資料會儲存在本機，並在下次啟動應用程式時回報。  | 
|  `DroppedEventsCount`  |  計數  |  因為超過每個事件 30KB 的大小上限而捨棄的日誌事件數量。  | 
|  `DroppedSpansCount`  |  計數  |  由於超過每個範圍 30KB 的大小限制上限而捨棄的跨度數量。  | 
|  `Http4xxCount`  |  計數  |  記錄 Web 或行動應用程式在 HTTP 請求期間遇到的 HTTP 用戶端錯誤數目。  | 
|  `Http5xxCount`  |  計數  |  記錄 Web 或行動應用程式在 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 APIs或 ， AWS CLI 而非 主控台。如需使用 AWS APIs的詳細資訊，請參閱 [PutRumMetricsDestination](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_PutRumMetricsDestination.html) 和 [BatchCreateRumMetricDefinitions](https://docs.aws.amazon.com/cloudwatchrum/latest/APIReference/API_BatchCreateRumMetricDefinitions.html)。

一個目的地可包含的延伸指標和自訂指標定義數量上限為 2000 個。對於您傳送至每個目的地的每個自訂指標和延伸指標，每個維度名稱和維度值的組合都會計入此限制。您不需要為衍生自 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)」。

一個目的地可包含的延伸指標和自訂指標定義數量上限為 2000 個。對於您傳送至每個目的地的每個延伸或自訂指標，每個維度名稱和維度值的組合都會計為此限制的延伸指標。

將延伸指標傳送至 CloudWatch 後，就可以使用 CloudWatch RUM 主控台在這些指標上建立 CloudWatch 警示。

您不需要為針對 CloudWatch RUM 預設指標建立的延伸指標付費。

### Web 應用程式延伸指標
<a name="CloudWatch-RUM-web-extended-metrics"></a>

Web 應用程式延伸指標支援下列維度：
+ `BrowserName`

  維度值範例：`Chrome`、`Firefox`、`Chrome Headless`
+ `CountryCode` 此維度會使用 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 APIs 將延伸指標傳送至 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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

1. 選擇要傳送指標之應用程式監視器的名稱。

1. 選擇 **Configuration** (組態) 索引標籤，然後選擇 **RUM extended metrics** (RUM 延伸指標)。

1. 選擇 **Send metrics** (傳送指標)。

1. 選取要與其他維度一起傳送的一或多個指標名稱。

1. 選取一或多個要作為這些指標之維度的因素。作出選擇後，您選擇建立的延伸指標數量會顯示在 **Number of extended metrics** (延伸指標的數量) 中。

   此數字的計算方式是將選擇的指標名稱數目乘以您建立的不同維度數量。

   1. 若要傳送以頁面 ID 作為維度的指標，請選擇 **Browse for page ID** (瀏覽頁面 ID)，然後選取要使用的頁面 ID。

   1. 若要傳送以裝置類型作為維度的指標，請選擇 **Desktop devices** (桌面裝置) 或 **Mobile and tablets** (行動裝置和平板電腦)。

   1. 若要傳送以作業系統作為維度的指標，請在 **Operating system** (作業系統) 下選取一或多個作業系統。

   1. 若要傳送以瀏覽器類型作為維度的指標，請在 **Browsers** (瀏覽器) 下選取一或多個瀏覽器。

   1. 若要傳送以地理位置作為維度的指標，請在 **Locations** (位置) 下選取一或多個位置。

      只有此應用程式監視器已回報指標的位置才會顯示在清單中供您選擇。

1. 完成選擇後，選擇 **Send metrics** (傳送指標)。

1. (選用) 在 **Extended metrics** (延伸指標) 清單中，若要建立監看其中一個指標的警示，請在該指標列中選擇 **Create alarm** (建立警示)。

   如需有關 CloudWatch 警示的一般資訊，請參閱[使用 Amazon CloudWatch 警示](CloudWatch_Alarms.md)。如需在 CloudWatch RUM 延伸指標上設定警示的教學課程，請參閱[教學課程：建立延伸指標並設定其警示](#CloudWatch-RUM-extended-metrics-alarmtutorial)。

**停止傳送延伸指標**

**使用主控台停止傳送延伸指標**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

1. 選擇要傳送指標之應用程式監視器的名稱。

1. 選擇 **Configuration** (組態) 索引標籤，然後選擇 **RUM extended metrics** (RUM 延伸指標)。

1. 選取要停止傳送的一或多個指標名稱和維度組合。接著選擇 **Actions** (動作)，**Delete** (刪除)。

### 教學課程：建立延伸指標並設定其警示
<a name="CloudWatch-RUM-extended-metrics-alarmtutorial"></a>

本教學課程示範如何設定要傳送至 CloudWatch 的延伸指標，以及如何設定該指標的警示。在本教學課程中，您將建立一個指標來追蹤 Chrome 瀏覽器上的 JavaScript 錯誤。

**設定此延伸指標並設定其警示**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

1. 選擇要傳送指標之應用程式監視器的名稱。

1. 選擇 **Configuration** (組態) 索引標籤，然後選擇 **RUM extended metrics** (RUM 延伸指標)。

1. 選擇 **Send metrics** (傳送指標)。

1. 選取 **JSErrorCount**。

1. 在 **Browsers** (瀏覽器) 下，選取 **Chrome**。

   這種 **JSerrorCount** 和 **Chrome** 的組合會將一個延伸指標傳送到 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. 在 **Period** (期間) 中，選取 **5 minutes** (5 分鐘)。

1. 在 **Conditions** (條件) 下，執行下列動作：
   + 選擇 **Static** (靜態)。
   + 選擇 **Greater** (大)，指定當錯誤數量大於您要指定的閾值時，警示應進入 ALARM 狀態。
   + 在 **than...** (於…) 下方，輸入警示閾值的數字。如果 5 分鐘的期間內錯誤數量超過此數量時，警示會進入 ALARM 狀態。

1. (選用) 依預設，一旦 5 分鐘期間內的錯誤數量超過您設定的閾值數量，警示就會進入 ALARM 狀態。您也可以選擇將此設定變更為只有在連續多個 5 分鐘期間內超過此數字時，警示才進入 ALARM 狀態。

   若要這麼做，請選擇 **Additional configuration** (其他組態)，然後在 **Datapoints to alarm** (要警示的資料點) 中，指定在連續多少個 5 分鐘期間內錯誤次數超過閾值才會觸發警示。例如，您可以選取 2 個 (共 2 個)，只有在連續兩個 5 分鐘期間內超過閾值時才觸發警示；如果選取 2個 (共 3 個)，只有連續三個 5 分鐘期間內任何兩個期間內超過閾值，才會觸發警示。

   如需有關此類型警示評估的詳細資訊，請參閱[警示評估](alarm-evaluation.md)。

1. 選擇**下一步**。

1. 在 **Configure actions** (設定動作) 中，指定警示進入 ALARM 狀態時應採取的動作。若要使用 Amazon SNS 接收通知，請執行以下操作：
   + 選擇 **Add notification** (新增通知)。
   + 選擇**警示中**。
   + 選取現有的 SNS 主題，或建立新主題。如果您建立新主題，請為其指定名稱，並至少向其新增一個電子郵件地址。

1. 選擇**下一步**。

1. 輸入名稱和選用的警示描述，然後選擇 **Next** (下一步)。

1. 檢閱詳細資訊，並選擇 **Create alarm** (建立警示)。

# 使用 CloudWatch RUM 的資料保護和資料隱私權
<a name="CloudWatch-RUM-privacy"></a>

 AWS [ 共同責任模型](https://aws.amazon.com/compliance/shared-responsibility-model/)適用於 Amazon CloudWatch RUM 中的資料保護和資料隱私權。如此模型所述， AWS 負責保護執行所有 AWS 雲端的 全球基礎設施。您負責維護在此基礎設施上託管內容的控制權。如需資料隱私權的詳細資訊，請參閱[資料隱私權常見問答集](https://aws.amazon.com/compliance/data-privacy-faq/)。如需歐洲資料保護的相關資訊，請參閱 AWS [AWS 安全部落格上的共同責任模型和 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 會根據您想要收集之最終使用者資料的輸入，為您產生程式碼片段，供您嵌入網站或 Web 應用程式程式碼。由程式碼片段下載和設定的 Web 用戶端會使用 Cookie (或類似技術) 來協助您收集最終使用者資料。Cookie (或類似技術) 的使用受某些司法管轄區的資料隱私權法規約束。在使用 Amazon CloudWatch RUM 之前，強烈建議您根據適用法律評定您的合規義務，包括任何適用的法規要求，以提供完全合法的隱私權通知，並取得使用 Cookie 和處理 (包括收集) 最終使用者資料所需的任何同意。如需 Web 用戶端如何使用 Cookie (或類似技術) 以及 Web 用戶端收集哪些最終使用者資料的詳細資訊，請參閱 [CloudWatch RUM Web 用戶端所收集的資訊](CloudWatch-RUM-datacollected.md) 和 [CloudWatch RUM Web 用戶端 Cookie (或類似技術)](#CloudWatch-RUM-cookies)。

強烈建議您，絕對不要將最終使用者帳戶號碼、電子郵件地址或其他個人資訊等敏感的識別資訊放入自由格式欄位中。您輸入 Amazon CloudWatch RUM 或其他服務的任何資料，都可能包含在診斷日誌中。



## CloudWatch RUM Web 用戶端 Cookie (或類似技術)
<a name="CloudWatch-RUM-cookies"></a>

CloudWatch RUM Web 用戶端預設會收集有關使用者工作階段的特定資料。您可以選擇啟用 Cookie，讓 Web 用戶端收集在頁面載入過程中持續存在的使用者 ID 和工作階段 ID。使用者 ID 是由 RUM 隨機產生。

如果啟用這些 Cookie，當您檢視此應用程式監控的 RUM 儀表板時，RUM 可以顯示下列類型的資料。
+ 根據使用者 ID 彙總的資料，例如唯一使用者的數量，以及發生錯誤的不同使用者的數量。
+ 根據工作階段 ID 彙總的資料，例如工作階段數量和發生錯誤的工作階段數量。
+ *使用者旅程*，是每個取樣使用者工作階段會包含的頁面順序。

**重要**  
如果您未啟用這些 Cookie (或類似技術)，則 Web 用戶端仍會記錄有關最終使用者工作階段的特定資訊，例如瀏覽器類型/版本、作業系統類型/版本、裝置類型等。收集這些資訊是為了提供彙總頁面特定的洞察，例如 Web 關鍵數值、頁面檢視以及發生錯誤的頁面。如需已記錄資料的詳細資訊，請參閱 [CloudWatch RUM Web 用戶端所收集的資訊](CloudWatch-RUM-datacollected.md)。

# CloudWatch RUM Web 用戶端所收集的資訊
<a name="CloudWatch-RUM-datacollected"></a>

本節會記錄 **PutRumEvents** 結構描述，它定義了您可以使用 CloudWatch RUM 從使用者工作階段收集的資料結構。

**PutRumEvents** 請求會將包含下列欄位的資料結構傳送至 CloudWatch RUM。
+ 此批次 RUM 事件的 ID
+ 應用程式監控詳細資訊，其中包含下列各項：
  + 應用程式監控 ID
  + 監控的應用程式版本
+ 使用者詳細資訊，其中包含下列各項。**只有在應用程式監控已啟用 Cookie 時，才會收集此資訊。**
  + 由 Web 用戶端產生的使用者 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>

**Page view** (頁面檢視) 事件包含下列屬性。您可以透過設定 Web 用戶端來停用頁面檢視集合。如需詳細資訊，請參閱 [CloudWatch RUM Web 用戶端文件](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 錯誤事件包含下列屬性。只有在您選取收集錯誤遙測時，Web 用戶端才會收集這些事件。


| 名稱 | 類型 | 說明 | 
| --- | --- | --- | 
|  **錯誤類型** |  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 用戶端文件](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)。  | 
|  **Element** |  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  |  表示起始效能事件的資源類型。 |  **值：**"navigation" **層級 1：**"navigation" **層級 2:**entryData.initiatorType | 
|  **navigationType** |  String  |  表示導覽的類型。此屬性不是必要項目。 |  **值：**值必須是下列其中一個： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html) | 
|  **startTime** |  Number  |  指示事件觸發的時間。 |  **值：**0 **層級 1：**entryData.navigationStart - entryData.navigationStart  **層級 2：**entryData.startTime | 
|  **unloadEventStart** |  Number  |  指示視窗中的上一個文件在擲出 `unload` 事件後開始卸載的時間。 |  **值：**如果沒有上一個文件，或者如果上一個文件或其中一個所需的重新引導不是相同的原點，則傳回的值為 0。 **層級 1：** <pre>entryData.unloadEventStart > 0<br />  ? entryData.unloadEventStart - entryData.navigationStart<br />  : 0<br /></pre> **層級 2：**entryData.unloadEventStart | 
|  **promptForUnload** |  Number  |  卸載文件所花費的時間。換言之，`unloadEventStart` 到 `unloadEventEnd` 之間的時間。`UnloadEventEnd` 表示卸載事件處理程式完成時的時刻，以毫秒為單位。 |  **值：**如果沒有上一個文件，或者如果上一個文件或其中一個所需的重新引導不是相同的原點，則傳回的值為 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` 介面的屬性。它標誌著工作者執行緒操作的開始。 此屬性不是必要項目。 |  **值：**如果服務工作者執行緒已經在執行中，或立即在啟動服務工作者執行緒之前執行，則此屬性會在分派 `FetchEvent` 前立即傳回時間。如果服務工作者未攔截資源，則傳回 0。 **層級 1：**不可用 **層級 2：**entryData.workerStart | 
|  **workerTime** |  Number  |  如果服務工作者未攔截資源，則這樣會傳回工作者執行緒操作所需的時間。 此屬性不是必要項目。 |  **層級 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  | 
|  **connect** |  Number  |  測量建立傳輸連線或執行 SSL 身分驗證所需的時間。它還包括當瀏覽器發出太多並行請求時所花費的阻塞時間。  |  **層級 1：**entryData.connectEnd - entryData.connectStart **層級 2：**entryData.connectEnd - entryData.connectStart | 
|  **secureConnectionStart** |  Number  |  如果當前頁面的 URL 結構描述是「https」，此屬性會傳回使用者代理程式立即啟動交握程序以保護當前連線之前的時間。如果不使用 HTTPS，則傳回 0。如需 URL 結構描述的詳細資訊，請參閱 [URL 表示法](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` 變更為「交互式」並擲出相應的 `readystatechange` 事件。  | **層級 1：** <pre>entryData.domInteractive > 0<br />  ? entryData.domInteractive - entryData.navigationStart<br />  : 0</pre> **層級 2 ：**entryData.domInteractive  | 
|  **domContentLoadedEventStart** |  Number  |  表示等於使用者代理程式在當前文件立即觸發 DOMContentLoaded 事件之前之時間的時間值。當初始 HTML 文件已完全載入並剖析時，就會觸發 DOMContentLoaded 事件。此時，主要 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 \$1 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` 屬性之間的差異。  | **層級 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>

只有在應用程式監控啟用效能遙測時，才會收集資源事件。

時間戳記指標是根據 [The DOMHighResTimeStamp typedef](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` 屬性之間的差異。此屬性不是必要項目。  | **公式：**entryData.duration | 
|  **transferSize** |  Number  |  傳回擷取資源的大小 (以八位元為單位)，包括回應標頭欄位和回應酬載主體。此屬性不是必要項目。  | **公式：**entryData.transferSize | 
|  **fileType** |  String  |  衍生自目標 URL 模式的擴充。  |   | 

### 最大的有內容繪製事件結構描述
<a name="CloudWatch-RUM-datacollected-LargestPaintEvent"></a>

最大的有內容繪製事件包含下列屬性。

只有在應用程式監控啟用效能遙測時，才會收集這些事件。


| 名稱 | 描述 | 
| --- | --- | 
|  **Value** |  如需詳細資訊，請參閱 [Web 關鍵數值](https://web.dev/vitals/)。 | 

### 第一個輸入延遲事件
<a name="CloudWatch-RUM-datacollected-FirstInputDelayEvent"></a>

第一個輸入延遲事件包含下列屬性。

只有在應用程式監控啟用效能遙測時，才會收集這些事件。


| 名稱 | 描述 | 
| --- | --- | 
|  **Value** |  如需詳細資訊，請參閱 [Web 關鍵數值](https://web.dev/vitals/)。 | 

### 累計版面配置移位事件
<a name="CloudWatch-RUM-datacollected-CumulativeShift"></a>

累計版面配置移位事件包含下列屬性。

只有在應用程式監控啟用效能遙測時，才會收集這些事件。


| 名稱 | 描述 | 
| --- | --- | 
|  **Value** |  如需詳細資訊，請參閱 [Web 關鍵數值](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/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **回應** |  回應欄位包含下列項目： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/AmazonCloudWatch/latest/monitoring/CloudWatch-RUM-datacollected.html)  | 
|  **錯誤** |  錯誤欄位包含下列項目： [\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_tw/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 Web 用戶端會使用一般效能 API 指標擷取載入時間。

但是，單頁 Web 應用程式使用 JavaScript 和 Ajax 來更新介面，而無需從伺服器載入新頁面。瀏覽器時序 API 不會記錄單頁更新，而是使用路由變更時序。

CloudWatch RUM 支援監控來自伺服器的完整頁面載入和單頁更新，但差異如下：
+ 對於路由變更時序，沒有瀏覽器提供的指標，例如 `tlsTime`、`timeToFirstByte` 等。
+ 對於路由變更時序，`initiatorType` 欄位將為 `route_change`。

CloudWatch RUM Web 用戶端會監聽可能導致路由變更的使用者互動，且在記錄這類使用者互動時，Web 用戶端會記錄時間戳記。然後，如果下列項目皆為 true，路由變更時序會開始：
+ 瀏覽器歷史記錄 API (瀏覽器下一頁和上一頁按鈕除外) 用於執行路由變更。
+ 路由變更偵測的時間與最近的使用者互動時間戳記之間的差異小於 1000 ms。這可避免資料扭曲。

然後，一旦路由變更時序開始，如果沒有正在進行的 AJAX 請求和 DOM 變動，則該時序即完成。然後，將使用最近完成活動的時間戳記作為完成時間戳記。

如果正在進行的 AJAX 請求或 DOM 變動超過 10 秒 (預設情況下)，路由變更時序將逾時。在此情況下，CloudWatch RUM Web 用戶端將不再記錄此路由變更的時序。

因此，路由變更事件的持續時間計算方式如下：

```
(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. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

1. 導覽至**組態**索引標籤，**程式碼片段**區段。

1. 針對個別檢測選擇**複製/下載**。

# 編輯 CloudWatch RUM 應用程式監視器設定
<a name="CloudWatch-RUM-edit-application"></a>

若要變更應用程式監控的設定，請按照下列步驟操作。您可以變更應用程式監控名稱以外的任何設定。

**編輯應用程式對 CloudWatch RUM 的使用方式**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 CloudWatch 主控台。

1. 在導覽窗格中，依次選擇 **Application Signals**、**RUM**。

1. 選擇應用程式名稱旁邊的按鈕，然後選擇 **Actions** (動作)、**Edit** (編輯)。

1. 變更應用程式名稱以外的任何設定。如需設定的詳細資訊，請參閱 [為 Web 應用程式建立 CloudWatch RUM 應用程式監視器](CloudWatch-RUM-get-started-create-app-monitor.md)。

1. 完成時，選擇**儲存**。

   變更設定會變更程式碼片段。您現在必須將更新的程式碼片段貼到您的應用程式中。

1. 建立程式碼片段後，選擇**複製到剪貼簿**或**下載**，然後選擇**完成**。

   若要開始使用新設定監控，請將程式碼片段插入應用程式中。

# 停止使用 CloudWatch RUM 或刪除應用程式監視器
<a name="CloudWatch-RUM-delete-appmonitor"></a>

若要停止將 CloudWatch RUM 與應用程式搭配使用，請從應用程式的程式碼中移除 RUM 產生的程式碼片段。

若要刪除 RUM 應用程式監控，請依照下列步驟。

**刪除應用程式監控**

1. 透過 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 開啟 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) 中的指示尋找當前的正確程式碼片段，並將其與貼到應用程式中的程式碼片段進行比較。