

# 手动创建或编辑 CloudWatch 代理配置文件
<a name="CloudWatch-Agent-Configuration-File-Details"></a>

 CloudWatch 代理配置文件是一个 JSON 文件，其中包含四个部分：`agent`、`metrics`、`logs` 和 `traces`。
+ `agent` 部分包含总体代理配置的字段。
+ `metrics` 部分指定要收集并发布到 CloudWatch 的自定义指标。如果只将代理用于收集日志，则可以忽略文件中的 `metrics` 部分。
+ `logs` 部分指定要将哪些日志文件发布到 CloudWatch Logs。如果服务器运行 Windows Server，这可能包括 Windows 事件日志中的事件。
+ `traces` 部分指定收集并发送到 Amazon X-Ray 的跟踪信息的来源。

 本节介绍 CloudWatch 代理配置文件的结构和字段。您可以查看此配置文件的架构定义。在 Linux 服务器上，架构定义位于 `installation-directory/doc/amazon-cloudwatch-agent-schema.json` 中；在运行 Windows Server 的服务器上，架构定义位于 `installation-directory/amazon-cloudwatch-agent-schema.json` 中。

如果手动创建或编辑 代理配置文件，则可以给它指定任何名称。为了简化故障排除，我们建议您在 Linux 服务器上将其命名为 `/opt/aws/amazon-cloudwatch-agent/etc/cloudwatch-agent.json`，在运行 Windows Server 的服务器上将其命名为 `$Env:ProgramData\Amazon\AmazonCloudWatchAgent\amazon-cloudwatch-agent.json`。创建该文件后，您可以将其复制到要安装代理的其他服务器上。

启动代理后，它会在 `/opt/aws/amazon-cloudwatch/etc/amazon-cloudwatch-agent.d` 目录中创建每个配置文件的副本，文件名以 `file_`（对于本地文件源）或 `ssm_`（对于 Systems Manager 参数存储源）为前缀，以指示配置来源。

