

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

# 啟用 CloudWatch Application Signals
<a name="CloudWatch-Agent-Application_Signals"></a>

使用 CloudWatch Application Signals 自動檢測您的應用程式， AWS 以便您可以根據業務目標追蹤應用程式效能。Application Signals 為您提供 Java 應用程式、其相依性及其優勢的統一、以應用程式為中心的檢視。如需詳細資訊，請參閱[應用程式訊號](CloudWatch-Application-Monitoring-Sections.md)。

CloudWatch Application Signals 利用 CloudWatch 代理程式從自動檢測的應用程式中接收指標和追蹤，選擇性地套用規則以降低高基數，然後將處理過的遙測資料發布到 CloudWatch。可以使用代理程式組態檔案，為 CloudWatch 代理程式提供專門針對 Application Signals 的自訂組態。首先，代理程式組態檔案的 `logs` 區段內的 `metrics_collected` 區段下方會顯示 `application_signals` 區段，指定 CloudWatch 代理程式將從您的自動檢測應用程式中接收指標。同樣，代理程式組態檔案的 `traces` 區段內的 `traces_collected` 區段下方會顯示 `application_signals` 區段，指定 CloudWatch 代理程式可從您的自動檢測應用程式中接收追蹤。此外，您可以選擇性地傳遞自訂組態規則，以減少發布本節所述的高基數遙測。
+ 對於 Amazon EKS 叢集，當您安裝 [Amazon CloudWatch Observability](install-CloudWatch-Observability-EKS-addon.md) EKS 附加元件時，預設會啟用 CloudWatch 代理程式，以便從您的自動檢測應用程式中接收指標和追蹤。如果您想要選擇性地傳遞自訂組態規則，可以在建立或使用其他組態更新 Amazon EKS 附加元件時，在自訂代理程式組態中傳遞至該附加元件來實現，如 [(選用) 額外組態](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) 中所述。
+ 對於適用於 OpenShift on AWS (ROSA) 的 RedHat，當您使用 Helm Chart 安裝 CloudWatch 代理程式運算子時，CloudWatch 代理程式預設為啟用，以接收來自自動檢測應用程式的指標和追蹤。如果您想要選擇性地傳遞自訂組態規則，可以使用 Helm Chart 在自訂代理程式組態中傳遞，如 [(選用) 額外組態](install-CloudWatch-Observability-EKS-addon.md#install-CloudWatch-Observability-EKS-addon-configuration) 中所述。
+ 對於包括 Amazon EC2 在內的其他支援平台，必須使用代理程式組態來啟動 CloudWatch 代理程式，它可透過指定 `application_signals` 區段以及本節稍後所述的任何自訂組態規則來啟用 Application Signals。

以下是 CloudWatch 代理程式組態檔案中與 CloudWatch Application Signals 相關的欄位概觀。
+ `logs`
  + `metrics_collected` – 此欄位包含若干區段，用於指定代理程式來收集日誌，以啟用 CloudWatch Application Signals 和 Container Insights 等使用案例，它們具有 Amazon EKS 的增強可觀測性。
**注意**  
之前，此區段也用於指定代理程式來收集採用內嵌指標格式的日誌。不再需要這些設定。
    + `application_signals`(選用) 指定您要啟用 CloudWatch Application Signals，以便從自動檢測的應用程式中接收指標，從而提升 CloudWatch Application Signals。
      + `rules` (選用) 規則陣列，用於有條件地選取指標和追蹤，並套用動作以處理高基數案例。每個規則可以包含下列欄位：
        + `rule_name` (選用) 規則的名稱。
        + `selectors` (選用) 一組指標和追蹤維度比對器。每個選取器都必須提供下列欄位：
          + `dimension` 如果 `selectors` 不為空，則為必填欄位。這會指定要用作篩選條件的指標和追蹤維度。
          + `match` 如果 `selectors` 不為空，則為必填欄位。用於比對指定的維度值的萬用字元模式。
        + `action` (選用) 要套用至符合指定選取器之指標和追蹤的動作。`action` 的值必須是下列其中一個關鍵字：
          + `keep` 指定僅將指標和追蹤傳送至 CloudWatch (如果與 `selectors` 相符)。
          + `drop` 指定丟棄與 `selectors` 相符的指標和追蹤。
          + `replace` 指定取代與 `selectors` 相符的指標和追蹤維度。它們根據 `replacements` 部分進行取代。
        + `replacements` 在 `action` 為 `replace` 時需要。當 `action` 為 `replace` 時，維度和值對陣列將套用至符合指定 `selectors` 的指標和追蹤。每個取代都必須提供下列欄位：
          + `target_dimension` 如果 `replacements` 不為空，則為必填欄位。指定需要取代的維度。
          + `value` 如果 `replacements` 不為空，則為必填欄位。用來取代 `target_dimension` 原始值的值。
      + `limiter` (選用) 參考本節來限制 Application Signals 傳送至 CloudWatch 的指標和維度，以最佳化您的成本。
        + `disabled` (選用) 如果為 `true`，系統會停用指標限制功能。預設為 `false`。
        + `drop_threshold` (選用) 一個 CloudWatch 代理程式可在一個輪換間隔內匯出之每個服務的不同指標數目上限。預設值為 500。
        + `rotation_interval` (選用) 限制器為差異計數重設指標記錄的間隔。以字串表示，其中包含一系列數字和單位尾碼。支援分數。支援的單位尾碼為 `s`、`m`、`h`、`us`、 `ms`和 `ns`。一小時的預設值為 `1h`。
        + `log_dropped_metrics` (選用) 指定在捨棄 Application Signals 指標時，代理程式是否應將日誌寫入 CloudWatch 代理程式日誌。預設值為 `false`。
**注意**  
若要啟用此記錄，`agent` 區段中的 `debug` 參數也必須設定為 `true`。
+ `traces`
  + `traces_collected`
    + `application_signals` 選用。指定此選項可讓 CloudWatch 代理程式從您的自動檢測應用程式中接收追蹤，以便提升 CloudWatch Application Signals。

**注意**  
即使在 `logs` 區段中所包含的 `metrics_collected` 區段下指定自訂 `application_signals` 規則，它們也會隱式地套用至 `traces_collected` 區段。相同的規則集將套用至指標和追蹤。

當有多個具有不同動作的規則時，它們會依照下列順序套用：`keep`、`drop`、然後 `replace`。

以下是套用自訂規則的完整 CloudWatch 代理程式組態檔案範例。

```
{
  "logs": {
    "metrics_collected": {
      "application_signals": {
        "rules": [
          {
            "rule_name": "keep01",
            "selectors": [
              {
                "dimension": "Service",
                "match": "pet-clinic-frontend"
              },
              {
                "dimension": "RemoteService",
                "match": "customers-service"
              }
            ],
            "action": "keep"
          },
          {
            "rule_name": "drop01",
            "selectors": [
              {
                "dimension": "Operation",
                "match": "GET /api/customer/owners/*"
              }
            ],
            "action": "drop"
          },
          {
            "rule_name": "replace01",
            "selectors": [
              {
                "dimension": "Operation",
                "match": "PUT /api/customer/owners/*/pets/*"
              },
              {
                "dimension": "RemoteOperation",
                "match": "PUT /owners"
              }
            ],
            "replacements": [
              {
                "target_dimension": "Operation",
                "value": "PUT /api/customer/owners/{ownerId}/pets{petId}"
              }
            ],
            "action": "replace"
          }
        ]
      }
    }
  },
  "traces": {
    "traces_collected": {
      "application_signals": {}
    }
  }
}
```

對於上一個範例組態檔案，`rules` 會按如下方式處理：

1. 規則 `keep01` 可確保維度 `Service` 為 `pet-clinic-frontend` 和維度 `RemoteService` 為 `customers-service` 的任何指標和追蹤被保留。

1. 對於套用 `keep01` 後已處理的指標和追蹤，`drop01` 規則可確保捨棄維度 `Operation` 為 `GET /api/customer/owners/*` 的指標和追蹤。

1. 對於套用 `drop01` 後已處理的指標和追蹤，`replace01` 規則會更新維度 `Operation` 為 `PUT /api/customer/owners/*/pets/*` 和維度 `RemoteOperation` 為 `PUT /owners` 的指標和追蹤，而它們的 `Operation` 維度現在會被取代為 `PUT /api/customer/owners/{ownerId}/pets{petId}`。

以下是 CloudWatch 設定檔的完整範例，可透過將指標限制變更為 100、啟用被捨棄指標的記錄，並將輪換間隔設定為兩小時來管理 Application Signals 中的基數。

```
{
    "logs": {
        "metrics_collected": {
            "application_signals": {
                "limiter": {
                    "disabled": false,
                    "drop_threshold": 100,
                    "rotation_interval": "2h",
                    "log_dropped_metrics": true
                }
            }
        },
        "traces": {
            "traces_collected": {
                "application_signals": {}
            }
        }
    }
}
```