

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

使用 CloudWatch Application Signals 自动检测 Amazon 上的应用程序，以便根据业务目标跟踪应用程序性能。Application Signals 为您提供统一的、以应用程序为中心的视图，包括您的 Java 应用程序、其依赖项和边缘。有关更多信息，请参阅 [Application Signals](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) 中所述。
+ 对于 RedHat for OpenShift on Amazon (ROSA)，当您使用 Helm 图表安装 CloudWatch 代理 operator 时，CloudWatch 代理默认启用，可从自动检测的应用程序接收指标和跟踪信息。如果想选择性地传递自定义配置规则，可以使用 Helm 图表传入自定义代理配置，如[（可选）其他配置](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 和针对 Amazon EKS 增强了可观测性的 Container Insights。
**注意**  
以前，此部分还用于指定代理将收集采用嵌入式指标格式的日志。不再需要这些设置。
    + `application_signals`（可选）：指定您要启用 CloudWatch Application Signals 以接收来自自动检测的应用程序的指标，以促进 CloudWatch Application Signals。
      + `rules`（可选）：一组规则，用于有条件地选择指标和跟踪，并应用操作来应对高基数场景。每个规则都可以包含以下字段：
        + `rule_name`（可选）：规则的名称。
        + `selectors`（可选）：一组指标和跟踪维度匹配程序。每个选择器必须提供以下字段：
          + `dimension`（如果 `selectors` 不为空，则为必填项）：这指定了用作筛选条件的指标和跟踪信息的维度。
          + `match`（如果 `selectors` 不为空，则为必填项）：用于匹配指定维度的值的通配符模式。
        + `action`（可选）：要应用于与指定选择器匹配的指标和跟踪的操作。`action` 的值必须是以下关键字之一：
          + `keep` 指定仅将 `selectors` 匹配的指标和跟踪发送到 CloudWatch。
          + `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`、`ms`、`us` 和 `ns`。`1h` 的默认值为 1 小时。
        + `log_dropped_metrics`（可选）指定删除 Application Signals 指标时代理是否应将日志写入 CloudWatch 代理日志。默认值为 `false`。
**注意**  
要激活此日志记录，还必须将 `agent` 部分中的 `debug` 参数设置为 `true`。
+ `traces`
  + `traces_collected`
    + `application_signals` 可选：指定此项可让 CloudWatch 代理接收来自您的自动检测应用程序的跟踪，从而促进 CloudWatch Application Signals。

**注意**  
尽管自定义 `application_signals` 规则是在 `logs` 部分中包含的 `metrics_collected` 部分下指定的，但也隐含地应用于 `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 /owners`、维度 `RemoteOperation` 为 `PUT /api/customer/owners/*/pets/*` 的指标和跟踪，其 `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": {}
            }
        }
    }
}
```