**注意**  
CloudWatch 代理收集的指标、日志和跟踪记录会产生费用。有关定价的更多信息，请参阅 [Amazon CloudWatch 定价](https://www.amazonaws.cn/cloudwatch/pricing)。

## CloudWatch 代理配置文件：Agent 部分
<a name="CloudWatch-Agent-Configuration-File-Agentsection"></a>

`agent` 部分包含以下字段。向导不会创建 `agent` 部分。相反，向导忽略该部分，并在该部分的所有字段中使用默认值。
+ `metrics_collection_interval` – 可选。指定该配置文件中指定的所有指标的收集频率。您可以为特定类型的指标覆盖该值。

  该值是以秒为单位指定的。例如，指定 10 将导致每 10 秒收集一次指标；将其设置为 300，将指定每 5 分钟收集一次指标。

  如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。

  默认值是 60。
+ `region` – 指定在监控 Amazon EC2 实例时用于 CloudWatch 端点的区域。收集的指标将发送到该区域，例如，`us-west-1`。如果省略该字段，则该代理将指标发送到 Amazon EC2 实例所在的区域。

  如果监控本地服务器，则不使用该字段，该代理从 Amazon 配置文件的 `AmazonCloudWatchAgent` 配置文件中读取区域。
+ `credentials` – 指定一个在向不同 Amazon 账户发送指标、日志和跟踪信息时使用的 IAM 角色。如果指定，则此字段包含一个参数 `role_arn`。
  + `role_arn` – 指定一个在向不同 Amazon 账户发送指标、日志和跟踪信息时用于身份验证的 IAM 角色的 Amazon 资源名称（ARN）。有关更多信息，请参阅 [向不同账户发送指标、日志和跟踪信息](CloudWatch-Agent-common-scenarios.md#CloudWatch-Agent-send-to-different-AWS-account)。
+ `debug` – 可选。指定使用调试日志消息运行 CloudWatch 代理。默认值为 `false`。
+ `aws_sdk_log_level` – 可选。仅在 CloudWatch 代理版本 1.247350.0 及更高版本中受支持。

  您可以将此字段指定为以让代理为 Amazon SDK 终端节点执行日志记录。此字段的值可以包括以下一个或多个选项。使用 `|` 字符分隔多个选项。
  + `LogDebug`
  + `LogDebugWithSigning`
  + `LogDebugWithHTTPBody`
  + `LogDebugRequestRetries`
  + `LogDebugWithEventStreamBody`

  有关这些选项的更多信息，请参阅 [LogLevelType](https://docs.amazonaws.cn/sdk-for-go/api/aws/#LogLevelType)。
+ `logfile` – 指定 CloudWatch 代理将日志消息写入到的位置。如果指定空字符串，则将日志传输到 stderr。如果未指定该选项，则默认位置如下所示：
  + Linux：`/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log`
  + Windows Server：`c:\\ProgramData\\Amazon\\CloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log`

  CloudWatch 代理自动轮换它创建的日志文件。在日志文件大小达到 100 MB 时，将会轮换掉该文件。代理将轮换的日志文件最多保留七天，并最多保留五个轮换掉的备份日志文件。备份日志文件的文件名后附有时间戳。时间戳显示轮换掉文件的日期和时间，例如，`amazon-cloudwatch-agent-2018-06-08T21-01-50.247.log.gz`。
+ `omit_hostname` – 可选。默认情况下，主机名将作为代理收集的指标维度进行发布（除非您使用 `metrics` 部分的 `append_dimensions` 字段）。将 `omit_hostname ` 设置为 `true`，以禁止将主机名作为维度进行发布（即使在您没有使用 `append_dimensions` 的情况下）。默认值为 `false`。
+ `run_as_user` – 可选。指定用于运行 CloudWatch 代理的用户。如果未指定该参数，则使用 root 用户。该选项仅在 Linux 服务器上有效。

  如果指定该选项，在启动 CloudWatch 代理之前，用户必须存在。有关更多信息，请参阅 [以不同用户身份运行 CloudWatch 代理](CloudWatch-Agent-common-scenarios.md#CloudWatch-Agent-run-as-user)。
+ `user_agent` – 可选。指定 `user-agent` 字符串，该字符串由 CloudWatch 代理在 CloudWatch 后端进行 API 调用时使用。默认值是由代理版本、用于编译代理的 Go 编程语言版本、运行时操作系统和架构、构建时间以及启用的插件组成的字符串。
+ `usage_data`：可选。默认情况下，每当向 CloudWatch 发布指标或日志时，CloudWatch 代理都会向 CloudWatch 发送自身的运行状况和性能数据。这些数据不会产生任何费用。您可以通过将 `usage_data` 指定为 `false`，来防止代理发送这些数据。如果省略此参数，则将使用 `true` 的默认值，并且代理会发送运行状况和性能数据。

  如果将此值设置为 `false`，则必须停止并重新启动代理才能使其生效。
+ `service.name`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的服务名称。
+ `deployment.environment`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的环境名称。
+ `use_dualstack_endpoint`：可选。若设置为 `true`，CloudWatch 代理将对所有 API 调用使用[双堆栈端点](https://docs.amazonaws.cn/general/latest/gr/rande.html#dual-stack-endpoints)。

下面是 `agent` 部分的示例。

```
"agent": {
   "metrics_collection_interval": 60,
   "region": "us-west-1",
   "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
   "debug": false,
   "run_as_user": "cwagent"
  }
```

## CloudWatch 代理配置文件：Metrics（指标）部分
<a name="CloudWatch-Agent-Configuration-File-Metricssection"></a>

### Linux 和 Windows 的通用字段
<a name="CloudWatch-Agent-Common"></a>

在运行 Linux 或 Windows Server 的服务器上，`metrics` 部分包含以下字段：
+ `namespace` – 可选。用于该代理收集的指标的命名空间。默认值为 `CWAgent`。最大长度为 255 个字符。以下是示例：

  ```
  {
    "metrics": {
      "namespace": "Development/Product1Metrics",
     ......
     },
  }
  ```
+ `append_dimensions` – 可选。将 Amazon EC2 指标维度添加到该代理收集的所有指标中。这也会导致代理不会将主机名作为维度发布。

  以下列表中显示了受 `append_dimensions` 支持的键值对。任何其他密钥值对都将被忽略。代理支持与下表所列完全一致的键值对。您无法通过更改键值来发布其他维度名称。
  + `"ImageId":"${aws:ImageId}"` 将实例的 AMI ID 设置为 `ImageId` 维度的值。
  + `"InstanceId":"${aws:InstanceId}"` 将实例的实例 ID 设置为 `InstanceId` 维度的值。
  + `"InstanceType":"${aws:InstanceType}"` 将实例的实例类型设置为 `InstanceType` 维度的值。
  + `"AutoScalingGroupName":"${aws:AutoScalingGroupName}"` 将实例的 Auto Scaling 组名称设置为 `AutoScalingGroupName` 维度的值。

  如果您想将维度附加到具有任意键值对的指标，请在该字段中为该特定类型的指标使用 `append_dimensions` 参数。

  如果您指定一个值（该值取决于 Amazon EC2 元数据），并且使用代理，则必须确保服务器能够访问 Amazon EC2 的端点。有关这些端点的更多信息，请参阅 *Amazon Web Services 一般参考* 中的 [Amazon Elastic Compute Cloud（Amazon EC2）](https://docs.amazonaws.cn/general/latest/gr/rande.html#ec2_region)。
+ `aggregation_dimensions` – 可选。指定所收集的指标要在其上聚合的维度。例如，如果累积 `AutoScalingGroupName` 维度上的指标，则会汇总每个 Auto Scaling 组的所有实例中的指标，并将这些指标作为一个整体进行查看。

  您可以累积一个或多个维度的指标。例如，指定 `[["InstanceId"], ["InstanceType"], ["InstanceId","InstanceType"]]` 将单独汇总实例 ID 的指标，单独汇总实例类型的指标以及汇总两个维度组合的指标。

  您也可以指定 `[]` 以将所有指标累积到一个集合中，而不考虑任何维度。
+ `endpoint_override` – 指定一个 FIPS 终端节点或私有链接，以用作代理在其中发送指标的端点。如果指定此项并设置私有链接，您可以将指标发送到 Amazon VPC 终端节点。有关更多信息，请参阅 [Amazon VPC 是什么？](https://docs.amazonaws.cn/vpc/latest/userguide/what-is-amazon-vpc.html)。

  `endpoint_override` 的值必须是表示 URL 的字符串。

  例如，在配置文件的指标部分中，以下内容将代理设置为在发送指标时使用 VPC 终端节点。

  ```
  {
    "metrics": {
      "endpoint_override": "vpce-XXXXXXXXXXXXXXXXXXXXXXXXX.monitoring.us-east-1.vpce.amazonaws.com",
     ......
     },
  }
  ```
+ `metrics_collected` – 必需。指定要收集的指标，包括通过 `StatsD` 或 `collectd` 收集的自定义指标。该部分包含几个小节。

  `metrics_collected` 部分的内容取决于该配置文件适用于运行 Linux 还是 Windows Server 的服务器。
+ `metrics_destinations`：可选。为 `metrics_collected` 中定义的所有指标指定一个或多个目标。如果在此处指定，将覆盖 `cloudwatch` 的默认目标。
  + `cloudwatch` – Amazon CloudWatch。
  + `amp` – Amazon Managed Service for Prometheus。
    + `workspace_id` – 与 Amazon Managed Service for Prometheus 工作区对应的 ID。

  ```
  {
    "metrics": {
      "metrics_destinations": {
        "cloudwatch": {},
        "amp": {
          "workspace_id": "ws-abcd1234-ef56-7890-ab12-example"
        }
      }
    }
  }
  ```
+ `force_flush_interval` – 以秒为单位指定指标在发送到服务器之前保留在内存缓冲区中的最大时间量。无论此处的设置如何，如果缓冲区中的指标大小达到 1MB 或 1000 个不同的指标，这些指标会立即发送到服务器。

  默认值是 60。
+ `credentials` – 指定一个在向不同账户发送指标时使用的 IAM 角色。如果指定，则此字段包含一个参数 `role_arn`。
  + `role_arn` – 指定一个在向不同账户发送指标时用于身份验证的 IAM 角色的 ARN。有关更多信息，请参阅 [向不同账户发送指标、日志和跟踪信息](CloudWatch-Agent-common-scenarios.md#CloudWatch-Agent-send-to-different-AWS-account)。如果在此指定，该值将覆盖在配置文件的 `agent` 部分指定的 `role_arn`（如果有）。
  + `service.name`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的服务名称。
  + `deployment.environment`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的环境名称。

### Linux 部分
<a name="CloudWatch-Agent-Linux-section"></a>

在运行 Linux 的服务器上，配置文件的 `metrics_collected` 部分可能还包含以下字段。

其中的很多字段可能包含 `measurement` 部分，其中列出您要为该资源收集的指标。这些 `measurement` 部分可能指定了完整的指标名称（如 `swap_used`），也可能仅指定将附加到资源类型的指标名称部分。例如，如果在 `diskio` 部分的 `measurement` 部分中指定 `reads`，则会导致收集 `diskio_reads` 指标。
+ `collectd` – 可选。指定要使用 `collectd` 协议检索自定义指标。您可以使用 `collectd` 软件将指标发送到 CloudWatch 代理。有关可用于 collectd 的配置选项的更多信息，请参阅 [使用 collectd 检索自定义指标](CloudWatch-Agent-custom-metrics-collectd.md)。
+ `cpu` – 可选。指定要收集的 CPU 指标。该部分仅适用于 Linux 实例。您必须对任何要收集的 CPU 指标至少包含 `resources` 和 `totalcpu` 字段之一。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `resources`：可选。利用值 `*` 指定此字段会使系统收集每个 CPU 的指标。唯一允许的值为 `*`。
  + `totalcpu`：可选。指定是否报告所有 CPU 内核的汇总 CPU 指标。默认值为 true。
  + `measurement` – 指定一组要收集的 CPU 指标。可能的值为 `time_active`、`time_guest`、`time_guest_nice`、`time_idle`、`time_iowait`、`time_irq`、`time_nice`、`time_softirq`、`time_steal`、`time_system`、`time_user`、`usage_active`、`usage_guest`、`usage_guest_nice`、`usage_idle`、`usage_iowait`、`usage_irq`、`usage_nice`、`usage_softirq`、`usage_steal`、`usage_system` 和 `usage_user`。如果包含 `cpu`，则该字段是必需的。

    默认情况下，`cpu_usage_*` 指标的单位是 `Percent`，`cpu_time_*` 指标没有单位。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `metrics_collection_interval`：可选。指定收集 CPU 指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。例如，指定 10 将导致每 10 秒收集一次指标；将其设置为 300，将指定每 5 分钟收集一次指标。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions`：可选。仅用于 CPU 指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的全局 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。
+ `disk`：可选。指定要收集的磁盘指标。仅收集已装入卷的指标。该部分仅适用于 Linux 实例。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `resources`：可选。指定一组磁盘装载点。该字段将 CloudWatch 限制为仅从列出的挂载点中收集指标。您可以指定 `*` 值以从所有装载点中收集指标。默认值为从所有装载点中收集指标。
  + `measurement` – 指定一组要收集的磁盘指标。可能的值为 `free`、`total`、`used`、`used_percent`、`inodes_free`、`inodes_used` 和 `inodes_total`。如果包含 `disk`，则该字段是必需的。
**注意**  
`disk` 指标具有一个用于 `Partition` 的维度 ，这意味着生成的自定义指标的数量取决于与您的实例关联的分区数量。您拥有的磁盘分区数取决于您使用的 AMI 以及您附加到服务器的 Amazon EBS 卷数。

    要查看每个 `disk` 指标的默认单位，请参阅[Linux 和 macOS 实例上的 CloudWatch 代理收集的指标](metrics-collected-by-CloudWatch-agent.md#linux-metrics-enabled-by-CloudWatch-agent)。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的 `None` 默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `ignore_file_system_types` – 指定在收集磁盘指标时要排除的文件系统类型。有效值包括 `sysfs`、`devtmpfs` 等等。
  + `drop_device` – 将其设置为 `true` 会导致 `Device` 不会作为磁盘指标的维度被包括在内。

    对于使用 Nitro 系统的实例来说，防止 `Device` 被用作维度非常有用，因为在这些实例上，当实例重新启动时，每个磁盘装载的设备名称都会发生变化。这可能会导致指标中的数据不一致，并导致基于这些指标的警报变成 `INSUFFICIENT DATA` 状态。

    默认值为 `false`。
  + `metrics_collection_interval`：可选。指定收集磁盘指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions` – 可选。指定仅用作磁盘指标附加维度的键值对。如果指定该字段，除了用于该代理收集的所有类型的指标的 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。

    您可以使用的一个键值对如下。您还可以指定其他自定义键值对。
    + `"VolumeId":"${aws:VolumeId}"` 为您的块设备磁盘指标添加了 `VolumeId` 维度。对于 Amazon EBS 卷，此项将为 Amazon EBS 卷 ID。对于 EC2 实例存储，此项将为设备序列号。使用此项需要将 `drop_device` 参数设置为 `false`。
+ `diskio`：可选。指定要收集的磁盘 I/O 指标。该部分仅适用于 Linux 实例。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `resources`：可选。如果指定一组设备，CloudWatch 仅从这些设备中收集指标。否则，将收集所有设备的指标。也可以指定 \$1 值以从所有设备中收集指标。
  + `measurement`：指定要为 Amazon EBS 卷和挂载于 Amazon EC2 实例之实例存储卷收集的一组 diskio 和 Amazon NVMe 驱动指标。可能的 diskio 值为：`reads`、`writes`、`read_bytes`、`write_bytes`、`read_time`、`write_time`、`io_time` 和 `iops_in_progress`。有关 Amazon EBS 卷和 Amazon EC2 实例存储卷的 NVMe 驱动指标列表，请参阅[收集 Amazon EBS NVMe 驱动指标](Container-Insights-metrics-EBS-Collect.md)和[收集 Amazon EC2 实例存储卷 NVMe 驱动指标](Container-Insights-metrics-instance-store-Collect.md)。如果包含 `diskio`，则该字段是必需的。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的 `None` 默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。

    如需默认单位的信息和指标描述，请参阅 [收集 Amazon EBS NVMe 驱动指标](Container-Insights-metrics-EBS-Collect.md)。
  + `metrics_collection_interval`：可选。指定收集磁盘 I/O 指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions`：可选。仅用于磁盘 I/O 指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。
+ `swap`：可选。指定要收集的交换内存指标。该部分仅适用于 Linux 实例。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `measurement` – 指定一组要收集的交换内存指标。可能的值为 `free`、`used` 和 `used_percent`。如果包含 `swap`，则该字段是必需的。

    要查看每个 `swap` 指标的默认单位，请参阅[Linux 和 macOS 实例上的 CloudWatch 代理收集的指标](metrics-collected-by-CloudWatch-agent.md#linux-metrics-enabled-by-CloudWatch-agent)。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的 `None` 默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `metrics_collection_interval`：可选。指定收集交换内存指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions`：可选。仅用于交换内存指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的全局 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。这是作为高精度指标收集的。
+ `mem`：可选。指定要收集的内存指标。该部分仅适用于 Linux 实例。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `measurement` – 指定一组要收集的内存指标。可能的值为 `active`、`available`、`available_percent`、`buffered`、`cached`、`free`、`inactive`、`shared`、`total`、`used` 和 `used_percent`。如果包含 `mem`，则该字段是必需的。

    要查看每个 `mem` 指标的默认单位，请参阅[Linux 和 macOS 实例上的 CloudWatch 代理收集的指标](metrics-collected-by-CloudWatch-agent.md#linux-metrics-enabled-by-CloudWatch-agent)。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `metrics_collection_interval`：可选。指定收集内存指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions`：可选。仅用于内存指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。
+ `net`：可选。指定要收集的每个联网指标。该部分仅适用于 Linux 实例。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `resources`：可选。如果指定一组网络接口，CloudWatch 仅从这些接口中收集指标。否则，将收集所有设备的指标。也可以指定 `*` 值以从所有接口中收集指标。
  + `measurement` – 指定一组要收集的联网指标。可能的值为 `bytes_sent`、`bytes_recv`、`drop_in`、`drop_out`、`err_in`、`err_out`、`packets_sent` 和 `packets_recv`。如果包含 `net`，则该字段是必需的。

    要查看每个 `net` 指标的默认单位，请参阅[Linux 和 macOS 实例上的 CloudWatch 代理收集的指标](metrics-collected-by-CloudWatch-agent.md#linux-metrics-enabled-by-CloudWatch-agent)。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `metrics_collection_interval`：可选。指定收集网络指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。例如，指定 10 将导致每 10 秒收集一次指标；将其设置为 300，将指定每 5 分钟收集一次指标。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions`：可选。仅用于网络指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。
+ `netstat`：可选。指定收集 TCP 连接状态和 UDP 连接指标。该部分仅适用于 Linux 实例。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `measurement` – 指定一组要收集的网络状态指标。可能的值为 `tcp_close`、`tcp_close_wait`、`tcp_closing`、`tcp_established`、`tcp_fin_wait1`、`tcp_fin_wait2`、`tcp_last_ack`、`tcp_listen`、`tcp_none`、`tcp_syn_sent`、`tcp_syn_recv`、`tcp_time_wait` 和 `udp_socket`。如果包含 `netstat`，则该字段是必需的。

    要查看每个 `netstat` 指标的默认单位，请参阅[Linux 和 macOS 实例上的 CloudWatch 代理收集的指标](metrics-collected-by-CloudWatch-agent.md#linux-metrics-enabled-by-CloudWatch-agent)。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `metrics_collection_interval`：可选。指定收集网络状态指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关高精度指标的更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions`：可选。仅用于网络状态指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。
+ `processes`：可选。指定要收集的进程指标。该部分仅适用于 Linux 实例。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `measurement` – 指定一组要收集的进程指标。可能的值为 `blocked`、`dead`、`idle`、`paging`、`running`、`sleeping`、`stopped`、`total`、`total_threads`、`wait` 和 `zombies`。如果包含 `processes`，则该字段是必需的。

    对于所有 `processes` 指标，默认单位为 `None`。

    在每个指标的条目中，您可以选择指定下面的一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `metrics_collection_interval`：可选。指定收集进程指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

    该值是以秒为单位指定的。例如，指定 10 将导致每 10 秒收集一次指标；将其设置为 300，将指定每 5 分钟收集一次指标。

    如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
  + `append_dimensions` – 可选。仅用于进程指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。
+ `nvidia_gpu`：可选。指定要收集的 NVIDIA GPU 指标。本部分仅适用于配置了 NVIDIA GPU 加速器并安装了 NVIDIA 系统管理界面（nvidia-smi）的主机上的 Linux 实例。

  收集的 NVIDIA GPU 指标以字符串 `nvidia_smi_` 作为前缀以与收集的其他加速器类型的指标进行区分。此部分包含以下字段：
  + `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。
  + `measurement` – 指定一组要收集的 NVIDIA GPU 指标。有关此处可能使用的值的列表，请参阅 [收集 NVIDIA GPU 指标](CloudWatch-Agent-NVIDIA-GPU.md) 表中的**指标**列。

    在每个指标的条目中，您可以选择指定以下一个或两个字段：
    + `rename` – 为该指标指定不同的名称。
    + `unit` – 指定用于该指标的单位，从而覆盖该指标的默认单位 `None`。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。
  + `metrics_collection_interval`：可选。指定收集 NVIDIA GPU 指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。
+ `jmx`：可选。指定您想要从实例中检索 Java 管理扩展（JMX）指标。有关本节中的可使用参数以及可收集指标的更多信息，请参阅[收集 Java 管理扩展（JMX）指标](CloudWatch-Agent-JMX-metrics.md)。
+  `otlp`：可选。指定您想要从 OpenTelemetry SDK 收集指标。有关本节中可使用字段的更多信息，请参阅[使用 OpenTelemetry 收集指标和跟踪](CloudWatch-Agent-OpenTelemetry-metrics.md)。
+ `procstat`：可选。指定您希望从各个流程检索指标。有关可用于 procstat 的配置选项的更多信息，请参阅 [使用 procstat 插件收集流程指标](CloudWatch-Agent-procstat-process-metrics.md)。
+ `statsd` – 可选。指定要使用 `StatsD` 协议检索自定义指标。CloudWatch 代理充当协议的守护进程。您可以使用任何标准 `StatsD` 客户端将指标发送到 CloudWatch 代理。有关可用于 StatsD 的配置选项的更多信息，请参阅 [使用 StatsD 检索自定义指标](CloudWatch-Agent-custom-metrics-statsd.md)。
+ `ethtool` – 可选。指定要使用 `ethtool` 插件检索网络指标。此插件可以导入标准 ethtool 实用工具收集的指标，以及 Amazon EC2 实例中的网络性能指标。有关可用于 ethtool 的配置选项的更多信息，请参阅 [收集网络性能指标](CloudWatch-Agent-network-performance.md)。

下面是一个适用于 Linux 服务器的 `metrics` 部分示例。在此示例中，会收集三个 CPU 指标、三个 netstat 指标、三个流程指标和一个磁盘指标，并将代理设置为从 `collectd` 客户端接收其他指标。

```
"metrics": {
    "aggregation_dimensions" : [["AutoScalingGroupName"], ["InstanceId", "InstanceType"],[]],
    "metrics_collected": {
      "collectd": {},
      "cpu": {
        "resources": [
          "*"
        ],
        "measurement": [
          {"name": "cpu_usage_idle", "rename": "CPU_USAGE_IDLE", "unit": "Percent"},
          {"name": "cpu_usage_nice", "unit": "Percent"},
          "cpu_usage_guest"
        ],
        "totalcpu": false,
        "drop_original_metrics": [ "cpu_usage_guest" ],
        "metrics_collection_interval": 10,
        "append_dimensions": {
          "test": "test1",
          "date": "2017-10-01"
        }
      },
      "netstat": {
        "measurement": [
          "tcp_established",
          "tcp_syn_sent",
          "tcp_close"
        ],
        "metrics_collection_interval": 60
      },
       "disk": {
        "measurement": [
          "used_percent"
        ],
        "resources": [
          "*"
        ],
        "drop_device": true
      },  
      "processes": {
        "measurement": [
          "running",
          "sleeping",
          "dead"
        ]
      }
    },
    "append_dimensions": {
      "ImageId": "${aws:ImageId}",
      "InstanceId": "${aws:InstanceId}",
      "InstanceType": "${aws:InstanceType}",
      "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
    }
  }
```

### Windows Server
<a name="CloudWatch-Agent-Windows-section"></a>

在 Windows Server 的 `metrics_collected` 部分中，您可以包含每个 Windows 性能对象的小节，例如，`Memory`、`Processor` 和 `LogicalDisk`。有关可用的对象和计数器的信息，请参阅 Microsoft Windows 文档[性能计数器](https://learn.microsoft.com/en-us/windows/win32/perfctrs/performance-counters-portal)。

在每个对象的小节中，您可以指定要收集的计数器的 `measurement` 数组。需要为在配置文件中指定的每个对象指定 `measurement` 数组。您也可以指定 `resources` 字段以命名从中收集指标的实例。您还可以为 `resources` 指定 `*`，以便为每个实例收集单独的指标。如果省略具有实例的计数器的 `resources`，则所有实例的数据会聚合到一个组中。如果省略没有实例的计数器的 `resources`，CloudWatch 代理则不会收集计数器。要确定计数器是否有实例，可以使用以下命令之一。

Powershell：

```
Get-Counter -ListSet *
```

命令行（不是 Powershell）：

```
TypePerf.exe –q
```

在每个对象部分中，您还可以指定以下可选字段：
+ `metrics_collection_interval`：可选。指定为该对象收集指标的频率，从而覆盖配置文件的 `agent` 部分中指定的全局 `metrics_collection_interval`。

  该值是以秒为单位指定的。例如，指定 10 将导致每 10 秒收集一次指标；将其设置为 300，将指定每 5 分钟收集一次指标。

  如果您将该值设置为低于 60 秒，则将每个指标作为高精度指标进行收集。有关更多信息，请参阅 [高精度指标](publishingMetrics.md#high-resolution-metrics)。
+ `append_dimensions` – 可选。指定仅用于该对象的指标的其他维度。如果指定该字段，除了用于该代理收集的所有类型的指标的全局 `append_dimensions` 字段中指定的维度以外，还会使用该字段中的维度。
+ `drop_original_metrics`：可选。如果您使用 `metrics` 部分中的 `aggregation_dimensions` 字段将指标以汇总为聚合结果，则默认情况下，代理会同时发送聚合指标和原始指标，原始指标是按维度的每个值分开的。如果您不希望将原始指标发送到 CloudWatch，则可以指定此参数和指标列表。同时指定了此参数的指标将不会将其各维度的指标报告给 CloudWatch，而只报告聚合指标。这可以减少代理要采集的指标数量，从而降低成本。

在每个计数器部分中，您还可以指定以下可选字段：
+ `rename` – 指定在 CloudWatch 中用于该指标的不同名称。
+ `unit` – 指定用于该指标的单位。您指定的单位必须是有效的 CloudWatch 指标单位，如 [MetricDatum](https://docs.amazonaws.cn/AmazonCloudWatch/latest/APIReference/API_MetricDatum.html) 的 `Unit` 描述中所示。

您可以在 `metrics_collected` 中包括其他可选部分：
+ `statsd` – 让您能够使用 `StatsD` 协议检索自定义指标。CloudWatch 代理充当协议的守护进程。您可以使用任何标准 `StatsD` 客户端将指标发送到 CloudWatch 代理。有关更多信息，请参阅 [使用 StatsD 检索自定义指标](CloudWatch-Agent-custom-metrics-statsd.md)。
+ `procstat` – 让您能够从各个流程检索指标。有关更多信息，请参阅 [使用 procstat 插件收集流程指标](CloudWatch-Agent-procstat-process-metrics.md)。
+  `jmx` – 可选。指定您想要从实例中检索 Java 管理扩展（JMX）指标。有关本节中的可使用字段以及可收集指标的更多信息，请参阅[收集 Java 管理扩展（JMX）指标](CloudWatch-Agent-JMX-metrics.md)。
+  `otlp`：可选。指定您想要从 OpenTelemetry SDK 收集指标。有关本节中可使用字段的更多信息，请参阅[使用 OpenTelemetry 收集指标和跟踪](CloudWatch-Agent-OpenTelemetry-metrics.md)。

下面是一个用于 Windows Server 的 `metrics` 部分的示例。在此示例中，会收集许多 Windows 指标，并且计算机也被设置为从 `StatsD` 客户端接收其他指标。

```
"metrics": {
    "metrics_collected": {
      "statsd": {},
      "Processor": {
        "measurement": [
          {"name": "% Idle Time", "rename": "CPU_IDLE", "unit": "Percent"},
          "% Interrupt Time",
          "% User Time",
          "% Processor Time"
        ],
        "resources": [
          "*"
        ],
        "append_dimensions": {
          "d1": "win_foo",
          "d2": "win_bar"
        }
      },
      "LogicalDisk": {
        "measurement": [
          {"name": "% Idle Time", "unit": "Percent"},
          {"name": "% Disk Read Time", "rename": "DISK_READ"},
          "% Disk Write Time"
        ],
        "resources": [
          "*"
        ]
      },
      "Memory": {
        "metrics_collection_interval": 5,
        "measurement": [
          "Available Bytes",
          "Cache Faults/sec",
          "Page Faults/sec",
          "Pages/sec"
        ],
        "append_dimensions": {
          "d3": "win_bo"
        }
      },
      "Network Interface": {
        "metrics_collection_interval": 5,
        "measurement": [
          "Bytes Received/sec",
          "Bytes Sent/sec",
          "Packets Received/sec",
          "Packets Sent/sec"
        ],
        "resources": [
          "*"
        ],
        "append_dimensions": {
          "d3": "win_bo"
        }
      },
      "System": {
        "measurement": [
          "Context Switches/sec",
          "System Calls/sec",
          "Processor Queue Length"
        ],
        "append_dimensions": {
          "d1": "win_foo",
          "d2": "win_bar"
        }
      }
    },
    "append_dimensions": {
      "ImageId": "${aws:ImageId}",
      "InstanceId": "${aws:InstanceId}",
      "InstanceType": "${aws:InstanceType}",
      "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
    },
    "aggregation_dimensions" : [["ImageId"], ["InstanceId", "InstanceType"], ["d1"],[]]
    }
  }
```

## CloudWatch 代理配置文件：Logs（日志）部分
<a name="CloudWatch-Agent-Configuration-File-Logssection"></a>

`logs` 部分包含以下字段：
+ `service.name`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的服务名称。
+ `deployment.environment`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的环境名称。
+ `backpressure_mode`：可选。指定 CloudWatch 代理提取日志的速度超过其发送到 CloudWatch Logs 的速度，从而导致背压时的行为。背压可能由网络问题、API 节流或日志量过高引起。

  代理支持以下值：
  + `fd_release`：在背压情况下，释放已删除文件的文件描述符。当外部日志轮转或清理进程删除文件，而代理仍保持打开的文件描述符时，此选项有助于防止磁盘空间耗尽。`auto_removal` 选项优先于设置为 `fd_release` 的 `backpressure_mode` 选项。启用 `auto_removal` 后，CloudWatch 代理会将文件处理完毕，而不会释放文件描述符。
**重要**  
使用 `fd_release` 可能导致 CloudWatch 代理无法完整读取日志文件，从而导致日志丢失。
+ `concurrency`：可选。指定用于同时向 CloudWatch Logs 发布日志文件的共享日志发布者数量。

  如果忽略此字段，每个日志文件目标（日志组、流组合）将只有一个共享日志发布者，这可能导致处理大文件或将多个文件写入同一目标时出现瓶颈。启用并发有助于提高吞吐量。
+ `logs_collected` – 如果包含 `logs` 部分，则为必需。指定从服务器中收集的日志文件和 Windows 事件日志。它可以包含两个字段：`files` 和 `windows_events`。
  + `files` – 指定 CloudWatch 代理收集的常规日志文件。它包含一个字段 (`collect_list`)，它进一步定义这些文件。
    + `collect_list` – 如果包含 `files`，则为必需。包含一组条目，每个条目指定一个要收集的日志文件。其中的每个条目可以包含以下字段：
      + `file_path` – 指定要上传到 CloudWatch Logs 的日志文件的路径。接受标准 Unix Glob 匹配规则，并添加 `**` 以作为*超级星号*。例如，指定 `/var/log/**.log` 将导致收集 `/var/log` 目录树中的所有 `.log` 文件。有关更多示例，请参阅 [Glob 库](https://github.com/gobwas/glob)。

        您也可以使用标准星号作为标准通配符。例如，`/var/log/system.log*` 与 `/var/log` 中的 `system.log_1111`、`system.log_2222` 等文件匹配。

        根据文件修改时间，只有最新文件才会推送到 CloudWatch Logs。我们建议您使用通配符指定同一类型的一系列文件（如 `access_log.2018-06-01-01` 和 `access_log.2018-06-01-02`）而不是多个不同类型的文件（如 `access_log_80` 和 `access_log_443`）。要指定多个类型的文件，请向代理配置文件再添加一个日志流条目，让每种日志文件都转到不同的日志流。
      + `auto_removal`：可选。如果该值为 `true`，且此日志文件已经轮换，则 CloudWatch 代理会在读取到该文件后自动将其删除。通常，日志文件将其在全部内容上传到 CloudWatch Logs 后被删除，但如果代理到达 EOF（文件末尾）并同时检测到其他具有相同 `file_path` 的新日志文件，则代理将删除旧文件，因此，您必须确保您已在创建新文件前完成对旧文件的写入。[RUST 跟踪库](https://docs.rs/tracing/latest/tracing/)存在已知的不兼容性，因为它可能会在创建一个新的日志文件后，仍尝试写入旧的日志文件。

        代理仅从创建多个文件的日志中删除完整的文件，例如为每个日期创建单独文件的日志。如果日志连续写入单个文件，则不会删除该日志。

        如果您已经有轮换或删除日志文件的方法，建议您忽略此字段或者将其设置为 `false`。

        如果省略该字段，则使用 `false` 的默认值。
      + `log_group_name`：可选。指定要在 CloudWatch Logs 中使用的日志组名称。

        我们建议您使用此字段指定日志组，以防混淆。如果您省略 `log_group_name`，系统会将最后一个点之前的 `file_path` 的值作为日志组名称。例如，如果文件路径为 `/tmp/TestLogFile.log.2017-07-11-14`，则日志组名称为 `/tmp/TestLogFile.log`。

        如果您指定日志组名称，您可以使用 `{instance_id}`、`{hostname}`、`{local_hostname}` 和 `{ip_address}` 作为名称中的变量。`{hostname}` 会从 EC2 元数据中检索主机名，`{local_hostname}` 会使用网络配置文件中的主机名。

        如果使用这些变量创建许多不同的日志组，请记住每个区域每个账户存在 1000000 个日志组的限制。

        允许的字符包括 a–z、A–Z、0–9、“\$1”（下划线）、“-”（连字符）、“/”（正斜杠）和“.”（句点）。
      + `log_group_class`：可选。指定要用于新日志组的日志组类。有关日志组类的更多信息，请参阅 [Log classes](https://docs.amazonaws.cn/AmazonCloudWatch/latest/logs/CloudWatch_Logs_Log_Classes.html)。

        有效值为 `STANDARD` 和 `INFREQUENT_ACCESS`。如果省略该字段，则使用 `STANDARD` 的默认值。
**重要**  
在创建日志组后，无法更改其类。
      + `log_stream_name`：可选。指定要在 CloudWatch Logs 中使用的日志流名称。您可以在名称中包含 `{instance_id}`、`{hostname}`、`{local_hostname}` 和 `{ip_address}` 作为变量。`{hostname}` 从 EC2 元数据中检索主机名，`{local_hostname}` 使用网络配置文件中的主机名。

        如果省略此字段，则使用全局 `logs` 部分中 `log_stream_name` 参数的值。如果也省略了该值，则使用 `{instance_id}` 的默认值。

        如果还没有日志流，则会自动创建一个日志流。
      + `retention_in_days`：可选。在指定的日志组中指定保留日志事件的天数。
        + 如果代理目前正在创建此日志组，并且您忽略此字段，则此新日志组的保留期将设置为永不过期。
        + 如果此日志组已存在，并且您指定了此字段，则将使用您指定的新保留期。如果您为已存在的日志组忽略此字段，则日志组的保留不会更改。

          CloudWatch 代理向导在创建代理配置文件且您未指定日志保留值时，使用 `-1` 作为此字段的默认值。此 `-1` 值由向导设置，其指定日志组中的事件永不过期。但是，手动将此值编辑为 `-1` 是无效的。

        有效的值为 1、3、5、7、14、30、60、90、120、150、180、365、400、545、731、1827、2192、2557、2922、3288 和 3653。

        如果配置代理以将多个日志流写入同一个日志组，则在一个位置指定 `retention_in_days` 将为整个日志组设置日志保留。如果您在多个位置为同一日志组指定 `retention_in_days`，则在所有这些值均相等时才会设置保留。但是，如果在多个位置为同一日志组指定不同的 `retention_in_days` 值，则不会设置日志保留，代理将停止并返回错误。
**注意**  
代理的 IAM 角色或 IAM 用户必须拥有 `logs:PutRetentionPolicy` 才能设置保留策略。
**警告**  
如果您为已存在的日志组设置 `retention_in_days`，则该日志组中在您指定天数之前发布的所有日志都将被删除。例如，将其设置为 3 会导致 3 天前和之前的所有日志被删除。
      + `filters`：可选。可以包含一组条目，其中的每个条目都指定一个正则表达式和筛选条件类型以指定是否发布或删除与筛选条件匹配的日志条目。如果您忽略此字段，则日志文件中的所有日志都会发布到 CloudWatch Logs。如果您包括此字段，则代理将使用您指定的所有筛选条件处理每条日志消息，并且只有通过所有筛选条件的日志事件才会发布到 CloudWatch Logs。未通过所有筛选条件的日志条目仍将保留在主机的日志文件中，但不会发送到 CloudWatch Logs。

        筛选条件数组中的每个条目可以包含以下字段：
        + `type`— 表示筛选条件类型。有效值为 `include` 和 `exclude`。对于 `include`，日志条目必须与要发布到 CloudWatch Logs 的表达式匹配。对于 `exclude`，与筛选条件匹配的每个日志条目不会发送到 CloudWatch Logs。
        + `expression`— 遵循 [RE2 语法](https://github.com/google/re2/wiki/Syntax)的正则表达式字符串。
**注意**  
CloudWatch 代理不会检查您提供的任何正则表达式的性能，也不会限制正则表达式评估的运行时间。我们建议您不要编写评估昂贵的表达式。有关可能问题的更多信息，请参阅[正则表达式拒绝服务 - ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)

        例如，以下 CloudWatch 代理配置文件的摘录会向 CloudWatch Logs 发布 PUT 和 POST 请求的日志，但不包括来自 Firefox 的日志。

        ```
        "collect_list": [ 
          {
            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log", 
            "log_group_name": "test.log", 
            "log_stream_name": "test.log",
            "filters": [
              {
                "type": "exclude",
                "expression": "Firefox"
              },
              {
                "type": "include",
                "expression": "P(UT|OST)"
              }
            ]
          },
          .....
        ]
        ```
**注意**  
配置文件中筛选条件的顺序对性能至关重要。在上一个示例中，代理在开始评估第二个筛选条件之前会删除与 `Firefox` 匹配的所有日志。为了减少多个筛选条件评估的日志条目，首先将预计排除更多日志的筛选条件放在配置文件中。
      + `timezone`：可选。指定在日志事件中放置时间戳时要使用的时区。有效值为 `UTC` 和 `Local`。默认值为 `Local`。

        如果您不指定 `timestamp_format` 的值，此参数将被忽略。
      + `timestamp_format`：可选。使用纯文本和以 % 开头的特殊符号指定时间戳格式。如果省略该字段，则使用当前时间。如果使用该字段，您可以使用以下列表中的符号作为格式的一部分。
**注意**  
当 `file_path` 设置为 `amazon-cloudwatch-agent.log` 时，不考虑此参数 

        如果单个日志条目包含两个与该格式相符的时间戳，则使用第一个时间戳。

        此符号列表与较旧的 CloudWatch Logs 代理使用的列表不同。有关这些区别的摘要，请参阅[CloudWatch 代理与旧版 CloudWatch Logs 代理之间的时间戳差异](CloudWatch-Agent-common-scenarios.md#CloudWatch-Agent-logs-timestamp-differences)。  
`%y`  
使用以零填充的十进制数字形式的没有世纪的年份。例如，`19` 表示 2019 年。  
`%Y`  
使用十进制数字形式的具有世纪的年份。例如 `2019`。  
`%b`  
使用区域设置的缩写名称形式的月份  
`%B`  
使用区域设置的完整名称形式的月份  
`%m`  
使用以零填充的十进制数字形式的月份  
`%-m`  
十进制数字形式的月份 (不使用零填充)  
`%d`  
使用以零填充的十进制数字形式的日期  
`%-d`  
十进制数字形式的日期 (不使用零填充)  
`%A`  
星期的全称，例如 `Monday`  
`%a`  
星期的缩写，例如 `Mon`  
`%H`  
使用以零填充的十进制数字形式的小时 (24 小时制)  
`%I`  
使用以零填充的十进制数字形式的小时 (12 小时制)  
`%-I`  
十进制数字形式的小时（12 小时制）（不使用零填充）  
`%p`  
AM 或 PM  
`%M`  
使用以零填充的十进制数字形式的分钟  
`%-M`  
十进制数字形式的分钟 (不使用零填充)  
`%S`  
使用以零填充的十进制数字形式的秒  
`%-S`  
十进制数字形式的秒 (不使用零填充)  
`%f`  
小数秒采用十进制数（1-9 位数），左侧用零填充。  
`%Z`  
时区，例如 `PST`  
`%z`  
时区，以本地时区与 UTC 的偏移量表示。例如 `-0700`。仅支持此格式。例如，`-07:00` 不是有效格式。  

      + `multi_line_start_pattern` – 指定用于识别日志消息开头的模式。日志消息由与模式匹配的行以及与模式不匹配的任何后续行组成。

        如果您省略此字段，则会禁用多行模式，而且以非空格字符开头的任何行都会使上一个日志消息结束 (如果存在)，并开始新的日志消息。

        如果包含该字段，您可以指定 `{timestamp_format}` 以使用与您的时间戳格式相同的正则表达式。否则，您可以为 CloudWatch Logs 指定不同的正则表达式，以用于确定多行条目的起始行。
      + `encoding` – 指定日志文件的编码，以便正确读取该文件。如果您指定错误的编码，则可能导致数据丢失，因为无法解码的字符将被其他字符替代。

        默认值为 `utf-8`。以下是所有可能值：

         `ascii, big5, euc-jp, euc-kr, gbk, gb18030, ibm866, iso2022-jp, iso8859-2, iso8859-3, iso8859-4, iso8859-5, iso8859-6, iso8859-7, iso8859-8, iso8859-8-i, iso8859-10, iso8859-13, iso8859-14, iso8859-15, iso8859-16, koi8-r, koi8-u, macintosh, shift_jis, utf-8, utf-16, utf-16le, UTF-16, UTF-16LE, windows-874, windows-1250, windows-1251, windows-1252, windows-1253, windows-1254, windows-1255, windows-1256, windows-1257, windows-1258, x-mac-cyrillic` 
      + `service.name`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的服务名称。
      + `deployment.environment`：可选。指定用于填充实体来[查找相关遥测数据](ExploreRelated.md)的环境名称。
      + `trim_timestamp`：可选。如果设置为 true，CloudWatch 代理会从行中移除由 `timestamp_format` 匹配的时间戳，然后再将其发送到 CloudWatch Logs。尽管如此，LogEvent 仍将包含 `timestamp` 字段。

        如果省略该字段，则使用 `false` 的默认值。
  + `windows_events` 部分指定从运行 Windows Server 的服务器中收集的 Windows 事件类型。其中包括以下字段：
    + `collect_list` – 如果包含 `windows_events`，则为必需。指定要收集的 Windows 事件的类型和级别。要收集的每个日志在该部分中包含一个条目，其中可以包含以下字段：
      + `event_name` – 指定要记录的 Windows 事件的类型。这等同于 Windows 事件日志通道名称：例如 `System`、`Security`、`Application` 等。要记录的每种类型的 Windows 事件需要使用该字段。
**注意**  
当 CloudWatch 从 Windows 日志通道检索消息时，它会根据其 `Full Name` 属性查找日志通道。同时，Windows 事件查看器导航窗格将显示日志通道的 `Log Name` 属性。`Full Name` 和 `Log Name` 并不总是匹配。确认通道的 `Full Name`，在 Windows 事件查看器中右键单击，然后打开 **Properties（属性）**。
      + `event_levels`：可选。指定要记录的事件的级别。您必须指定要录入的每个级别。可能的值包括 `INFORMATION`、`WARNING`、`ERROR`、`CRITICAL` 和 `VERBOSE`。此字段对于要记录的每种类型的 Windows 事件均为可选字段，并且可与其他筛选选项（如 `event_ids` 和 `filters`）配合使用。
      + `event_ids`：可选。包含一组 Windows 事件 ID，用于指定要从 Windows 事件日志中收集的事件。如果排除此字段，则会收集指定事件日志中的所有事件。如果包含此字段，则代理仅收集与指定事件 ID 匹配的事件。

        `event_ids` 数组中的每个条目都应为数字型事件 ID 值，并且可以与其他筛选选项配合使用。请参阅下面配置示例中的第三个条目。
**注意**  
当需要按事件 ID 筛选时，建议使用 `event_ids` 进行筛选而不是使用正则表达式，因为前者能提供更优的性能。
      + `filters`：可选。包含一组条目。每个条目都需指定一个正则表达式和一个筛选类型，用于指明对匹配筛选条件的日志条目执行发布还是丢弃操作。如果包含此字段，则代理将使用您指定的所有筛选条件处理每条日志消息，并且只有通过所有筛选条件的日志事件才会发布到 CloudWatch Logs。未通过所有筛选条件的 Windows 事件日志会被删除，也不会发送到 CloudWatch Logs。筛选条件部分还可与事件 ID（如 [4624, 4625]）及系统级别（Information、Error 或 Critical）等其他筛选机制配合使用，从而高效筛选日志并推送至 CloudWatch。

        筛选条件数组中的每个条目可以包含以下字段：
        + `type`：指定筛选条件的类型。有效值为 `include` 和 `exclude`。选择包含在内时，Windows 事件条目必须与要发布到 CloudWatch Logs 的表达式匹配。选择排除在外时，与筛选条件匹配的每个 Windows 事件日志条目都不会发送到 CloudWatch Logs。
        + `expression`：遵循 RE2 语法的正则表达式字符串。
**注意**  
CloudWatch 代理不会验证您提供的正则表达式，也不会限制其评估时间。请谨慎编写表达式，避免引发性能问题。有关安全风险的更多信息，请参阅 [Regular expression Denial of Service - ReDoS](https://owasp.org/www-community/attacks/Regular_expression_Denial_of_Service_-_ReDoS)。

        在下方代理配置示例中：

        对于第一个条目，代理会将包含数据库失败消息、任何与身份验证相关的活动以及所有登录事件（成功和失败的尝试）的日志发布到 CloudWatch。任何与此模式不匹配的日志都会被丢弃。

        在第二个条目中，初始筛选是根据 Windows 事件订阅的事件 ID 来进行的。代理会收集所有包含字符串用户的日志，丢弃与这些模式不匹配的日志。然后，代理会丢弃包含 `successful` 的日志，再将剩余的日志发送到 CloudWatch Logs。在发送到 CloudWatch 之前，每种筛选条件类型都会应用于每个 Windows 事件日志。

        ```
        "collect_list": [ 
          {
                "event_name": "Application",
                "log_group_name": "ApplicationEvents",
                "log_stream_name": "ApplicationEvents", 
                "filters": [
                    {
                        "type": "include",
                        "expression": "Database.*failed|Authentication.*|login.*"
                    }
                ]
            },
            {
                "event_name": "System", 
                "log_group_name": "SystemEvents",
                "log_stream_name": "Logon-events",
                "event_ids": [
                    4624,
                    4625
                 ],
                "filters": [
                    {
                        "type": "include",
                        "expression": ".*user.*"
                    },
                    {
                        "type": "exclude",
                        "expression": ".*successful.*"
                    }
                 ]
             }
          .....
        ]
        ```
**注意**  
配置中筛选条件的顺序会影响筛选效果。在第二个条目中，代理在开始评估第二个筛选表达式之前会丢弃与用户不匹配的所有日志。为获得最佳筛选效果，请按排除率从高到低的顺序排列筛选条件。

        虽然可以在筛选表达式中筛选出事件 ID 和系统级别的日志，但建议使用第二个条目所示的 `event_ids` 和 `log_level` 来提高筛选效果。
**警告**  
尽管所有筛选机制（event\$1levels、event\$1id、筛选条件）都是可选的，但在代理配置期间至少需要一种筛选机制来筛选日志。
      + `log_group_name` – 必需。指定要在 CloudWatch Logs 中使用的日志组名称。
      + `log_stream_name`：可选。指定要在 CloudWatch Logs 中使用的日志流名称。您可以在名称中包含 `{instance_id}`、`{hostname}`、`{local_hostname}` 和 `{ip_address}` 作为变量。`{hostname}` 从 EC2 元数据中检索主机名，`{local_hostname}` 使用网络配置文件中的主机名。

        如果省略此字段，则使用全局 `logs` 部分中 `log_stream_name` 参数的值。如果也省略了该值，则使用 `{instance_id}` 的默认值。

        如果还没有日志流，则会自动创建一个日志流。
      + `event_format`：可选。指定在 CloudWatch Logs 中存储 Windows 事件时要使用的格式。与在 Windows 事件查看器中一样，`xml` 使用 XML 格式。`text` 使用原 CloudWatch Logs 代理格式。
      + `retention_in_days`：可选。在指定的日志组中指定保留 Windows 事件的天数。
        + 如果代理目前正在创建此日志组，并且您忽略此字段，则此新日志组的保留期将设置为永不过期。
        + 如果此日志组已存在，并且您指定了此字段，则将使用您指定的新保留期。如果您为已存在的日志组忽略此字段，则日志组的保留不会更改。

          CloudWatch 代理向导在创建代理配置文件且您未指定日志保留值时，使用 `-1` 作为此字段的默认值。此 `-1` 值由向导设置，指定日志组中的事件不会过期。但是，手动将此值编辑为 `-1` 是无效的。

        有效的值为 1、3、5、7、14、30、60、90、120、150、180、365、400、545、731、1827、2192、2557、2922、3288 和 3653。

        如果配置代理以将多个日志流写入同一个日志组，则在一个位置指定 `retention_in_days` 将为整个日志组设置日志保留。如果您在多个位置为同一日志组指定 `retention_in_days`，则在所有这些值均相等时才会设置保留。但是，如果在多个位置为同一日志组指定不同的 `retention_in_days` 值，则不会设置日志保留，代理将停止并返回错误。
**注意**  
代理的 IAM 角色或 IAM 用户必须拥有 `logs:PutRetentionPolicy` 才能设置保留策略。
**警告**  
如果您为已存在的日志组设置 `retention_in_days`，则该日志组中在您指定天数之前发布的所有日志都将被删除。例如，将其设置为 3 会导致 3 天前和之前的所有日志被删除。
+ `log_stream_name`：可选。对于未在 `collect_list` 的相应条目内的 `log_stream_name` 参数中定义各日志流名称的任何日志或 Windows 事件，指定要用于它们的默认日志流名称。
+ `endpoint_override` – 指定一个 FIPS 端点或私有链接，以用作代理在其中发送日志的端点。如果指定此字段并设置私有链接，您可以将日志发送到 Amazon VPC 终端节点。有关更多信息，请参阅 [Amazon VPC 是什么？](https://docs.amazonaws.cn/vpc/latest/userguide/what-is-amazon-vpc.html)。

  `endpoint_override` 的值必须是表示 URL 的字符串。

  例如，在配置文件的日志部分中，以下内容将代理设置为在发送日志时使用 VPC 终端节点。

  ```
  {
    "logs": {
      "endpoint_override": "vpce-XXXXXXXXXXXXXXXXXXXXXXXXX.logs.us-east-1.vpce.amazonaws.com",
     ......
     },
  }
  ```
+ `force_flush_interval` – 以秒为单位指定日志在发送到服务器之前保留在内存缓冲区中的最大时间量。无论此字段的设置如何，如果缓冲区中的日志大小达到 1 MB，日志会立即发送到服务器。默认值是 5。

  如果您使用代理以嵌入式指标格式报告高分辨率指标，并且正在为这些指标设置警报，请将此参数设置为默认值 5。否则，报告指标时会出现延迟，这可能会导致出现警报，告知存在部分或不完整的数据。
+ `credentials` – 指定一个在向不同 Amazon 账户发送日志时使用的 IAM 角色。如果指定，则此字段包含一个参数 `role_arn`。
  + `role_arn` – 指定一个在向不同 Amazon 账户发送日志时用于身份验证的 IAM 角色的 ARN。有关更多信息，请参阅 [向不同账户发送指标、日志和跟踪信息](CloudWatch-Agent-common-scenarios.md#CloudWatch-Agent-send-to-different-AWS-account)。如果在此指定，它将覆盖在配置文件的 `agent` 部分指定的 `role_arn`（如果有）。
+ `metrics_collected`：此字段可包含特定部分，用于指定代理将收集日志以启用使用案例，例如 CloudWatch Application Signals 和针对 Amazon EKS 增强了可观测性的 Container Insights。
  + `application_signals`（可选）指定您要启用 [CloudWatch Application Signals](CloudWatch-Application-Monitoring-Sections.md)。有关此配置的更多信息，请参阅 [启用 CloudWatch Application Signals](CloudWatch-Agent-Application_Signals.md)。
  + `kubernetes` – 此字段可以包含 `enhanced_container_insights` 参数，用于启用针对 Amazon EKS 增强了可观测性的 Container Insights。
    + `enhanced_container_insights` – 将其设置为 `true`，可启用针对 Amazon EKS 增强了可观测性的 Container Insights。有关更多信息，请参阅 [针对 Amazon EKS 增强了可观测性的 Container Insights](container-insights-detailed-metrics.md)。
    + `accelerated_compute_metrics` – 将其设置为 `false`，从而选择不收集 Amazon EKS 集群上的 Nvidia GPU 指标。有关更多信息，请参阅 [NVIDIA GPU 指标](Container-Insights-metrics-enhanced-EKS.md#Container-Insights-metrics-EKS-GPU)。
  + `emf` – 要收集日志中嵌入的指标，不再需要添加此 `emf` 字段。这是旧字段，指定代理将收集采用嵌入式指标格式的日志。您可以从这些日志生成指标数据。有关更多信息，请参阅 [在日志中嵌入指标](CloudWatch_Embedded_Metric_Format.md)。
  + `otlp` – 可选。指定您想要从 OpenTelemetry SDK 收集指标。有关本节中可使用字段的更多信息，请参阅[使用 OpenTelemetry 收集指标和跟踪](CloudWatch-Agent-OpenTelemetry-metrics.md)。

下面是一个 `logs` 部分示例。

```
"logs":{
    "logs_collected": {
    "files": {
            "collect_list": [
                   {
                        "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log",
                       "log_group_name": "amazon-cloudwatch-agent.log",
                       "log_stream_name": "my_log_stream_name_1"
                   },
                   {
                       "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\test.log",
                       "log_group_name": "test.log",
                       "log_stream_name": "my_log_stream_name_2"
                   }
               ]
           },
      "windows_events": {
                "collect_list": [
                                {
                       "event_name": "System",
                       "event_ids": [
                           1001,
                           1008
                       ],
                       "log_group_name": "System",
                       "log_stream_name": "System"
                   },
                   {
                       "event_name": "CustomizedName",
                       "event_levels": [
                           "INFORMATION",
                           "ERROR"
                       ],
                       "log_group_name": "CustomizedLogGroup",
                       "log_stream_name": "CustomizedLogStream"
                   },
                   {
                       "event_name": "Application",
                       "event_levels": [
                           "INFORMATION",
                           "ERROR"
                       ],
                       "event_ids":[
                            7369,
                            5624
                       ],
                       "log_group_name": "CustomizedLogGroup",
                       "log_stream_name": "CustomizedLogStream"
                   }
               ]
           }
       },
       "log_stream_name": "my_log_stream_name",
       "metrics_collected": {
        "kubernetes": {
        "enhanced_container_insights": true
      }
    }
  }
```

## CloudWatch 代理配置文件：跟踪信息部分
<a name="CloudWatch-Agent-Configuration-File-Tracessection"></a>

通过向 CloudWatch 代理配置文件添加 `traces` 部分，您可以启用 CloudWatch Application Sights，或从 X-Ray 和 OpenTelemetry 检测开发工具包收集跟踪信息，然后将其发送到 X-Ray。

**重要**  
代理的 IAM 角色或 IAM 用户必须具有 **AWSXrayWriteOnlyAccess** 策略才能将跟踪数据发送到 X-Ray。

要快速开始收集跟踪信息，您只需将以下内容添加到 CloudWatch 代理配置文件中即可。

```
"traces_collected": {
        "xray": {
        },
        "otlp": {
        }
      }
```

如果将上一部分添加到 CloudWatch 代理配置文件，然后重新启动代理，这将使代理开始使用以下默认选项和值收集跟踪。有关这些参数的更多信息，请参阅本节后面的参数定义。

```
"traces_collected": {
        "xray": {
            "bind_address": "127.0.0.1:2000",
            "tcp_proxy": {
              "bind_address": "127.0.0.1:2000"
            }
        },
        "otlp": {
            "grpc_endpoint": "127.0.0.1:4317",
            "http_endpoint": "127.0.0.1:4318"
        }
      }
```

`traces` 部分可以包括以下字段：
+ `traces_collected` – 如果包含 `traces` 部分，则为必需。指定要从哪些 SDK 收集跟踪信息。它可以包括以下字段：
  + `application_signals`：可选。指定您要启用 [CloudWatch Application Signals](CloudWatch-Application-Monitoring-Sections.md)。有关此配置的更多信息，请参阅 [启用 CloudWatch Application Signals](CloudWatch-Agent-Application_Signals.md)。
  + `xray`：可选。指定您要从 X-Ray SDK 收集跟踪信息。此部分包含以下字段：
    + `bind_address`：可选。指定 CloudWatch 代理用于侦听 X-Ray 跟踪信息的 UDP 地址。格式为 `ip:port`。此地址必须与 X-Ray SDK 中设置的地址相匹配。

      如果省略该字段，则使用 `127.0.0.1:2000` 的默认值。
    + `tcp_proxy`：可选。为用于支持 X-Ray 远程采样的代理配置地址。有关更多信息，请参阅 X-Ray 文档中的[配置采样规则](https://docs.amazonaws.cn/xray/latest/devguide/xray-console-sampling.html)。

      此部分可以包含以下字段。
      + `bind_address`：可选。指定 CloudWatch 代理应将代理设置到的 TCP 地址。格式为 `ip:port`。此地址必须与 X-Ray SDK 中设置的地址相匹配。

        如果省略该字段，则使用 `127.0.0.1:2000` 的默认值。
  + `otlp`：可选。指定您要从 OpenTelemetry SDK 收集跟踪信息。有关本节中可使用字段的更多信息，请参阅[使用 OpenTelemetry 收集指标和跟踪](CloudWatch-Agent-OpenTelemetry-metrics.md)。有关 Amazon Distro for OpenTelemetry 的更多信息，请参阅 [Amazon Distro for OpenTelemetry](https://www.amazonaws.cn/otel/)。有关适用于 OpenTelemetry SDK 的 Amazon Distro 的更多信息，请参阅[简介](https://aws-otel.github.io/docs/introduction)。

    此部分包含以下字段：
    + `grpc_endpoint`：可选。指定 CloudWatch 代理用于侦听使用 gRPC 远程过程调用发送的 OpenTelemetry 跟踪信息的地址。格式为 `ip:port`。此地址必须与 OpenTelemetry SDK 中为 gRPC 导出器设置的地址相匹配。

      如果省略该字段，则使用 `127.0.0.1:4317` 的默认值。
    + `http_endpoint`：可选。指定 CloudWatch 代理用于侦听通过 HTTP 发送的 OTLP 跟踪信息的地址。格式为 `ip:port`。此地址必须与 OpenTelemetry SDK 中为 HTTP 导出器设置的地址相匹配。

      如果省略该字段，则使用 `127.0.0.1:4318` 的默认值。
+ `concurrency`：可选。指定可用于上传跟踪信息的 X-Ray 的最大并发调用次数。默认值为 `8`
+ `local_mode`：可选。如果为 `true`，则代理不会收集 Amazon EC2 实例元数据。默认值为 `false`
+ `endpoint_override`：可选。指定一个 FIPS 端点或私有链接，以用作 CloudWatch 代理在其中发送跟踪信息的端点。指定此字段并设置私有链接，使您能够将跟踪信息发送到 Amazon VPC 端点。有关更多信息，请参阅 [Amazon VPC 是什么](https://docs.amazonaws.cn/vpc/latest/userguide/what-is-amazon-vpc.html)

  `endpoint_override` 的值必须是表示 URL 的字符串。
+ `region_override`：可选。指定用于 X-Ray 端点的区域。CloudWatch 代理会将跟踪信息发送到指定区域中的 X-Ray。如果省略此字段，该代理会将跟踪信息发送到 Amazon EC2 实例所在的区域。

  如果您在此处指定区域，则此区域将优先于配置文件 `agent` 部分中 `region` 参数的设置。
+ `proxy_override`：可选。指定 CloudWatch 代理向 X-Ray 发送请求时使用的代理服务器地址。必须将代理服务器的协议指定为此地址的组成部分。
+ `credentials` – 指定一个在向不同 Amazon 账户发送跟踪信息时使用的 IAM 角色。如果指定，则此字段包含一个参数 `role_arn`。
  + `role_arn` – 指定一个在向不同 Amazon 账户发送跟踪信息时用于身份验证的 IAM 角色的 ARN。有关更多信息，请参阅 [向不同账户发送指标、日志和跟踪信息](CloudWatch-Agent-common-scenarios.md#CloudWatch-Agent-send-to-different-AWS-account)。如果在此指定，它将覆盖在配置文件的 `agent` 部分指定的 `role_arn`（如果有）。
+ `transit_spans_in_otlp_format`：可选。如果为 `true`，则以 OpenTelemetry 协议格式将跟踪发送到 X-Ray，该协议支持 Transaction Search 中的跨度事件。有关更多信息，请参阅 [添加自定义属性](CloudWatch-Transaction-Search-add-custom-attributes.md)。默认值为 `false`。

## CloudWatch 代理配置文件：完整示例
<a name="CloudWatch-Agent-Configuration-File-Complete-Example"></a>

下面是一个适用于 Linux 服务器的完整 CloudWatch 代理配置文件示例。

要收集的指标的 `measurement` 部分中列出的项目可能指定了完整的指标名称，也可能仅指定将附加到资源类型的指标名称部分。例如，如果在 `diskio` 部分的 `measurement` 部分中指定 `reads` 或 `diskio_reads`，将导致收集 `diskio_reads` 指标。

该示例提供了两种方法以在 `measurement` 部分中指定指标。

```
    {
      "agent": {
        "metrics_collection_interval": 10,
        "logfile": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log"
      },
      "metrics": {
        "namespace": "MyCustomNamespace",
        "metrics_collected": {
          "cpu": {
            "resources": [
              "*"
            ],
            "measurement": [
              {"name": "cpu_usage_idle", "rename": "CPU_USAGE_IDLE", "unit": "Percent"},
              {"name": "cpu_usage_nice", "unit": "Percent"},
              "cpu_usage_guest"
            ],
            "totalcpu": false,
            "metrics_collection_interval": 10,
            "append_dimensions": {
              "customized_dimension_key_1": "customized_dimension_value_1",
              "customized_dimension_key_2": "customized_dimension_value_2"
            }
          },
          "disk": {
            "resources": [
              "/",
              "/tmp"
            ],
            "measurement": [
              {"name": "free", "rename": "DISK_FREE", "unit": "Gigabytes"},
              "total",
              "used"
            ],
             "ignore_file_system_types": [
              "sysfs", "devtmpfs"
            ],
            "metrics_collection_interval": 60,
            "append_dimensions": {
              "customized_dimension_key_3": "customized_dimension_value_3",
              "customized_dimension_key_4": "customized_dimension_value_4"
            }
          },
          "diskio": {
            "resources": [
              "*"
            ],
            "measurement": [
              "reads",
              "writes",
              "read_time",
              "write_time",
              "io_time"
            ],
            "metrics_collection_interval": 60
          },
          "swap": {
            "measurement": [
              "swap_used",
              "swap_free",
              "swap_used_percent"
            ]
          },
          "mem": {
            "measurement": [
              "mem_used",
              "mem_cached",
              "mem_total"
            ],
            "metrics_collection_interval": 1
          },
          "net": {
            "resources": [
              "eth0"
            ],
            "measurement": [
              "bytes_sent",
              "bytes_recv",
              "drop_in",
              "drop_out"
            ]
          },
          "netstat": {
            "measurement": [
              "tcp_established",
              "tcp_syn_sent",
              "tcp_close"
            ],
            "metrics_collection_interval": 60
          },
          "processes": {
            "measurement": [
              "running",
              "sleeping",
              "dead"
            ]
          }
        },
        "append_dimensions": {
          "ImageId": "${aws:ImageId}",
          "InstanceId": "${aws:InstanceId}",
          "InstanceType": "${aws:InstanceType}",
          "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
        },
        "aggregation_dimensions" : [["ImageId"], ["InstanceId", "InstanceType"], ["d1"],[]],
        "force_flush_interval" : 30
      },
      "logs": {
        "logs_collected": {
          "files": {
            "collect_list": [
              {
                "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log",
                "log_group_name": "amazon-cloudwatch-agent.log",
                "log_stream_name": "amazon-cloudwatch-agent.log",
                "timezone": "UTC"
              },
              {
                "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log",
                "log_group_name": "test.log",
                "log_stream_name": "test.log",
                "timezone": "Local"
              }
            ]
          }
        },
        "log_stream_name": "my_log_stream_name",
        "force_flush_interval" : 15,
        "metrics_collected": {
           "kubernetes": {
                "enhanced_container_insights": true
      }
    }
  }
}
```

下面是一个适用于运行 Windows Server 的服务器的完整 CloudWatch 代理配置文件示例。

```
{
      "agent": {
        "metrics_collection_interval": 60,
        "logfile": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log"
      },
      "metrics": {
        "namespace": "MyCustomNamespace",
        "metrics_collected": {
          "Processor": {
            "measurement": [
              {"name": "% Idle Time", "rename": "CPU_IDLE", "unit": "Percent"},
              "% Interrupt Time",
              "% User Time",
              "% Processor Time"
            ],
            "resources": [
              "*"
            ],
            "append_dimensions": {
              "customized_dimension_key_1": "customized_dimension_value_1",
              "customized_dimension_key_2": "customized_dimension_value_2"
            }
          },
          "LogicalDisk": {
            "measurement": [
              {"name": "% Idle Time", "unit": "Percent"},
              {"name": "% Disk Read Time", "rename": "DISK_READ"},
              "% Disk Write Time"
            ],
            "resources": [
              "*"
            ]
          },
          "customizedObjectName": {
            "metrics_collection_interval": 60,
            "customizedCounterName": [
              "metric1",
              "metric2"
            ],
            "resources": [
              "customizedInstances"
            ]
          },
          "Memory": {
            "metrics_collection_interval": 5,
            "measurement": [
              "Available Bytes",
              "Cache Faults/sec",
              "Page Faults/sec",
              "Pages/sec"
            ]
          },
          "Network Interface": {
            "metrics_collection_interval": 5,
            "measurement": [
              "Bytes Received/sec",
              "Bytes Sent/sec",
              "Packets Received/sec",
              "Packets Sent/sec"
            ],
            "resources": [
              "*"
            ],
            "append_dimensions": {
              "customized_dimension_key_3": "customized_dimension_value_3"
            }
          },
          "System": {
            "measurement": [
              "Context Switches/sec",
              "System Calls/sec",
              "Processor Queue Length"
            ]
          }
        },
        "append_dimensions": {
          "ImageId": "${aws:ImageId}",
          "InstanceId": "${aws:InstanceId}",
          "InstanceType": "${aws:InstanceType}",
          "AutoScalingGroupName": "${aws:AutoScalingGroupName}"
        },
        "aggregation_dimensions" : [["ImageId"], ["InstanceId", "InstanceType"], ["d1"],[]]
      },
      "logs": {
        "logs_collected": {
          "files": {
            "collect_list": [
              {
                "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\amazon-cloudwatch-agent.log",
                "log_group_name": "amazon-cloudwatch-agent.log",
                "timezone": "UTC"
              },
              {
                "file_path": "c:\\ProgramData\\Amazon\\AmazonCloudWatchAgent\\Logs\\test.log",
                "log_group_name": "test.log",
                "timezone": "Local"
              }
            ]
          },
          "windows_events": {
            "collect_list": [
              {
                "event_name": "System",
                "event_levels": [
                  "INFORMATION",
                  "ERROR"
                ],
                "log_group_name": "System",
                "log_stream_name": "System",
                "event_format": "xml"
              },
              {
                "event_name": "CustomizedName",
                "event_levels": [
                  "WARNING",
                  "ERROR"
                ],
                "log_group_name": "CustomizedLogGroup",
                "log_stream_name": "CustomizedLogStream",
                "event_format": "xml"
              }
            ]
          }
        },
        "log_stream_name": "example_log_stream_name"
      }
    }
```

## 手动保存 CloudWatch 代理配置文件
<a name="Saving-Agent-Configuration-File"></a>

如果手动创建或编辑 CloudWatch 代理配置文件，则可以给它指定任何名称。创建该文件后，您可以将其复制到要运行代理的其他服务器上。

## 将 CloudWatch 代理配置文件上传到 Systems Manager Parameter Store
<a name="Upload-CloudWatch-Agent-Configuration-To-Parameter-Store"></a>

如果您计划使用 SSM Agent 在服务器上安装 CloudWatch 代理，则在手动编辑 CloudWatch 代理配置文件后，可以将其上传到 Systems Manager Parameter Store。为此，您可以使用 Systems Manager `put-parameter` 命令。

要能够将该文件存储在 Parameter Store 中，您必须使用具有足够权限的 IAM 角色。

可以使用以下命令，其中 *parameter name* 是在 Parameter Store 中用于该文件的名称，而 *configuration\$1file\$1pathname* 是已编辑的配置文件的路径和文件名。

```
aws ssm put-parameter --name "parameter name" --type "String" --value file://configuration_file_pathname
```