

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

# Application Signals 收集的指標
<a name="AppSignals-MetricsCollected"></a>

Application Signals 會從您為其啟用的應用程式收集[標準應用程式指標](#AppSignals-StandardMetrics)和[執行時期指標](#AppSignals-StandardMetrics)。

標準應用程式指標與服務效能、延遲與可用性的最關鍵部分相關。

執行時期指標會追蹤應用程式指標隨時間的變化，包括記憶體用量、CPU 用量與垃圾回收。Application Signals 會在您為 Application Signals 啟用的服務內容中顯示執行時期指標。遇到操作問題時，觀察執行時期指標有助於找出問題發生的根本原因。例如，您可以查看服務中的延遲飆升，是否與執行時期指標的飆升相關。

**Topics**
+ [收集的標準應用程式指標](#AppSignals-StandardMetrics)
+ [執行時期指標](#AppSignals-RuntimeMetrics)
+ [停用執行時期指標的收集](#AppSignals-RuntimeMetrics-Disable)

## 收集的標準應用程式指標
<a name="AppSignals-StandardMetrics"></a>

Application Signals 會從它發現的服務中收集*標準應用程式指標*。這些指標與服務效能的最重要方面有關：延遲、故障和錯誤。它們可協助您識別問題、監控效能趨勢並最佳化資源，以改善整體使用者體驗。

下表列出 Application Signals 收集的指標。這些指標會傳送到 `ApplicationSignals` 命名空間中的 CloudWatch。


| 指標 | Description | 
| --- | --- | 
|  `Latency`  |  提出請求後，資料傳輸開始之前的延遲時間。 單位：毫秒 | 
|  `Fault`  |  HTTP 5XX 伺服器端故障和 OpenTelemetry 跨度狀態錯誤的計數。 單位：無 | 
|  `Error`  |  HTTP 4XX 用戶端錯誤的計數。這些錯誤被認為是並非由服務問題引起的請求錯誤。因此，Application Signals 儀表板上顯示的 `Availability` 指標不會將這些錯誤視為服務錯誤。 單位：無 | 

Application Signals 儀表板上顯示之 `Availability` 指標的計算方法為 **(1 - `Faults`/總計)\$1100**。總回應數包含所有回應，源自 `SampleCount(Latency)`。成功的回應是沒有 `5XX` 錯誤的所有回應。當 Application Signals 計算 `Availability` 時，`4XX` 回應會被視為成功。

### 收集的維度與維度組合
<a name="AppSignals-StandardMetrics-Dimensions"></a>

以下是針對每個標準應用程式指標定義的維度。如需維度的詳細資訊，請參閱 [維度](cloudwatch_concepts.md#Dimension)。

會針對*服務指標*和*相依性指標*收集不同的維度。在 Application Signals 發現的服務中，當微服務 A 呼叫微服務 B 時，微服務 B 正在提供請求。在此情況下，微服務 A 會發出相依性指標，而微服務 B 會發出服務指標。當用戶端呼叫微服務 A 時，微服務 A 會提供請求並發出服務指標。

**服務指標的維度**

為服務指標收集以下維度。


| 維度 | Description | 
| --- | --- | 
|  `Service`  |   服務的名稱。 值的上限為 255 個字元。  | 
|  `Operation`  |  API 操作或其他活動的名稱。 值的上限為 1024 個字元。僅當操作名稱的字元數為 194 個或以下時，才能設定操作的服務水準目標。  | 
| `Environment` | 執行服務之環境的名稱。如果服務未在 Amazon EKS 上執行，可以在 `OTEL_ATTRIBUTE_RESOURCES` 參數中指定 `deployment.environment` 的選用自訂值。 最大值為 259 個字元。 | 

在 CloudWatch 主控台中檢視這些指標時，可透過下列維度組合進行檢視：
+ `[Environment, Service, Operation, [Latency, Error, Fault]]`
+ `[Environment, Service, [Latency, Error, Fault]]`

**相依性指標的維度**

為相依項指標收集以下維度：


| 維度 | Description | 
| --- | --- | 
|  `Service`  |   服務的名稱。 值的上限為 255 個字元。  | 
|  `Operation`  |  API 操作或其他操作的名稱。 最大值為 1024 個字元。  | 
|  `RemoteService`  |  正在調用之遠端服務的名稱。 值的上限為 255 個字元。  | 
|  `RemoteOperation`  |  正在調用之 API 操作的名稱。 最大值為 1024 個字元。  | 
|  `Environment`  | 執行服務之環境的名稱。如果服務未在 Amazon EKS 上執行，可以在 `OTEL_ATTRIBUTE_RESOURCES` 參數中指定 `deployment.environment` 的選用自訂值。 值的上限為 259 個字元。 | 
|  `RemoteEnvironment`  |  執行相關性服務之環境的名稱。當服務呼叫相依項且兩者在同個叢集中執行時，會自動產生 `RemoteEnvironment` 參數。否則，`RemoteEnvironment` 既不會在服務相依項指標中產生，也不會被報告。目前僅適用於 Amazon EKS 和 K8S 平台。 最大值為 259 個字元。  | 
|  `RemoteResourceIdentifier`  |  遠端呼叫所調用之資源的名稱。如果服務呼叫遠端 AWS 服務，則會自動產生 `RemoteResourceIdentifier` 參數。否則，`RemoteResourceIdentifier` 既不會在服務相依項指標中產生，也不會被報告。 最大值為 1024 個字元。  | 
|  `RemoteResourceType`  |  遠端呼叫所調用之資源的類型。僅當已定義 `RemoteResourceIdentifier` 時必填。 最大值為 1024 個字元。  | 

在 CloudWatch 主控台中檢視這些指標時，可透過下列維度組合進行檢視：

**在 Amazon EKS 叢集上執行**
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, RemoteEnvironment, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, RemoteEnvironment, [Latency, Error, Fault]]`
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, Operation, RemoteService, RemoteOperation, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteEnvironment, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, RemoteEnvironment, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, RemoteEnvironment, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, RemoteResourceIdentifier, RemoteResourceType, [Latency, Error, Fault]]`
+ `[Environment, Service, RemoteService, RemoteOperation, [Latency, Error, Fault]]`
+ `[RemoteService [Latency, Error, Fault]]` 
+ `[RemoteService, RemoteResourceIdentifier, RemoteResourceType [Latency, Error, Fault]]`

## 執行時期指標
<a name="AppSignals-RuntimeMetrics"></a>

Application Signals 使用 AWS Distro for OpenTelemetry SDK 從您的 Java 和 Python 應用程式自動收集 OpenTelemetry 相容指標。若要收集執行時期指標，必須符合下列先決條件：
+ CloudWatch 代理程式必須是 `1.300049.1` 或更高版本。
+ 如果使用 Amazon CloudWatch Observability EKS 附加元件，則必須是版本 `2.30-eksbuild.1` 或更高版本。如果更新附加元件，必須重新啟動應用程式。
+ 對於 Java 應用程式，您必須執行 `1.32.5` 或更新版本的適用於 Java 的 AWS Distro for OpenTelemetry 開發套件。
+ 對於 Python 應用程式，您必須執行適用於 Python 的 AWS Distro for OpenTelemetry SDK `0.7.0`或更新版本。
+ 對於 .Net 應用程式，您必須執行適用於 .Net 的 AWS Distro for OpenTelemetry SDK `1.6.0`或更新版本。

Node.js 應用程式的執行時期指標不會收集。

執行時期指標計入 Application Signals 成本。如需 CloudWatch 定價的詳細資訊，請參閱 [Amazon CloudWatch 定價](https://aws.amazon.com/cloudwatch/pricing)。

**注意**  
**已知問題**  
已知 Java SDK v1.32.5 版本中的執行時期指標收集功能，無法與使用 JBoss Wildfly 的應用程式配合運作。此問題延伸到 Amazon CloudWatch Observability EKS 附加元件，影響版本 `2.3.0-eksbuild.1` 至 `2.6.0-eksbuild.1`。Java SDK 版本 `v1.32.6` 和 Amazon CloudWatch Observability EKS 附加元件版本 `v3.0.0-eksbuild.1` 中已修正此問題。  
如果您受到影響，請將環境變數 `OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false` 新增至您的應用程式，以升級 Java SDK 版本或停用執行時期指標收集。

### Java 執行時期指標
<a name="AppSignals-RuntimeMetrics-JVM"></a>

Application Signals 會從您為 Application Signals 啟用的 Java 應用程式收集以下 JVM 指標。所有執行時期指標都會傳送至 `ApplicationSignals` 命名空間中的 CloudWatch，並透過 `Service` 和 `Environment` 維度集收集。


| 指標名稱 | Description | 有意義的統計資料 | 
| --- | --- | --- | 
|  `JVMGCDuration` |  JVM 垃圾回收動作持續時間的彙總指標。 單位：毫秒  | 總和、平均值、最小值、最大值 | 
|  `JVMGCOldGenDuration` |  舊代 JVM 垃圾回收動作持續時間的彙總指標。僅適用於第一代。 單位：毫秒  | 總和、平均值、最小值、最大值 | 
|  `JVMGCYoungGenDuration` |  年輕一代 JVM 垃圾回收動作持續時間的彙總指標。僅適用於第一代。 單位：毫秒  | 總和、平均值、最小值、最大值 | 
|  `JVMGCCount` |  JVM 垃圾回收動作數目的彙總指標。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `JVMGCOldGenCount` |  舊代 JVM 垃圾回收動作數目的彙總指標。僅適用於第一代。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `JVMGCYoungGenCount` |  年輕一代 JVM 垃圾回收動作數目的彙總指標。僅適用於第一代。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `JVMMemoryHeapUsed` |  使用的記憶體堆疊量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `JVMMemoryUsedAfterLastGC` |  此記憶體區塊於最近一次垃圾回收事件後測得的記憶體使用量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `JVMMemoryOldGenUsed` |  舊代使用的記憶體量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `JVMMemorySurvivorSpaceUsed` |  存活者空間使用的記憶體堆疊量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `JVMMemoryEdenSpaceUsed` |  eden 空間使用的記憶體量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `JVMMemoryNonHeapUsed` |  使用的非堆疊記憶體量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `JVMThreadCount` |  執行執行緒的數量，包括常駐程式和非常駐程式執行緒。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `JVMClassLoaded` |  載入的類別數。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `JVMCpuTime` |  JVM 所報告之程序使用的 CPU 時間。 單位：無 (奈秒)  | 總和、平均值、最小值、最大值 | 
|  `JVMCpuRecentUtilization` |  JVM 所報告之程序最近使用的 CPU。 單位：無  | 平均值、最小值、最大值 | 

### Python 執行時期指標
<a name="AppSignals-RuntimeMetrics-Python"></a>

Application Signals 會從您為 Application Signals 啟用的 Python 應用程式收集下列指標。所有執行時期指標都會傳送至 `ApplicationSignals` 命名空間中的 CloudWatch，並透過 `Service` 和 `Environment` 維度集收集。


| 指標名稱 | Description | 有意義的統計資料 | 
| --- | --- | --- | 
|  `PythonProcessGCCount` |  目前正在追蹤的物件總數。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `PythonProcessGCGen0Count` |  目前在第 0 代中追蹤的物件數目。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `PythonProcessGCGen1Count` |  目前在第 1 代中追蹤的物件數目。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `PythonProcessGCGen2Count` |  目前在第 2 代中追蹤的物件數目。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `PythonProcessVMSMemoryUsed` |  程序使用的虛擬記憶體總量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `PythonProcessRSSMemoryUsed` |  程序使用之未交換實體記憶體總量。 單位：位元組  | 平均值、最小值、最大值 | 
|  `PythonProcessThreadCount` |  程序目前使用的執行緒數目。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `PythonProcessCpuTime` |  程序使用的 CPU 時間。 單位：秒  | 總和、平均值、最小值、最大值 | 
|  `PythonProcessCpuUtilization` |  程序的 CPU 使用率。 單位：無  | 平均值、最小值、最大值 | 

### .Net 執行時期指標
<a name="AppSignals-RuntimeMetrics-Python"></a>

Application Signals 會從您為 Application Signals 啟用的 .Net 應用程式收集下列指標。所有執行時期指標都會傳送至 `ApplicationSignals` 命名空間中的 CloudWatch，並透過 `Service` 和 `Environment` 維度集收集。


| 指標名稱 | Description | 有意義的統計資料 | 
| --- | --- | --- | 
|  `DotNetGCGen0Count` |  自程序開始以來，第 0 代中追蹤的垃圾回收指標總數。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `DotNetGCGen1Count` |  自程序開始以來，第 1 代中追蹤的垃圾回收指標總數。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `DotNetGCGen2Count` |  自程序開始以來，第 2 代中追蹤的垃圾回收指標總數。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `DotNetGCDuration` |  從程序開始以來，垃圾回收中暫停的總時間量。 單位：無  | 總和、平均值、最小值、最大值 | 
|  `DotNetGCGen0HeapSize` |  在最新的垃圾回收期間觀察到的第 0 代堆疊大小 (包括分段)。 此指標僅在第一次垃圾回收完成後可用。 單位：位元組  | 平均值、最小值、最大值 | 
|  `DotNetGCGen1HeapSize` |  在最新的垃圾回收期間觀察到的第 1 代堆疊大小 (包括分段)。 此指標僅在第一次垃圾回收完成後可用。 單位：位元組  | 平均值、最小值、最大值 | 
|  `DotNetGCGen2HeapSize` |  在最新的垃圾回收期間觀察到的第 2 代堆疊大小 (包括分段)。 此指標僅在第一次垃圾回收完成後可用。 單位：位元組  | 平均值、最小值、最大值 | 
|  `DotNetGCLOHHeapSize` |  在最新的垃圾回收期間觀察到的大型物件堆疊大小 (包括分段)。 此指標僅在第一次垃圾回收完成後可用。 單位：位元組  | 平均值、最小值、最大值 | 
|  `DotNetGCPOHHeapSize` |  在最新的垃圾回收期間觀察到的鎖定物件堆疊大小 (包括分段)。 此指標僅在第一次垃圾回收完成後可用。 單位：位元組  | 平均值、最小值、最大值 | 
|  `DotNetThreadCount` |  目前存在的執行緒集區執行緒數目。 單位：無  | 平均值、最小值、最大值 | 
|  `DotNetThreadQueueLength` |  目前排入佇列等待由執行緒集區處理的工作項數目。 單位：無  | 平均值、最小值、最大值 | 

## 停用執行時期指標的收集
<a name="AppSignals-RuntimeMetrics-Disable"></a>

預設情況下，系統會為啟用 Application Signals 的 Java 和 Python 應用程式收集執行時期指標。如果想要停用這些指標的收集，請依循本節中適用於您環境的說明採取動作。

### Amazon EKS
<a name="AppSignals-RuntimeMetrics-Disable-EKS"></a>

若要在應用程式層級停用 Amazon EKS 應用程式中的執行時期指標，請將下列環境變數新增至工作負載規格。

```
env:
    - name: OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED 
      value: "false"
```

若要在叢集層級停用 Amazon EKS 應用程式中的執行時期指標，請將組態套用至 Amazon CloudWatch Observability EKS 附加元件的進階組態。

```
{
  "agent": {
    "config": {
      "traces": {
        "traces_collected": {
          "application_signals": {
            
          }
        }
      },
      "logs": {
        "metrics_collected": {
          "application_signals": {
            
          }
        }
      }
    },
    "manager": {
      "autoInstrumentationConfiguration": {
        "java": {
          "runtime_metrics": {
            "enabled": false
          }
        },
        "python": {
          "runtime_metrics": {
            "enabled": false
          }
        },
        "dotnet": {
          "runtime_metrics": {
            "enabled": false
          }
        }
      }
    }
  }
}
```

### Amazon ECS
<a name="AppSignals-RuntimeMetrics-Disable-ECS"></a>

若要在 Amazon ECS 應用程式中停用執行時期指標，請在新的任務定義修訂版中新增環境變數 `OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false`，並重新部署應用程式。

### EC2
<a name="AppSignals-RuntimeMetrics-Disable-EC2"></a>

若要在 Amazon EC2 應用程式中停用執行時期指標，請在應用程式啟動之前新增環境變數 `OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED=false`。

### Kubernetes
<a name="AppSignals-RuntimeMetrics-Disable-Kubernetes"></a>

若要在應用程式層級停用 Kubernetes 應用程式中的執行時期指標，請將下列環境變數新增至工作負載規格。

```
env:
    - name: OTEL_AWS_APPLICATION_SIGNALS_RUNTIME_ENABLED 
      value: "false"
```

若要在叢集層級停用 Kubernetes 應用程式中的執行時期指標，請使用下列項目：

```
helm upgrade ... \
--set-string manager.autoInstrumentationConfiguration.java.runtime_metrics.enabled=false \
--set-string manager.autoInstrumentationConfiguration.python.runtime_metrics.enabled=false \
-\-set-string manager.autoInstrumentationConfiguration.dotnet.runtime_metrics.enabled=false
```