

# 安装 CloudWatch 代理
<a name="install-CloudWatch-Agent-on-EC2-Instance"></a>

您可以在 Amazon EC2 实例、本地服务器以及容器化环境中安装 CloudWatch 代理，来收集指标、日志和跟踪数据。该代理支持 Linux、Windows 和 macOS 操作系统。有多种方式可以安装代理，包括使用 Systems Manager、通过 CloudWatch 控制台安装、从命令行安装或使用配置文件进行安装。在安装之前，确保已配置所需的 IAM 权限和网络访问权限。

**Topics**
+ [

# 在 CloudWatch 控制台中安装和配置具有工作负载检测功能的 Amazon CloudWatch 代理
](install-cloudwatch-agent-workload-detection.md)
+ [

# 在 Amazon EC2 上手动安装
](manual-installation.md)
+ [

# 使用 AWS Systems Manager 安装 CloudWatch 代理
](installing-cloudwatch-agent-ssm.md)
+ [

# 在本地服务器上安装 CloudWatch 代理
](install-CloudWatch-Agent-on-premise.md)
+ [

# 使用 CloudFormation 在新实例上安装 CloudWatch 代理
](Install-CloudWatch-Agent-New-Instances-CloudFormation.md)
+ [

# 使用 Amazon CloudWatch Observability EKS 附加组件或 Helm 图表安装 CloudWatch 代理
](install-CloudWatch-Observability-EKS-addon.md)

# 在 CloudWatch 控制台中安装和配置具有工作负载检测功能的 Amazon CloudWatch 代理
<a name="install-cloudwatch-agent-workload-detection"></a>

## 简介
<a name="workload-detection-introduction"></a>

您可以通过 CloudWatch 入门控制台在 Amazon EC2 实例上安装和配置 CloudWatch 代理。Amazon CloudWatch 代理是一款轻量级软件组件，用于从 Amazon EC2 实例收集系统级指标、日志和跟踪数据。该代理能够自动收集监控数据并将其传输到 CloudWatch，这样您就可以提供切实可行的见解，优化资源利用率，并确保应用程序以最少的配置工作顺畅运行。

使用预定义的、特定于工作负载的配置来配置 CloudWatch 代理，这些配置会利用工作负载自动检测，来识别实例上正在运行的应用程序和服务。您可以通过特定的指标、日志和跟踪数据来自定义数据收集，从而有效监控应用程序性能并排除问题。

## 工作方式
<a name="workload-detection-how-it-works"></a>

CloudWatch 代理通过工作负载自动检测，来检测 Amazon EC2 实例上运行的工作负载。此功能可识别实例上正在运行的应用程序和服务，无需手动配置即可实现智能监控。

可观测性解决方案提供预定义的、特定于工作负载的配置，这些配置专为 Apache Kafka、Apache Tomcat、Java 虚拟机（JVM）、NGINX 和 NVIDIA GPU 工作负载等常见应用程序量身定制。这些解决方案通过自动收集针对每个检测到的工作负载的正确指标、日志和跟踪数据，并且简化监控设置，无需手动埋点和配置。

启用工作负载检测后，代理会分析实例环境，并自动选择相关的预配置监控模板。这些配置由 AWS 主题专家进行优化，旨在捕获每种工作负载类型最重要的遥测数据，确保您从一开始就实现全面的可观测性。

## 先决条件
<a name="workload-detection-prerequisites"></a>

### SSM Agent 安装（必需）
<a name="ssm-agent-installation"></a>

必须在 Amazon EC2 实例上安装 AWS Systems Manager（SSM）代理。SSM Agent 已预先安装在大多数 AWS 提供的亚马逊机器映像（AMI）上。如需手动安装或更新 SSM Agent，请参阅 [Systems Manager 文档](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)。

**注意**  
默认主机管理配置（DHMC）是 Systems Manager 的一项功能，可自动授予 Amazon EC2 实例连接到 Systems Manager 的权限，无需您手动将 IAM 实例配置文件附加到每个实例。如果 Amazon EC2 实例正在使用 DHMC，并在 CloudWatch 代理安装过程将 CloudWatch 策略附加到实例，则新策略最多可能需要 30 分钟才能生效。这种延迟可能会推迟向 CloudWatch 发布指标、日志和跟踪数据。为了缓解此问题，可以使用包含 [AmazonSSMManagedInstanceCore](https://docs.aws.amazon.com/aws-managed-policy/latest/reference/AmazonSSMManagedInstanceCore.html) 策略的 IAM 角色来创建 Amazon EC2 实例。

### 工作负载检测（推荐）
<a name="workload-detection-recommended"></a>

工作负载检测是一项可选功能，可自动识别实例上正在运行的应用程序和服务。建议开启工作负载检测，以利用预配置的、特定于工作负载的监控模板。您可以在 [CloudWatch 控制台设置](https://console.aws.amazon.com/cloudwatch/home#settings)中启用工作负载检测。

## 开始使用
<a name="workload-detection-getting-started"></a>

在 Amazon CloudWatch 控制台中打开“Amazon CloudWatch 代理入门”页面：[https://console.aws.amazon.com/cloudwatch/home\$1cloudwatch-agent](https://console.aws.amazon.com/cloudwatch/home#cloudwatch-agent)

**为 CloudWatch 代理手动部署实例**

手动选择最多 50 个实例来安装和配置 CloudWatch 代理。借助这种针对性方法，您可以加强对特定 Amazon EC2 实例的监控。

**为 CloudWatch 代理执行基于标签的部署**

执行基于标签的部署，可以在 Amazon EC2 实例集上安装和配置 CloudWatch 代理。此方法适用于所有当前及未来具有匹配标签的实例。

**采用基于标签的配置**

采用基于标签的配置，可以让您有效地组织、查看和修改配置，帮助您管理 CloudWatch 代理及其在各个 Amazon EC2 实例集中的配置。

**CloudWatch 代理安装**

安装 CloudWatch 代理，以便从 Amazon EC2 实例和本地主机收集指标、日志和跟踪数据。这些遥测数据将提供有关基础设施和应用程序的重要运行状况及性能数据。

**CloudWatch 代理配置**

使用预定义的、特定于工作负载的配置来配置 CloudWatch 代理。您可以通过特定的指标、日志和跟踪数据来自定义数据收集，从而有效监控应用程序性能并排除问题。

## 成本
<a name="workload-detection-costs"></a>

在此过程中添加的其他指标将作为自定义指标计费。有关 CloudWatch 指标定价的信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing)。

# 在 Amazon EC2 上手动安装
<a name="manual-installation"></a>

**注意**  
在首次安装 CloudWatch 代理之前须满足相关先决条件。

**Topics**
+ [

## 使用软件包管理器在 Amazon Linux 上安装
](#amazon-linux-package)
+ [

## 在 Amazon Linux 上使用命令行安装
](#linux-manual-install)
+ [

## 在 Windows 上安装
](#windows-installation)
+ [

## 在 macOS 上安装
](#macos-installation)

## 使用软件包管理器在 Amazon Linux 上安装
<a name="amazon-linux-package"></a>

CloudWatch 代理在 Amazon Linux 2023 和 Amazon Linux 2 中，可作为软件包使用。如果使用的是其中一种操作系统，则可通过输入以下命令来安装该软件包：

```
sudo yum install amazon-cloudwatch-agent
```

您还必须确保附加到实例的 IAM 角色附加了 **CloudWatchAgentServerPolicy**。

## 在 Amazon Linux 上使用命令行安装
<a name="linux-manual-install"></a>

在所有支持的 Linux 操作系统中，您可以使用命令行下载并安装 CloudWatch 代理。

1. 下载 CloudWatch 代理。对于 Linux 服务器，输入以下命令即可。对于 `download-link`，使用下表中相应的下载链接。

   ```
   wget download-link
   ```    
[\[See the AWS documentation website for more details\]](http://docs.aws.amazon.com/zh_cn/AmazonCloudWatch/latest/monitoring/manual-installation.html)

1. 在下载该软件包后，您可以选择验证软件包签名。有关更多信息，请参阅 [验证 CloudWatch 代理软件包的签名](verify-CloudWatch-Agent-Package-Signature.md)。

1. 安装软件包。如果已在 Linux 服务器上下载 RPM 程序包，请更改为包含程序包的目录，并输入以下内容：

   ```
   sudo rpm -U ./amazon-cloudwatch-agent.rpm
   ```

   如果已在 Linux 服务器上下载 DEB 程序包，请更改为包含程序包的目录，并输入以下内容：

   ```
   sudo dpkg -i -E ./amazon-cloudwatch-agent.deb
   ```

## 在 Windows 上安装
<a name="windows-installation"></a>

在 Windows Server 上，您可以使用命令行下载并安装 CloudWatch 代理。

1. 下载以下文件：

   ```
   https://amazoncloudwatch-agent.s3.amazonaws.com/windows/amd64/latest/amazon-cloudwatch-agent.msi
   ```

1. 在下载该软件包后，您可以选择验证软件包签名。有关更多信息，请参阅 [验证 CloudWatch 代理软件包的签名](verify-CloudWatch-Agent-Package-Signature.md)。

1. 安装软件包。更改为包含软件包的目录，并输入以下内容：

   ```
   msiexec /i amazon-cloudwatch-agent.msi
   ```

   此命令还可在 PowerShell 中发挥作用。有关 MSI 命令选项的更多信息，请参阅 Microsoft Windows 文档中的[命令行选项](https://docs.microsoft.com/en-us/windows/desktop/Msi/command-line-options)。

## 在 macOS 上安装
<a name="macos-installation"></a>

在 macOS 计算机上，您可以使用命令行下载并安装 CloudWatch 代理。

1. 下载适合自己架构的软件包：

   ```
   https://amazoncloudwatch-agent.s3.amazonaws.com/darwin/amd64/latest/amazon-cloudwatch-agent.pkg
   ```

   对于 ARM64 架构：

   ```
   https://amazoncloudwatch-agent.s3.amazonaws.com/darwin/arm64/latest/amazon-cloudwatch-agent.pkg
   ```

1. 在下载该软件包后，您可以选择验证软件包签名。有关更多信息，请参阅 [验证 CloudWatch 代理软件包的签名](verify-CloudWatch-Agent-Package-Signature.md)。

1. 安装软件包。更改为包含软件包的目录，并输入以下内容：

   ```
   sudo installer -pkg ./amazon-cloudwatch-agent.pkg -target /
   ```

# 使用 AWS Systems Manager 安装 CloudWatch 代理
<a name="installing-cloudwatch-agent-ssm"></a>

 使用 AWS Systems Manager 更轻松地在 Amazon EC2 实例集上安装 CloudWatch 代理。您可以将代理下载到一台服务器上，然后为实例集中的所有服务器创建您的 CloudWatch 代理配置文件。然后，您可以使用 Systems Manager，通过创建的配置文件将代理安装到其他服务器上。可以按照以下主题使用 AWS Systems Manager 安装和运行 CloudWatch 代理。

**Topics**
+ [

## 安装或更新 SSM 代理
](#update-SSM-Agent-EC2instance-first)
+ [

## 验证 Systems Manager 的先决条件
](#install-CloudWatch-Agent-minimum-requirements-first)
+ [

## 验证 Internet 访问权限
](#install-CloudWatch-Agent-internet-access-first)
+ [

## 将 CloudWatch 代理程序包下载到您的第一个实例
](#install-CloudWatch-Agent-EC2-first)
+ [

## 创建和修改代理配置文件
](#CW-Agent-Instance-Create-Configuration-File-first)
+ [

## 使用代理配置在其他 EC2 实例上安装和启动 CloudWatch 代理
](#install-CloudWatch-Agent-on-EC2-Instance-fleet)
+ [

## 使用代理配置在其他 EC2 实例上安装 CloudWatch 代理
](#install-CloudWatch-Agent-on-EC2-Instance-fleet)
+ [

## （可选）修改 CloudWatch 代理的通用配置和命名配置文件
](#CloudWatch-Agent-profile-instance-fleet)

## 安装或更新 SSM 代理
<a name="update-SSM-Agent-EC2instance-first"></a>

在 Amazon EC2 实例上，CloudWatch 代理要求实例运行 SSM 代理 2.2.93.0 或更高版本。在安装 CloudWatch 代理之前，如果还没有在实例上更新或安装 SSM Agent，请执行该操作。

有关在运行 Linux 的实例上安装或更新 SSM Agent 的信息，请参阅 *AWS Systems Manager 用户指南*中的[在 Linux 实例上安装和配置 SSM Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/manually-install-ssm-agent-linux.html)。

有关安装或更新 SSM Agent 的更多信息，请参阅 *AWS Systems Manager 用户指南*中的[使用 SSM Agent](https://docs.aws.amazon.com/systems-manager/latest/userguide/ssm-agent.html)。

## 验证 Systems Manager 的先决条件
<a name="install-CloudWatch-Agent-minimum-requirements-first"></a>

在使用 Systems Manager Run Command 安装和配置 CloudWatch 代理之前，请确保您的实例满足 Systems Manager 的最低要求。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的 [Systems Manager 的先决条件](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up.html#systems-manager-prereqs)。

## 验证 Internet 访问权限
<a name="install-CloudWatch-Agent-internet-access-first"></a>

您的 Amazon EC2 实例必须能够连接到 CloudWatch 端点。可以通过互联网网关、NAT 网关或 CloudWatch 接口 VPC 终端节点实现此连接。有关如何配置互联网访问权限的更多信息，请参阅 *Amazon VPC 用户指南*中的[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)。

要在您的代理上配置的终端节点和端口如下所示：
+ 如果要使用代理收集指标，则必须允许列出相应区域的 CloudWatch 端点。这些端点在 *Amazon Web Services 一般参考* 的 [Amazon CloudWatch](https://docs.aws.amazon.com/general/latest/gr/rande.html#cw_region) 中列出。
+ 如果要使用代理收集日志，则必须允许列出相应区域的 CloudWatch Logs 端点。这些端点在 *Amazon Web Services 一般参考* 的 [Amazon CloudWatch Logs](https://docs.aws.amazon.com/general/latest/gr/rande.html#cwl_region) 中列出。
+ 如果使用 Systems Manager 安装代理或使用 Parameter Store 存储配置文件，您必须允许列出相应区域的 Systems Manager 端点。这些端点在 *Amazon Web Services 一般参考* 的 [AWS Systems Manager](https://docs.aws.amazon.com/general/latest/gr/rande.html#ssm_region) 中列出。

## 将 CloudWatch 代理程序包下载到您的第一个实例
<a name="install-CloudWatch-Agent-EC2-first"></a>

使用以下步骤来使用 Systems Manager 下载 CloudWatch 代理软件包。

**使用 Systems Manager 下载 CloudWatch 代理**

1. 通过 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 打开 Systems Manager 控制台。

1. 在导航窗格中，选择 **Run Command**。

   –或者–

   如果打开了 AWS Systems Manager 主页，请向下滚动并选择 **Explore Run Command（浏览 Run Command）**。

1. 选择 **Run command（运行命令）**。

1. 在 **Command document（命令文档）**列表中，选择 **AWS-ConfigureAWSPackage**。

1. 在 **Targets（目标）**区域中，选择要在其上安装 CloudWatch 代理的实例。如果您没有看到特定实例，则可能未将其配置为可使用 Systems Manager 的托管式实例。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的[为混合环境设置 AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)。

1. 在**操作**列表中，选择**安装**。

1. 在 **Name (名称)** 字段中，输入 *AmazonCloudWatchAgent*。

1. 将 **Version (版本)** 设置为 **latest (最新)** 以安装最新版本的代理。

1. 选择**运行**。

1. （可选）在 **Targets and outputs（目标和输出）**区域中，选择实例名称旁边的按钮，然后选择 **View output（查看输出）**。Systems Manager 将显示已成功安装该代理。

   

## 创建和修改代理配置文件
<a name="CW-Agent-Instance-Create-Configuration-File-first"></a>

在下载 CloudWatch 代理后，您必须先创建配置文件，然后再在任何服务器上启动该代理。

如果您打算在 Systems Manager Parameter Store 中保存代理配置文件，则必须使用 EC2 实例以保存到 Parameter Store。此外，您必须首先使用 `CloudWatchAgentAdminRole` IAM 角色附加到该实例。有关附加角色的更多信息，请参阅《Amazon EC2 用户指南》**中的[将 IAM 角色附加到实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/iam-roles-for-amazon-ec2.html#attach-iam-role)。

有关创建 CloudWatch 代理配置文件的更多信息，请参阅 [创建 CloudWatch 代理配置文件](create-cloudwatch-agent-configuration-file.md)。

## 使用代理配置在其他 EC2 实例上安装和启动 CloudWatch 代理
<a name="install-CloudWatch-Agent-on-EC2-Instance-fleet"></a>

在 Parameter Store 中保存 CloudWatch 代理配置后，您可以在其他服务器上安装该代理时使用该配置。

对于每台服务器，请按照本节前面列出的步骤验证 Systems Manager 的先决条件、SSM 代理的版本和互联网访问权限。然后，使用您创建的 CloudWatch 代理配置文件，按照以下说明在其他实例上安装 CloudWatch 代理。

**步骤 1：下载和安装 CloudWatch 代理**

要能够将 CloudWatch 数据发送到其他区域，请确保您附加到此实例的 IAM 角色有权在该区域中写入 CloudWatch 数据。

下面是使用 `aws configure` 命令为 CloudWatch 代理创建命名配置文件的示例。该示例假设您使用默认配置文件名称 `AmazonCloudWatchAgent`。

**为 CloudWatch 代理创建 AmazonCloudWatchAgent 配置文件**
+ 在 Linux 服务器上，键入以下命令并按照提示进行操作：

  ```
  sudo aws configure --profile AmazonCloudWatchAgent
  ```

  在 Windows Server 上，以管理员身份打开 PowerShell，键入以下命令并按照提示进行操作。

  ```
  aws configure --profile AmazonCloudWatchAgent
  ```

## 使用代理配置在其他 EC2 实例上安装 CloudWatch 代理
<a name="install-CloudWatch-Agent-on-EC2-Instance-fleet"></a>

在 Parameter Store 中保存 CloudWatch 代理配置后，您可以在其他服务器上安装该代理时使用该配置。

对于每台服务器，请按照本节前面列出的步骤验证 Systems Manager 的先决条件、SSM 代理的版本和互联网访问权限。然后，使用您创建的 CloudWatch 代理配置文件，按照以下说明在其他实例上安装 CloudWatch 代理。

**步骤 1：下载和安装 CloudWatch 代理**

您需要在将要运行代理的每个服务器上安装代理。CloudWatch 代理在 Amazon Linux 2023 和 Amazon Linux 2 中，可作为软件包使用。如果您使用此操作系统，则可以通过执行以下步骤来使用 Systems Manager 安装该软件包。

**注意**  
您还必须确保附加到实例的 IAM 角色附加了 **CloudWatchAgentServerPolicy**。有关更多信息，请参阅 [先决条件](prerequisites.md)。

**要使用 Systems Manager 安装 CloudWatch 代理程序包**

1. 通过 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 打开 Systems Manager 控制台。

1. 在导航窗格中，选择 **Run Command**。

   –或者–

   如果打开了 AWS Systems Manager 主页，请向下滚动并选择 **Explore Run Command（浏览 Run Command）**。

1. 选择 **Run command（运行命令）**。

1. 在**命令文档**列表中，选择 **AWS-RunShellScript**。然后将以下内容粘贴到**命令参数**中。

   ```
   sudo yum install amazon-cloudwatch-agent
   ```

1. 选择**运行**。

在所有支持的操作系统中，您可以使用 Systems Manager Run Command 或 Amazon S3 下载链接下载 CloudWatch 代理程序包。

**注意**  
当您安装或更新 CloudWatch 代理时，仅支持 **Uninstall and reinstall**（卸载并重新安装）选项。您无法使用 **In-place update**（就地更新）选项。

Systems Manager Run Command 使您能够管理实例配置。您可以指定一个 Systems Manager 文档，指定一些参数，然后在一个或多个实例上执行命令。实例上的 SSM Agent 负责处理命令并按指定方式配置实例。

**使用 Run Command 下载 CloudWatch 代理**

1. 通过 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 打开 Systems Manager 控制台。

1. 在导航窗格中，选择 **Run Command**。

   –或者–

   如果打开了 AWS Systems Manager 主页，请向下滚动并选择 **Explore Run Command（浏览 Run Command）**。

1. 选择 **Run command（运行命令）**。

1. 在 **Command document（命令文档）**列表中，选择 **AWS-ConfigureAWSPackage**。

1. 在 **Targets（目标）**区域中，选择要在其上安装 CloudWatch 代理的实例。如果未看到特定的实例，则可能没有为 Run Command 配置该实例。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的[为混合环境设置 AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)。

1. 在**操作**列表中，选择**安装**。

1. 在 **Name (名称)** 框中，输入 *AmazonCloudWatchAgent*。

1. 将 **Version (版本)** 设置为 **latest (最新)** 以安装最新版本的代理。

1. 选择**运行**。

1. （可选）在 **Targets and outputs（目标和输出）**区域中，选择实例名称旁边的按钮，然后选择 **View output（查看输出）**。Systems Manager 将显示已成功安装该代理。

**步骤 2：使用您的代理配置文件启动 CloudWatch 代理**

使用 Systems Manager Run Command 执行以下步骤来启动代理。

有关如何在启用了安全增强型 Linux (SELinux) 的系统上设置代理的信息，请参阅[通过安全增强型 Linux (SELinux) 设置 CloudWatch 代理](CloudWatch-Agent-SELinux.md)。

**使用 Run Command 启动 CloudWatch 代理**

1. 通过 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 打开 Systems Manager 控制台。

1. 在导航窗格中，选择 **Run Command**。

   –或者–

   如果打开了 AWS Systems Manager 主页，请向下滚动并选择 **Explore Run Command（浏览 Run Command）**。

1. 选择 **Run command（运行命令）**。

1. 在**命令文档**列表中，选择 **AmazonCloudWatch-ManageAgent**。

1. 在 **Targets（目标）**区域中，选择安装了 CloudWatch 代理的实例。

1. 在**操作**列表中，选择**配置**。

1. 在**可选的配置源**列表中，选择 **ssm**。

1. 在**可选的配置位置**框中，输入您创建并保存到 Systems Manager Parameter Store 的代理配置文件的 Systems Manager 参数名称，如 [创建 CloudWatch 代理配置文件](create-cloudwatch-agent-configuration-file.md) 中所述。

1. 在完成这些步骤后，在**可选的重新启动**列表中选择**是**以启动该代理。

1. 选择**运行**。

1. （可选）在 **Targets and outputs（目标和输出）**区域中，选择实例名称旁边的按钮，然后选择 **View output（查看输出）**。Systems Manager 将显示已成功启动该代理。

## （可选）修改 CloudWatch 代理的通用配置和命名配置文件
<a name="CloudWatch-Agent-profile-instance-fleet"></a>

CloudWatch 代理包含一个名为 `common-config.toml` 的配置文件。您可以使用该文件指定代理和区域信息（可选）。

在运行 Linux 的服务器上，该文件位于 `/opt/aws/amazon-cloudwatch-agent/etc` 目录中。在运行 Windows Server 的服务器上，该文件位于 `C:\ProgramData\Amazon\AmazonCloudWatchAgent` 目录中。

默认 `common-config.toml` 如下所示：

```
# This common-config is used to configure items used for both ssm and cloudwatch access
 
 
## Configuration for shared credential.
## Default credential strategy will be used if it is absent here:
##            Instance role is used for EC2 case by default.
##            AmazonCloudWatchAgent profile is used for onPremise case by default.
# [credentials]
#    shared_credential_profile = "{profile_name}"
#    shared_credential_file= "{file_name}"
 
## Configuration for proxy.
## System-wide environment-variable will be read if it is absent here.
## i.e. HTTP_PROXY/http_proxy; HTTPS_PROXY/https_proxy; NO_PROXY/no_proxy
## Note: system-wide environment-variable is not accessible when using ssm run-command.
## Absent in both here and environment-variable means no proxy will be used.
# [proxy]
#    http_proxy = "{http_url}"
#    https_proxy = "{https_url}"
#    no_proxy = "{domain}"
```

最初将注释所有行。要设置凭证配置文件或代理设置，请从该行中删除 `#` 并指定一个值。您可以手动编辑该文件，或者使用 Systems Manager 中的 `RunShellScript` Run Command 执行该操作：
+ `shared_credential_profile` – 对于本地部署服务器，此行指定 IAM 用户凭证配置文件，以用于将数据发送到 CloudWatch。如果您将此行注释掉，则会使用 `AmazonCloudWatchAgent`。

  在 EC2 实例上，您可以使用此行让 CloudWatch 代理将数据从该实例发送到不同 AWS 区域中的 CloudWatch。要执行此操作，请指定一个包含 `region` 字段的命名配置文件，该字段指定要发送到的区域的名称。

  如果指定 `shared_credential_profile`，您还必须从 `[credentials]` 行开头删除 `#`。
+ `shared_credential_file` – 要让代理在位于默认路径以外的路径中的文件中查找凭证，请在此处指定完整的路径和文件名。在 Linux 上，默认路径为 `/root/.aws`；在 Windows Server 上，默认路径为 `C:\\Users\\Administrator\\.aws`。

  下面的第一个示例显示对 Linux 服务器有效的 `shared_credential_file` 行的语法，第二个示例对 Windows Server 有效。在 Windows Server 上，您必须转义 \$1 字符。

  ```
  shared_credential_file= "/usr/username/credentials"
  ```

  ```
  shared_credential_file= "C:\\Documents and Settings\\username\\.aws\\credentials"
  ```

  如果指定 `shared_credential_file`，您还必须从 `[credentials]` 行开头删除 `#`。
+ 代理设置 – 如果您的服务器使用 HTTP 或 HTTPS 代理联系 AWS 服务，请在 `http_proxy` 和 `https_proxy` 字段中指定这些代理。如果应从代理中排除某些 URL，请在 `no_proxy` 字段中指定这些 URL 并以逗号分隔。

# 在本地服务器上安装 CloudWatch 代理
<a name="install-CloudWatch-Agent-on-premise"></a>

 如果已在电脑上下载 CloudWatch 代理并创建了您的代理配置文件，您可以使用该配置文件在其他本地服务器中安装该代理。

## 在本地部署服务器上下载 CloudWatch 代理
<a name="download-CloudWatch-Agent-onprem"></a>

您可以使用 Systems Manager Run Command 或 Amazon S3 下载链接下载 CloudWatch 代理程序包。

### 使用 Systems Manager 下载
<a name="download-CloudWatch-Agent-onprem-fleet-sys"></a>

要使用 Systems Manager Run Command，您必须通过 Amazon EC2 Systems Manager 注册您的本地部署服务器。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的[在混合环境中设置 Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)。

如果已注册您的服务器，请将 SSM Agent 更新为最新版本。

有关在运行 Linux 的服务器上更新 SSM Agent 的信息，请参阅 *AWS Systems Manager 用户指南*中的[为混合环境安装 SSM Agent (Linux)](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html#sysman-install-managed-linux)。

有关在运行 Windows Server 的服务器上更新 SSM Agent 的信息，请参阅 *AWS Systems Manager 用户指南*中的[为混合环境安装 SSM Agent (Windows)](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html#sysman-install-managed-win)。

**使用 SSM Agent 在本地部署服务器上下载 CloudWatch 代理软件包**

1. 通过 [https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/) 打开 Systems Manager 控制台。

1. 在导航窗格中，选择 **Run Command**。

   –或者–

   如果打开了 AWS Systems Manager 主页，请向下滚动并选择 **Explore Run Command（浏览 Run Command）**。

1. 选择 **Run command（运行命令）**。

1. 在 **Command document（命令文档）**列表中，选择 **AWS-ConfigureAWSPackage** 旁边的按钮。

1. 在 **Targets（目标）**区域中，选择要在其上安装 CloudWatch 代理的服务器。如果未看到特定的服务器，则可能没有为 Run Command 配置该服务器。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的[为混合环境设置 AWS Systems Manager](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-managedinstances.html)。

1. 在**操作**列表中，选择**安装**。

1. 在 **Name (名称)** 框中，输入 *AmazonCloudWatchAgent*。

1. 将 **Version (版本)** 保留空白以安装最新版本的代理。

1. 选择**运行**。

   将下载代理软件包，后续步骤是配置并启动该代理。

## （安装在本地部署服务器上）指定 IAM 凭证和 AWS 区域
<a name="install-CloudWatch-Agent-iam_user-SSM-onprem"></a>

要使 CloudWatch 代理能够从本地部署服务器发送数据，您必须指定先前创建的 IAM 用户的访问密钥和私有密钥。

您还必须使用 `region` 字段指定要将指标发送到的 AWS 区域。

以下为该文件的示例。

```
[AmazonCloudWatchAgent]
aws_access_key_id=my_access_key
aws_secret_access_key=my_secret_key
region = us-west-1
```

对于 *my\$1access\$1key* 和 *my\$1secret\$1key*，请使用来自没有写入到 Systems Manager Parameter Store 权限的 IAM 用户的密钥。

如果您将此配置文件命名为 `AmazonCloudWatchAgent`，则无需执行任何操作。（可选）您可以为其指定一个不同的名称，并将该名称指定为 ` common-config.toml` 文件中的 `shared_credential_profile` 值（将在下一节中介绍）。

下面是使用 **aws configure** 命令为 CloudWatch 代理创建命名配置文件的示例。该示例假设您使用默认配置文件名称 `AmazonCloudWatchAgent`。

**为 CloudWatch 代理创建 AmazonCloudWatchAgent 配置文件**

1. 如果您还没有这样做，请在服务器上安装 AWS Command Line Interface。有关更多信息，请参阅[安装 AWS CLI](https://docs.aws.amazon.com/cli/latest/userguide/cli-chap-install.html)。

1. 在 Linux 服务器上，输入以下命令并按照提示进行操作：

   ```
   sudo aws configure --profile AmazonCloudWatchAgent
   ```

   在 Windows Server 上，以管理员身份打开 PowerShell，输入以下命令并按照提示进行操作。

   ```
   aws configure --profile AmazonCloudWatchAgent
   ```

## （可选）修改 CloudWatch 代理的通用配置和命名配置文件
<a name="CloudWatch-Agent-profile-onprem"></a>

CloudWatch 代理包含一个名为 `common-config.toml` 的配置文件。您可以（可选）使用该文件指定代理和区域信息。

在运行 Linux 的服务器上，该文件位于 `/opt/aws/amazon-cloudwatch-agent/etc` 目录中。在运行 Windows Server 的服务器上，该文件位于 `C:\ProgramData\Amazon\AmazonCloudWatchAgent` 目录中。

默认 `common-config.toml` 如下所示：

```
# This common-config is used to configure items used for both ssm and cloudwatch access
 
 
## Configuration for shared credential.
## Default credential strategy will be used if it is absent here:
##            Instance role is used for EC2 case by default.
##            AmazonCloudWatchAgent profile is used for onPremise case by default.
# [credentials]
#    shared_credential_profile = "{profile_name}"
#    shared_credential_file= "{file_name}"
 
## Configuration for proxy.
## System-wide environment-variable will be read if it is absent here.
## i.e. HTTP_PROXY/http_proxy; HTTPS_PROXY/https_proxy; NO_PROXY/no_proxy
## Note: system-wide environment-variable is not accessible when using ssm run-command.
## Absent in both here and environment-variable means no proxy will be used.
# [proxy]
#    http_proxy = "{http_url}"
#    https_proxy = "{https_url}"
#    no_proxy = "{domain}"
```

最初将注释所有行。要设置凭证配置文件或代理设置，请从该行中删除 `#` 并指定一个值。您可以手动编辑该文件，或者使用 Systems Manager 中的 `RunShellScript` Run Command 执行该操作：
+ `shared_credential_profile` – 对于本地部署服务器，此行指定 IAM 用户凭证配置文件，以用于将数据发送到 CloudWatch。如果您将此行注释掉，则会使用 `AmazonCloudWatchAgent`。有关创建此配置文件的更多信息，请参阅[（安装在本地部署服务器上）指定 IAM 凭证和 AWS 区域](#install-CloudWatch-Agent-iam_user-SSM-onprem)。

  在 EC2 实例上，您可以使用此行让 CloudWatch 代理将数据从该实例发送到不同 AWS 区域中的 CloudWatch。要执行此操作，请指定一个包含 `region` 字段的命名配置文件，该字段指定要发送到的区域的名称。

  如果指定 `shared_credential_profile`，您还必须从 `[credentials]` 行开头删除 `#`。
+ `shared_credential_file` – 要让代理在位于默认路径以外的路径中的文件中查找凭证，请在此处指定完整的路径和文件名。在 Linux 上，默认路径为 `/root/.aws`；在 Windows Server 上，默认路径为 `C:\\Users\\Administrator\\.aws`。

  下面的第一个示例显示对 Linux 服务器有效的 `shared_credential_file` 行的语法，第二个示例对 Windows Server 有效。在 Windows Server 上，您必须转义 \$1 字符。

  ```
  shared_credential_file= "/usr/username/credentials"
  ```

  ```
  shared_credential_file= "C:\\Documents and Settings\\username\\.aws\\credentials"
  ```

  如果指定 `shared_credential_file`，您还必须从 `[credentials]` 行开头删除 `#`。
+ 代理设置 – 如果您的服务器使用 HTTP 或 HTTPS 代理联系 AWS 服务，请在 `http_proxy` 和 `https_proxy` 字段中指定这些代理。如果应从代理中排除某些 URL，请在 `no_proxy` 字段中指定这些 URL 并以逗号分隔。

# 使用 CloudFormation 在新实例上安装 CloudWatch 代理
<a name="Install-CloudWatch-Agent-New-Instances-CloudFormation"></a>

 本节介绍如何使用 AWS CloudFormation 在新的 Amazon EC2 实例上安装 CloudWatch 代理。

**注意**  
 Amazon 已将若干 CloudFormation 模板上传到 GitHub，可帮助您在新的 Amazon EC2 实例上安装和更新 CloudWatch 代理。有关使用 CloudFormation 的更多信息，请参阅[什么是 AWS CloudFormation？](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/Welcome.html)。

模板位置为 [Deploy the Amazon CloudWatch agent to EC2 instances using CloudFormation（使用 Amazon CloudFormation 将 Amazon CloudWatch 代理部署到 EC2 实例）](https://github.com/aws-cloudformation/aws-cloudformation-templates/tree/main/Solutions/AmazonCloudWatchAgent)。此位置既包括 `inline` 又包括 `ssm` 目录。其中每个目录包含同时适用于 Linux 和 Windows 实例的模板。


+ `inline` 目录中的模板已将 CloudWatch 代理配置嵌入到 CloudFormation 模板中。默认情况下，Linux 模板收集指标 `mem_used_percent` 和 `swap_used_percent`，Windows 模板收集 `Memory % Committed Bytes In Use` 和 `Paging File % Usage`。

  要修改这些模板以收集不同的指标，请修改模板的以下部分。下面的示例来自 Linux 服务器的模板。按照代理配置文件的格式和语法来进行这些更改。有关更多信息，请参阅 [手动创建或编辑 CloudWatch 代理配置文件](CloudWatch-Agent-Configuration-File-Details.md)。

  ```
  {
     "metrics":{
        "append_dimensions":{
           "AutoScalingGroupName":"${!aws:AutoScalingGroupName}",
           "ImageId":"${!aws:ImageId}",
           "InstanceId":"${!aws:InstanceId}",
           "InstanceType":"${!aws:InstanceType}"
        },
        "metrics_collected":{
           "mem":{
              "measurement":[
                 "mem_used_percent"
              ]
           },
           "swap":{
              "measurement":[
                 "swap_used_percent"
              ]
           }
        }
     }
  }
  ```
**注意**  
在内联模板中，所有占位符变量必须具有感叹号 (\$1)，然后才能将它们作为一个转义字符。您可以在示例模板中看到此内容。如果您添加其他占位符变量，请务必在名称前添加一个感叹号。
+ `ssm` 目录中的模板从 Parameter Store 加载代理配置文件。要使用这些模板，您必须先创建配置文件并将其上传到 Parameter Store。然后，您可以提供模板中的文件的 Parameter Store 名称。您可以手动或使用向导来创建配置文件。有关更多信息，请参阅 [创建 CloudWatch 代理配置文件](create-cloudwatch-agent-configuration-file.md)。

您可以使用这两种类型的模板安装 CloudWatch 代理和更新代理配置。

有关如何在启用了安全增强型 Linux (SELinux) 的系统上设置代理的信息，请参阅[通过安全增强型 Linux (SELinux) 设置 CloudWatch 代理](CloudWatch-Agent-SELinux.md)。

## 教程：使用 CloudFormation 内联模板安装和配置 CloudWatch 代理
<a name="installing-CloudWatch-Agent-using-CloudFormation-Templates-inline"></a>

本教程将演练如何使用 CloudFormation 在新的 Amazon EC2 实例上安装 CloudWatch 代理。本教程使用内联模板在运行 Amazon Linux 2 的新实例上进行安装，这不要求使用 JSON 配置文件或 Parameter Store。内联模板在模板中包含代理配置。在本教程中，您将使用模板中包含的默认代理配置。

在介绍安装代理的过程之后，该教程继续说明如何更新代理。

**使用 CloudFormation 在新实例上安装 CloudWatch 代理**

1. 从 GitHub 下载模板。在本教程中，下载 Amazon Linux 2 的内联模板，如下所示：

   ```
   curl -O https://raw.githubusercontent.com/aws-cloudformation/aws-cloudformation-templates/main/Solutions/AmazonCloudWatchAgent/inline/amazon_linux.yaml
   ```

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择**创建堆栈**。

1. 对于**选择一个模板**，选择**将模板上传到 Amazon S3**，选择下载的模板，然后选择**下一步**。

1. 在 **Specify Details (指定详细信息)** 页面上，填写以下参数，然后选择 **Next (下一步)**：
   + **堆栈名称**：为 CloudFormation 堆栈选择堆栈名称。
   + **IAMRole**：选择一个 IAM 角色，该角色有权写入 CloudWatch 指标、日志和跟踪信息。有关更多信息，请参阅 [先决条件](prerequisites.md)。
   + **InstanceAMI**：选择在您将要启动堆栈的区域中有效的 AMI。
   + **InstanceType**：选择有效的实例类型。
   + **KeyName**：要对新实例启用 SSH 访问，请选择一个现有 Amazon EC2 密钥对。如果还没有 Amazon EC2 密钥对，可以在 AWS 管理控制台 中创建一个。有关更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。
   + **SSHLocation**：指定可用于通过 SSH 连接到实例的 IP 地址范围。默认情况下，允许从任何 IP 地址进行访问。

1. 在 **Options (选项)** 页面上，您可以选择为堆栈资源添加标签。选择**下一步**。

1. 在 **Review（审核）**页面上，审核您的信息，确认堆栈可创建 IAM 资源，然后选择 **Create（创建）**。

   如果您刷新控制台，您将看到新堆栈具有 `CREATE_IN_PROGRESS` 状态。

1. 创建实例时，您可以在 Amazon EC2 控制台中看到它。（可选）您可以连接到主机并检查进度。

   使用以下命令确认代理已安装：

   ```
   rpm -qa amazon-cloudwatch-agent
   ```

   使用以下命令确认代理正在运行：

   ```
   ps aux | grep amazon-cloudwatch-agent
   ```

以下过程演示如何使用 CloudFormation 通过内联模板更新 CloudWatch 代理。默认内联模板收集 `mem_used_percent` 指标。在本教程中，您将更改代理配置以停止收集该指标。

**使用 CloudFormation 更新 CloudWatch 代理**

1. 在上一个过程中下载的模板中，删除以下行，然后保存该模板：

   ```
   "mem": {
                           
        "measurement": [
            "mem_used_percent"
          ]
    },
   ```

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 在 CloudFormation 控制面板中，选择您创建的堆栈，然后选择 **Update Stack (更新堆栈)**。

1. 对于**选择模板**，选择**将模板上传到 Amazon S3**，选择修改的模板，然后选择**下一步**。

1. 在 **Options (选项)** 页面上，选择 **Next (下一步)**，然后选择 **Next (下一步)**。

1. 在**审核**页面上，审核您的信息，然后选择**更新**。

   经过一段时间后，您会看到 `UPDATE_COMPLETE`。

## 教程：使用 CloudFormation 和 Parameter Store 安装 CloudWatch
<a name="installing-CloudWatch-Agent-using-CloudFormation-Templates"></a>

本教程将演练如何使用 CloudFormation 在新的 Amazon EC2 实例上安装 CloudWatch 代理。本教程使用您在 Parameter Store 中创建并保存的代理配置文件，在运行 Amazon Linux 2 的新实例上进行安装。

在介绍安装代理的过程之后，该教程继续说明如何更新代理。

**使用 Parameter Store 中的配置通过 CloudFormation 在新实例上安装 CloudWatch 代理**

1. 如果您尚未执行此操作，请将 CloudWatch 代理软件包下载到您的某台电脑上，以便您可以创建代理配置文件。有关使用 Parameter Store 下载代理的更多信息，请参阅 [下载 CloudWatch 代理软件包](download-CloudWatch-Agent-on-EC2-Instance-commandline-first.md)。

1. 创建代理配置文件并将其保存在 Parameter Store 中。有关更多信息，请参阅 [创建 CloudWatch 代理配置文件](create-cloudwatch-agent-configuration-file.md)。

1. 从 GitHub 下载模板，如下所示：

   ```
   curl -O https://raw.githubusercontent.com/awslabs/aws-cloudformation-templates/master/aws/solutions/AmazonCloudWatchAgent/ssm/amazon_linux.template
   ```

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 选择**创建堆栈**。

1. 对于**选择一个模板**，选择**将模板上传到 Amazon S3**，选择您下载的模板，然后选择**下一步**。

1. 在 **Specify Details (指定详细信息)** 页面上，相应填写以下参数，然后选择 **Next (下一步)**：
   + **堆栈名称**：为 CloudFormation 堆栈选择堆栈名称。
   + **IAMRole**：选择一个 IAM 角色，该角色有权写入 CloudWatch 指标、日志和跟踪信息。有关更多信息，请参阅 [先决条件](prerequisites.md)。
   + **InstanceAMI**：选择在您将要启动堆栈的区域中有效的 AMI。
   + **InstanceType**：选择有效的实例类型。
   + **KeyName**：要对新实例启用 SSH 访问，请选择一个现有 Amazon EC2 密钥对。如果还没有 Amazon EC2 密钥对，可以在 AWS 管理控制台 中创建一个。有关更多信息，请参阅《Amazon EC2 用户指南》**中的 [Amazon EC2 密钥对](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ec2-key-pairs.html)。
   + **SSHLocation**：指定可用于通过 SSH 连接到实例的 IP 地址范围。默认情况下，允许从任何 IP 地址进行访问。
   + **SSMKey**：指定在 Parameter Store 中创建并保存的代理配置文件。

1. 在 **Options (选项)** 页面上，您可以选择为堆栈资源添加标签。选择**下一步**。

1. 在 **Review（审核）**页面上，审核您的信息，确认堆栈可创建 IAM 资源，然后选择 **Create（创建）**。

   如果您刷新控制台，您将看到新堆栈具有 `CREATE_IN_PROGRESS` 状态。

1. 创建实例时，您可以在 Amazon EC2 控制台中看到它。（可选）您可以连接到主机并检查进度。

   使用以下命令确认代理已安装：

   ```
   rpm -qa amazon-cloudwatch-agent
   ```

   使用以下命令确认代理正在运行：

   ```
   ps aux | grep amazon-cloudwatch-agent
   ```

以下过程演示如何使用 CloudFormation，通过您在 Parameter Store 中保存的代理配置更新 CloudWatch 代理。

**通过 CloudFormation 使用 Parameter Store 中的配置更新 CloudWatch 代理**

1. 将存储在 Parameter Store 中的代理配置文件更改为所需的新配置。

1. 在您于[教程：使用 CloudFormation 和 Parameter Store 安装 CloudWatch](#installing-CloudWatch-Agent-using-CloudFormation-Templates)主题中下载的 CloudFormation 模板中更改版本号。例如，您可能将 `VERSION=1.0` 更改为 `VERSION=2.0`。

1. 通过以下网址打开 CloudFormation 控制台：[https://console.aws.amazon.com/cloudformation](https://console.aws.amazon.com/cloudformation/)。

1. 在 CloudFormation 控制面板中，选择您创建的堆栈，然后选择 **Update Stack (更新堆栈)**。

1. 对于**选择模板**，选择**将模板上传到 Amazon S3**，选择您刚刚修改的模板，然后选择**下一步**。

1. 在 **Options (选项)** 页面上，选择 **Next (下一步)**，然后选择 **Next (下一步)**。

1. 在**审核**页面上，审核您的信息，然后选择**更新**。

   经过一段时间后，您会看到 `UPDATE_COMPLETE`。

## 对利用 CloudFormation 的 CloudWatch 代理安装进行故障排除
<a name="CloudWatch-Agent-CloudFormation-troubleshooting"></a>

本节帮助您排查使用 CloudFormation 安装和更新 CloudWatch 代理时出现的问题。

### 检测何时更新失败
<a name="CloudWatch-Agent-troubleshooting-Detecting-CloudFormation-update-issues"></a>

如果您使用 CloudFormation 更新您的 CloudWatch 代理配置并使用无效的配置，代理将停止向 CloudWatch 发送任何指标。检查代理配置更新是否成功的快速方法是查看 `cfn-init-cmd.log` 文件。在 Linux 服务器上，此文件位于 `/var/log/cfn-init-cmd.log`。在 Windows 实例上，此文件位于 `C:\cfn\log\cfn-init-cmd.log`。

### 指标缺失
<a name="CloudWatch-Agent-troubleshooting-Cloudformation-missing-metrics"></a>

如果您在安装或更新代理后没有看到预期会看到的指标，请确认代理配置为收集该指标。要执行此操作，请检查 `amazon-cloudwatch-agent.json` 文件，以确保该指标已列出，并且检查您是否可以在正确的指标命名空间中看到它。有关更多信息，请参阅 [CloudWatch 代理文件和位置](troubleshooting-CloudWatch-Agent.md#CloudWatch-Agent-files-and-locations)。

# 使用 Amazon CloudWatch Observability EKS 附加组件或 Helm 图表安装 CloudWatch 代理
<a name="install-CloudWatch-Observability-EKS-addon"></a>

您可以使用 Amazon CloudWatch 可观测性 EKS 加载项或 Amazon CloudWatch 可观测性 Helm 图表，在 Amazon EKS 集群上安装 CloudWatch 代理和 Fluent-bit 代理。您还可以使用 Helm 图表在未托管在 Amazon EKS 上的 Kubernetes 集群上安装 CloudWatch 代理和 Fluent-bit 代理。

默认情况下，在 Amazon EKS 集群上使用任一方法均可启用具有增强 Amazon EKS 可观测性的 [Container Insights](ContainerInsights.md) 和 [CloudWatch Application Signals](CloudWatch-Application-Monitoring-Sections.md)。这两项功能都可以帮助您从集群收集基础设施指标、应用程序性能遥测和容器日志。

在该附加组件的版本 `v6.0.1-eksbuild.1` 或更新版本中，将启用具有 OpenTelemetry 指标的 Container Insights，它使用 OpenTelemetry Protocol（OTLP）收集指标并支持 PromQL 查询。有关更多信息，请参阅 [适用于 Amazon EKS 的采用 OpenTelemetry 指标的 Container Insights](container-insights-otel-metrics.md)。

借助针对 Amazon EKS 增强了可观测性的 Container Insights，Container Insights 指标按每次观测收费，而不是按存储的指标或摄取的日志收费。对于 Application Signals，计费基于应用程序的入站请求、来自应用程序的出站请求以及每个配置的服务级别目标（SLO）。收到的每个入站请求都会生成一个应用程序信号，而发出的每个出站请求都会生成一个应用程序信号。每个 SLO 在每个测量周期内创建两个应用程序信号。有关 CloudWatch 定价的信息，请参阅 [Amazon CloudWatch 定价](https://aws.amazon.com/cloudwatch/pricing/)。

这两种方法均可在 Amazon EKS 集群中的 Linux 和 Windows Worker 节点上启用 Container Insights。要在 Windows 上启用 Container Insights，您必须使用 Amazon EKS 加载项或 Helm 图表的 1.5.0 版或更高版本。在 Amazon EKS 集群中，Windows 节点上暂不支持 Application Signals。

运行 Kubernetes 版本 1.23 或更高版本的 Amazon EKS 集群支持 Amazon CloudWatch Observability EKS 附加组件。

安装加载项或 Helm 图表时，还必须授予 IAM 权限，让 CloudWatch 代理能够向 CloudWatch 发送指标、日志和跟踪。有两种方式可执行此操作：
+ 将策略附加到 Worker 节点的 IAM 角色。此选项会向 Worker 节点授予向 CloudWatch 发送遥测数据的权限。
+ 对代理容器组（pod）的服务账户使用 IAM 角色，并将策略附加到此角色。这仅适用于 Amazon EKS 集群。此选项仅允许 CloudWatch 访问相应的代理容器组（pod）。

**Topics**
+ [

## 选项 1：使用 EKS 容器组身份进行安装
](#install-CloudWatch-Observability-EKS-pod-identity)
+ [

## 选项 2：使用 IAM 权限在 Worker 节点上进行安装
](#install-CloudWatch-Observability-EKS-addon-workernodes)
+ [

## 选项 3：使用 IAM 服务账户角色进行安装（仅适用于使用插件的情况）
](#install-CloudWatch-Observability-EKS-addon-serviceaccountrole)
+ [

## Amazon EKS 混合节点注意事项
](#install-CloudWatch-Observability-EKS-addon-hybrid)
+ [

## （可选）其他配置
](#install-CloudWatch-Observability-EKS-addon-configuration)
+ [

## 收集 Java 管理扩展（JMX）指标
](#install-CloudWatch-Observability-EKS-addon-JMX-metrics)
+ [

## 启用 Kueue 指标
](#enable-Kueue-metrics)
+ [

## 追加 OpenTelemetry 收集器配置文件
](#install-CloudWatch-Observability-EKS-addon-OpenTelemetry)
+ [

## 通过 Application Signals 为 Amazon EKS 集群启用 APM
](#Container-Insights-setup-EKS-appsignalsconfiguration)
+ [

## Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表问题排查
](#Container-Insights-setup-EKS-addon-troubleshoot)
+ [

## 选择退出 Application Signals
](#Opting-out-App-Signals)

## 选项 1：使用 EKS 容器组身份进行安装
<a name="install-CloudWatch-Observability-EKS-pod-identity"></a>

如果您使用的插件版本为 3.1.0 或更高版本，则可以使用 EKS 容器组身份向该插件授予所需的权限。推荐使用 EKS 容器组身份，它具有诸如最低权限、凭证轮换和可审计性等优点。此外，使用 EKS 容器组身份，您可以在集群创建过程中安装 EKS 插件。

要使用此方法，请先按照 [EKS 容器组身份关联](https://docs.aws.amazon.com/eks/latest/userguide/pod-id-association.html#pod-id-association-create/)步骤创建 IAM 角色并设置 EKS 容器组身份代理。

然后安装 Amazon CloudWatch Observability EKS 附加组件。要安装该插件，您可以使用 AWS CLI、Amazon EKS 控制台、CloudFormation 或 Terraform。

------
#### [ AWS CLI ]

**使用 AWS CLI 安装 Amazon CloudWatch Observability EKS 附加组件**  
输入以下命令。将 `my-cluster-name` 替换为您的集群名称，并将 *111122223333* 替换为您的账户 ID。将 *my-role* 替换为您在 EKS 容器组身份关联步骤中创建的 IAM 角色。

```
aws iam attach-role-policy \
--role-name my-role \
--policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy

aws eks create-addon \
--addon-name amazon-cloudwatch-observability \
--cluster-name my-cluster-name \
--pod-identity-associations serviceAccount=cloudwatch-agent,roleArn=arn:aws:iam::111122223333:role/my-role
```

------
#### [ Amazon EKS console ]

**使用 Amazon EKS 控制台添加 Amazon CloudWatch Observability EKS 附加组件**

1. 访问 [https://console.aws.amazon.com/eks/home\$1/clusters](https://console.aws.amazon.com/eks/home#/clusters) 打开 Amazon EKS 控制台。

1. 在左侧导航窗格中，选择**集群**。

1. 选择要为其配置 Amazon CloudWatch Observability EKS 附加组件的集群名称。

1. 选择**附加组件**选项卡。

1. 选择**获取更多附加组件**。

1. 在**选择附加组件**页面上，执行以下操作：

   1. 在 **Amazon EKS 插件**部分中，选中 **Amazon CloudWatch Observability** 复选框。

   1. 选择**下一步**。

1. 在**配置选定的附加组件设置**页面上，执行以下操作：

   1. 选择您想使用的 **Version（版本）**。

   1. 对于**插件访问权限**，请选择 **EKS 容器组身份**。

   1. 如果您没有配置 IAM 角色，请选择**创建推荐的角色**，然后选择**下一步**，直到进入**步骤 3 命名、查看和创建**。如果需要，您可以更改角色名称，否则请选择**创建角色**，然后返回到插件页面并选择您刚刚创建的 IAM 角色。

   1. （可选）展开**可选配置设置**。如果对**冲突解决方法**选择**覆盖**，则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项，并且与现有设置存在冲突，则操作将失败。您可以使用生成的错误消息对冲突进行故障排除。在选择此选项之前，请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。

   1. 选择**下一步**。

1. 在**查看和添加**页面上，选择**创建**。附加组件安装完成后，您将看到已安装的附加组件。

------
#### [ CloudFormation ]

**使用 CloudFormation 安装 Amazon CloudWatch Observability EKS 附加组件**

1. 首先，运行以下 AWS CLI 命令将 IAM 策略附加到您的 IAM 角色。将 *my-role* 替换为您在 EKS 容器组身份关联步骤中创建的角色。

   ```
   aws iam attach-role-policy \
   --role-name my-role \
   --policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
   ```

1. 然后创建以下资源。将 `my-cluster-name` 替换为您的集群名称，将 *111122223333* 替换为您的账户 ID，并将 *my-role* 替换为在 EKS 容器组身份关联步骤中创建的 IAM 角色。有关更多信息，请参阅 [AWS::EKS::Addon](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-addon.html)。

   ```
   {
       "Resources": {
           "EKSAddOn": {
               "Type": "AWS::EKS::Addon",
               "Properties": {
                   "AddonName": "amazon-cloudwatch-observability",
                   "ClusterName": "my-cluster-name",
                   "PodIdentityAssociations": [
                       {
                           "ServiceAccount": "cloudwatch-agent",
                           "RoleArn": "arn:aws:iam::111122223333:role/my-role"
                       }
                   ]
               }
           }
       }
   }
   ```

------
#### [ Terraform ]

**使用 Terraform 安装 Amazon CloudWatch Observability EKS 附加组件**

1. 按以下步骤操作。将 `my-cluster-name` 替换为您的集群名称，将 *111122223333* 替换为您的账户 ID，并将 *my-service-account-role* 替换为在 EKS 容器组身份关联步骤中创建的 IAM 角色。

   有关更多信息，请参阅 Terraform 文档中的 [Resource: aws\$1eks\$1addon](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_addon)。

1. 

   ```
   resource "aws_iam_role_policy_attachment" "CloudWatchAgentServerPolicy" {
     policy_arn = "arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy"
     role       = "my-role"
   }
   
   resource "aws_eks_addon" "example" {
     cluster_name = "my-cluster-name"
     addon_name   = "amazon-cloudwatch-observability"
     pod_identity_associations {
         roleArn = "arn:aws:iam::111122223333:role/my-role"
         serviceAccount = "cloudwatch-agent"
     }
   }
   ```

------

## 选项 2：使用 IAM 权限在 Worker 节点上进行安装
<a name="install-CloudWatch-Observability-EKS-addon-workernodes"></a>

要使用此方法，请先输入以下命令，将 **CloudWatchAgentServerPolicy** IAM 策略附加到您的 Worker 节点上。在此命令中，将 *my-worker-node-role* 替换为您的 Kubernetes Worker 节点使用的 IAM 角色。

```
aws iam attach-role-policy \
--role-name my-worker-node-role \
--policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy
```

然后安装 Amazon CloudWatch Observability EKS 附加组件。要安装该附加组件，您可以使用 AWS CLI、控制台、CloudFormation 或 Terraform。

------
#### [ AWS CLI ]

**使用 AWS CLI 安装 Amazon CloudWatch Observability EKS 附加组件**  
输入如下命令。将 `my-cluster-name` 替换为您的集群名称。

```
aws eks create-addon --addon-name amazon-cloudwatch-observability --cluster-name my-cluster-name
```

------
#### [ Amazon EKS console ]

**使用 Amazon EKS 控制台添加 Amazon CloudWatch Observability EKS 附加组件**

1. 访问 [https://console.aws.amazon.com/eks/home\$1/clusters](https://console.aws.amazon.com/eks/home#/clusters) 打开 Amazon EKS 控制台。

1. 在左侧导航窗格中，选择**集群**。

1. 选择要为其配置 Amazon CloudWatch Observability EKS 附加组件的集群名称。

1. 选择**附加组件**选项卡。

1. 选择**获取更多附加组件**。

1. 在**选择附加组件**页面上，执行以下操作：

   1. 在 **Amazon EKS 插件**部分中，选中 **Amazon CloudWatch Observability** 复选框。

   1. 选择**下一步**。

1. 在**配置选定的附加组件设置**页面上，执行以下操作：

   1. 选择您想使用的 **Version（版本）**。

   1. （可选）展开**可选配置设置**。如果对**冲突解决方法**选择**覆盖**，则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项，并且与现有设置存在冲突，则操作将失败。您可以使用生成的错误消息对冲突进行故障排除。在选择此选项之前，请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。

   1. 选择**下一步**。

1. 在**查看和添加**页面上，选择**创建**。附加组件安装完成后，您将看到已安装的附加组件。

------
#### [ CloudFormation ]

**使用 CloudFormation 安装 Amazon CloudWatch Observability EKS 附加组件**  
将 `my-cluster-name` 替换为您的集群名称。有关更多信息，请参阅 [AWS::EKS::Addon](https://docs.aws.amazon.com/AWSCloudFormation/latest/UserGuide/aws-resource-eks-addon.html)。

```
{
    "Resources": {
        "EKSAddOn": {
            "Type": "AWS::EKS::Addon",
            "Properties": {
                "AddonName": "amazon-cloudwatch-observability",
                "ClusterName": "my-cluster-name"
            }
        }
    }
}
```

------
#### [ Helm chart ]

**使用 `amazon-cloudwatch-observability` Helm 图表**

1. 您必须安装 Helm 才能使用此图表。有关安装 Helm 的更多信息，请参阅 [Helm 文档](https://helm.sh/docs/)。

1. 安装 Helm 后，输入以下命令。将 *my-cluster-name* 替换为集群的名称，并将 *my-cluster-region* 替换为集群在其中运行的区域。

   ```
   helm repo add aws-observability https://aws-observability.github.io/helm-charts
   helm repo update aws-observability
   helm install --wait --create-namespace --namespace amazon-cloudwatch amazon-cloudwatch-observability aws-observability/amazon-cloudwatch-observability --set clusterName=my-cluster-name --set region=my-cluster-region
   ```

------
#### [ Terraform ]

**使用 Terraform 安装 Amazon CloudWatch Observability EKS 附加组件**  
将 `my-cluster-name` 替换为您的集群名称。有关更多信息，请参阅 [Resource: aws\$1eks\$1addon](https://registry.terraform.io/providers/hashicorp/aws/latest/docs/resources/eks_ad)。

```
resource "aws_eks_addon" "example" {
  addon_name   = "amazon-cloudwatch-observability"
  cluster_name = "my-cluster-name"
}
```

------

## 选项 3：使用 IAM 服务账户角色进行安装（仅适用于使用插件的情况）
<a name="install-CloudWatch-Observability-EKS-addon-serviceaccountrole"></a>

仅当您使用的是 Amazon CloudWatch 可观测性 EKS 加载项时，此方法才有效。在使用此方法之前，请验证以下先决条件：
+ 在某个支持 Container Insights 的 AWS 区域 中，您具有运行正常并附加了节点的 Amazon EKS 集群。有关支持的区域列表，请参阅[Container Insights](ContainerInsights.md)。
+ 您已经为集群安装并配置 `kubectl`。有关更多信息，请参阅 *Amazon EKS 用户指南* 中的[安装 `kubectl`](https://docs.aws.amazon.com/eks/latest/userguide/install-kubectl.html)。
+ 您已安装 `eksctl`。有关更多信息，请参阅《Amazon EKS 用户指南》**中的[安装或更新 `eksctl`](https://docs.aws.amazon.com/eks/latest/userguide/eksctl.html)。

------
#### [ AWS CLI ]

**通过 AWS CLI 使用 IAM 服务账户角色安装 Amazon CloudWatch 可观测性 EKS 插件**

1. 如果集群还没有 OpenID Connect（OIDC）提供程序，请输入以下命令来创建一个。有关更多信息，请参阅《Amazon EKS 用户指南**》中的[配置 Kubernetes 服务账户以代入 IAM 角色](https://docs.aws.amazon.com/eks/latest/userguide/associate-service-account-role.html)。

   ```
   eksctl utils associate-iam-oidc-provider --cluster my-cluster-name --approve
   ```

1. 输入以下命令以创建附加了 **CloudWatchAgentServerPolicy** 策略的 IAM 角色，然后使用 OIDC 将代理服务账户配置为代入该角色。将 *my-cluster-name* 替换为您的集群名称，并将 *my-service-account-role* 替换为要将服务账户关联到的角色名称。如果角色尚不存在，`eksctl` 会为您创建它。

   ```
   eksctl create iamserviceaccount \
     --name cloudwatch-agent \
     --namespace amazon-cloudwatch --cluster my-cluster-name \
     --role-name my-service-account-role \
     --attach-policy-arn arn:aws:iam::aws:policy/CloudWatchAgentServerPolicy \
     --role-only \
     --approve
   ```

1. 通过输入以下命令安装附加组件。将 *my-cluster-name* 替换为您的集群名称，将 *111122223333* 替换为账户 ID，并将 *my-service-account-role* 替换为在上一步中创建的 IAM 角色。

   ```
   aws eks create-addon --addon-name amazon-cloudwatch-observability --cluster-name my-cluster-name --service-account-role-arn arn:aws:iam::111122223333:role/my-service-account-role
   ```

------
#### [ Amazon EKS console ]

**通过控制台使用 IAM 服务账户角色安装 Amazon CloudWatch 可观测性 EKS 插件**

1. 访问 [https://console.aws.amazon.com/eks/home\$1/clusters](https://console.aws.amazon.com/eks/home#/clusters) 打开 Amazon EKS 控制台。

1. 在左侧导航窗格中，选择**集群**。

1. 选择要为其配置 Amazon CloudWatch Observability EKS 附加组件的集群名称。

1. 选择**附加组件**选项卡。

1. 选择**获取更多附加组件**。

1. 在**选择附加组件**页面上，执行以下操作：

   1. 在 **Amazon EKS 插件**部分中，选中 **Amazon CloudWatch Observability** 复选框。

   1. 选择**下一步**。

1. 在**配置选定的附加组件设置**页面上，执行以下操作：

   1. 选择您想使用的 **Version（版本）**。

   1. 对于**插件访问权限**，选择**服务账户的 IAM 角色（IRSA）**

   1. 在**插件访问权限**框中选择 IAM 角色。

   1. （可选）展开**可选配置设置**。如果对**冲突解决方法**选择**覆盖**，则可能用 Amazon EKS 附加组件设置覆盖现有附加组件的一个或多个设置。如果不启用此选项，并且与现有设置存在冲突，则操作将失败。您可以使用生成的错误消息对冲突进行故障排除。在选择此选项之前，请确保 Amazon EKS 附加组件不会管理您需要自行管理的设置。

   1. 选择**下一步**。

1. 在**查看和添加**页面上，选择**创建**。附加组件安装完成后，您将看到已安装的附加组件。

------

## Amazon EKS 混合节点注意事项
<a name="install-CloudWatch-Observability-EKS-addon-hybrid"></a>

节点级指标不适用于混合节点，因为 [Container Insights](ContainerInsights.md) 取决于 [EC2 实例元数据服务（IMDS）](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/configuring-instance-metadata-service.html)对节点级指标的可用性。集群、工作负载、Pod 和容器级别指标适用于混合节点。

按照前面部分中的步骤安装附加组件后，必须更新附加组件清单，以便代理能够在混合节点上成功运行。编辑集群中的 `amazoncloudwatchagents` 资源，添加 `RUN_WITH_IRSA` 环境变量来与以下内容匹配。

```
kubectl edit amazoncloudwatchagents -n amazon-cloudwatch cloudwatch-agent
```

```
apiVersion: v1
       items:
       - apiVersion: cloudwatch.aws.amazon.com/v1alpha1
         kind: AmazonCloudWatchAgent
         metadata:
           ...
           name: cloudwatch-agent
           namespace: amazon-cloudwatch
           ...
         spec:
           ...
           env:
           - name: RUN_WITH_IRSA # <-- Add this
             value: "True" # <-- Add this
           - name: K8S_NODE_NAME
             valueFrom:
               fieldRef:
                 fieldPath: spec.nodeName
                 ...
```

## （可选）其他配置
<a name="install-CloudWatch-Observability-EKS-addon-configuration"></a>

**Topics**
+ [

### 选择不收集容器日志
](#CloudWatch-Observability-EKS-addon-OptOutContainerLogs)
+ [

### 使用自定义 Fluent Bit 配置
](#CloudWatch-Observability-EKS-addon-CustomFluentBit)
+ [

### 管理已安装容器组（pod）工作负载的 Kubernetes 容忍度
](#CloudWatch-Observability-EKS-addon-Tolerations)
+ [

### 选择退出加速计算指标收集
](#CloudWatch-Observability-EKS-addon-OptOutAccelerated)
+ [

### 使用自定义 CloudWatch 代理配置
](#CloudWatch-Observability-EKS-addon-CustomAgentConfig)
+ [

### 管理准入 webhook TLS 证书
](#CloudWatch-Observability-EKS-addon-Webhook)
+ [

### 收集 Amazon EBS 卷 ID
](#CloudWatch-Observability-EKS-addon-VolumeIDs)

### 选择不收集容器日志
<a name="CloudWatch-Observability-EKS-addon-OptOutContainerLogs"></a>

默认情况下，该附加组件使用 Fluent Bit 从所有容器组（pod）收集容器日志，然后将日志发送到 CloudWatch Logs。有关收集哪些日志的信息，请参阅 [设置 Fluent Bit](Container-Insights-setup-logs-FluentBit.md#Container-Insights-FluentBit-setup)。

**注意**  
加载项或 Helm 图表都不会管理集群中现有的 Fluentd 或 Fluent Bit 资源。在安装加载项或 Helm 图表之前，您可以删除现有的 Fluentd 或 Fluent Bit 资源。或者，要保留现有设置并避免加载项或 Helm 图表同时安装 Fluent Bit，您可以按照本节中的说明将其禁用。

要在使用 Amazon CloudWatch 可观测性 EKS 加载项时选择不收集容器日志，请在创建或更新加载项时传递以下选项：

```
--configuration-values '{ "containerLogs": { "enabled": false } }'
```

要在使用 Helm 图表时选择不收集容器日志，请在创建或更新加载项时传递以下选项：

```
--set containerLogs.enabled=false
```

### 使用自定义 Fluent Bit 配置
<a name="CloudWatch-Observability-EKS-addon-CustomFluentBit"></a>

从 Amazon CloudWatch 可观测性 EKS 加载项的 1.7.0 版本开始，您可以在创建或更新加载项或 Helm 图表时修改 Fluent Bit 配置。您可以在加载项高级配置的 `containerLogs` 根级别部分提供自定义 Fluent Bit 配置，或者在 Helm 图表中提供覆盖值。在本节中，您可以在 `config` 部分（Linux）或 `configWindows` 部分（Windows）中提供自定义 Fluent Bit 配置。`config` 进一步细分为以下子部分：
+ `service`：本部分表示用于定义 Fluent Bit 引擎全局行为的 `SERVICE` 配置。
+ `customParsers`：本部分表示您想要包含的任何全局 `PARSER`，其能够获取非结构化日志条目，并为这些条目提供结构，使其更易于处理和进一步筛选。
+ `extraFiles`：本部分可用于提供要包含的其他 Fluent Bit `conf` 文件。默认情况下，包含以下 3 个 `conf` 文件：
  + `application-log.conf`：用于将应用程序日志从您的集群发送到 CloudWatch Logs 中的日志组 `/aws/containerinsights/my-cluster-name/application` 的 `conf` 文件。
  + `dataplane-log.conf`：用于将与集群的数据面板组件（包括 CRI 日志、kubelet 日志、kube-proxy 日志和 Amazon VPC CNI 日志）对应的日志发送到 CloudWatch Logs 中的日志组 `/aws/containerinsights/my-cluster-name/dataplane` 的 `conf` 文件。
  + `host-log.conf`：用于将日志从 Linux 上的 `/var/log/dmesg`、`/var/log/messages`、`/var/log/secure` 以及 Windows 上的 System `winlogs` 发送到 CloudWatch Logs 中的日志组 `/aws/containerinsights/my-cluster-name/host` 的 `conf` 文件。

**注意**  
即使您只修改某个子部分的一个字段，也要为这些单独的部分提供完整配置。建议您使用下面提供的默认配置作为基准，然后对其进行相应的修改，这样您就不会禁用默认已启用的功能。在修改 Amazon EKS 加载项的高级配置或为 Helm 图表提供覆盖值时，您可以使用以下 YAML 配置。

要查找集群的 `config` 部分，请参阅 GitHub 上的 [aws-observability / helm-charts](https://github.com/aws-observability/helm-charts/releases)，并找到与您安装的加载项或 Helm 图表版本相对应的版本。然后导航到 `/charts/amazon-cloudwatch-observability/values.yaml`，在 `containerLogs` 下的 `fluentBit` 部分中找到 `config` 部分（Linux）和 `configWindows` 部分（Windows）。

例如，可以在[此处](https://github.com/aws-observability/helm-charts/blob/v1.7.0/charts/amazon-cloudwatch-observability/values.yaml#L44))找到版本 1.7.0 的默认 Fluent Bit 配置。

建议您在使用 Amazon EKS 加载项的高级配置提供 YAML 或者在安装 Helm 时将其作为覆盖值提供时，将 `config` 作为 YAML 提供。确保 YAML 符合以下结构。

```
containerLogs:
  fluentBit:
    config:
      service: |
        ...
      customParsers: |
        ...
      extraFiles:
        application-log.conf: |
          ...
        dataplane-log.conf: |
          ...
        host-log.conf: |
          ...
```

以下示例 `config` 将刷新间隔的全局设置更改为 45 秒。尽管唯一的修改是对 `Flush` 字段的修改，但您仍然必须为服务子部分提供完整的 `SERVICE` 定义。由于此示例未指定其他子部分的覆盖，因此将使用默认值。

```
containerLogs:
  fluentBit:
    config:
      service: |
        [SERVICE]
          Flush                     45
          Grace                     30
          Log_Level                 error
          Daemon                    off
          Parsers_File              parsers.conf
          storage.path              /var/fluent-bit/state/flb-storage/
          storage.sync              normal
          storage.checksum          off
          storage.backlog.mem_limit 5M
```

以下示例配置包含一个额外的 Fluent bit `conf` 文件。在此示例中，我们在 `extraFiles` 下添加一个自定义 `my-service.conf`，它将与三个默认 `extraFiles` 一起包含在内。

```
containerLogs:
  fluentBit:
    config:
      extraFiles:
        my-service.conf: |
          [INPUT]
            Name              tail
            Tag               myservice.*
            Path              /var/log/containers/*myservice*.log
            DB                /var/fluent-bit/state/flb_myservice.db
            Mem_Buf_Limit     5MB
            Skip_Long_Lines   On
            Ignore_Older      1d
            Refresh_Interval  10
          
          [OUTPUT]
            Name                cloudwatch_logs
            Match               myservice.*
            region              ${AWS_REGION}
            log_group_name      /aws/containerinsights/${CLUSTER_NAME}/myservice
            log_stream_prefix   ${HOST_NAME}-
            auto_create_group   true
```

下一个示例将从 `extraFiles` 中完全删除现有的 `conf` 文件。该示例用空字符串覆盖 `application-log.conf`，从而将其完全排除在外。仅仅忽略 `extraFiles` 的 `application-log.conf` 意味着使用默认值，这不是我们在本示例中尝试实现的目标。这同样适用于删除您之前可能已添加到 `extraFiles` 的任何自定义 `conf` 文件。

```
containerLogs:
  fluentBit:
    config:
      extraFiles:
        application-log.conf: ""
```

### 管理已安装容器组（pod）工作负载的 Kubernetes 容忍度
<a name="CloudWatch-Observability-EKS-addon-Tolerations"></a>

从 Amazon CloudWatch 可观测性 EKS 加载项的 1.7.0 版本开始，加载项和 Helm 图表默认将 Kubernetes *容忍度*设置为容忍加载项或 Helm 图表安装的容器组（pod）工作负载上的所有污点。这可确保 CloudWatch 代理和 Fluent Bit 等守护程序集默认可以在集群中的所有节点上安排容器组（pod）。有关污点和容忍度的更多信息，请参阅 Kubernetes 文档中的[污点和容忍度](https://kubernetes.io/docs/concepts/scheduling-eviction/taint-and-toleration/)。

加载项或 Helm 图表设置的默认容忍度如下：

```
tolerations:
- operator: Exists
```

您可以在使用加载项高级配置或安装或升级具有覆盖值的 Helm 图表时，通过在根级别设置 `tolerations` 字段来覆盖默认容忍度。示例将如下所示：

```
tolerations:
- key: "key1"
  operator: "Exists"
  effect: "NoSchedule"
```

要完全忽略容忍度，您可以使用如下配置：

```
tolerations: []
```

对容忍度的任何更改都将应用于加载项或 Helm 图表安装的所有容器组（pod）工作负载。

### 选择退出加速计算指标收集
<a name="CloudWatch-Observability-EKS-addon-OptOutAccelerated"></a>

默认情况下，具有增强可观测性的 Container Insights 会收集加速计算监控的指标，包括 NVIDIA GPU 指标、AWS Trainium 和 AWS Inferentia 的 AWS Neuron 指标以及 AWS Elastic Fabric Adapter（EFA）指标。

从 EKS 加载项或 Helm 图表的版本 `v1.3.0-eksbuild.1` 以及 CloudWatch 代理的版本 `1.300034.0` 开始，默认收集来自 Amazon EKS 工作负载的 NVIDIA GPU 指标。有关收集的指标和先决条件的列表，请参阅 [NVIDIA GPU 指标](Container-Insights-metrics-enhanced-EKS.md#Container-Insights-metrics-EKS-GPU)。

从 EKS 加载项或 Helm 图表的版本 `v1.5.0-eksbuild.1` 以及 CloudWatch 代理的版本 `1.300036.0` 开始，默认收集 AWS Trainium 和 AWS Inferentia 加速器的 AWS Neuron 指标。有关收集的指标和先决条件的列表，请参阅 [AWS Trainium 和 AWS Inferentia 的 AWS Neuron 指标](Container-Insights-metrics-enhanced-EKS.md#Container-Insights-metrics-EKS-Neuron)。

从 EKS 加载项或 Helm 图表的版本 `v1.5.2-eksbuild.1` 以及 CloudWatch 代理的版本 `1.300037.0` 开始，默认收集来自 Amazon EKS 集群 Linux 节点的 AWS Elastic Fabric Adapter（EFA）指标。有关收集的指标和先决条件的列表，请参阅 [AWS Elastic Fabric Adapter（EFA）指标](Container-Insights-metrics-enhanced-EKS.md#Container-Insights-metrics-EFA)。

您可以将 CloudWatch 代理配置文件中的 `accelerated_compute_metrics` 字段设置为 `false`，从而选择不收集这些指标。此字段位于 CloudWatch 配置文件中 `metrics_collected` 部分的 `kubernetes` 部分。以下是选择不收集的配置示例。有关如何使用自定义 CloudWatch 代理配置的更多信息，请参阅以下章节：[使用自定义 CloudWatch 代理配置](#CloudWatch-Observability-EKS-addon-CustomAgentConfig)。

```
{
  "logs": {
    "metrics_collected": {
      "kubernetes": {
        "enhanced_container_insights": true,
        "accelerated_compute_metrics": false
      }
    }
  }
}
```

### 使用自定义 CloudWatch 代理配置
<a name="CloudWatch-Observability-EKS-addon-CustomAgentConfig"></a>

要使用 CloudWatch 代理收集其他指标、日志或跟踪，您可以指定自定义配置，同时保持 Container Insights 和 CloudWatch Application Signals 处于启用状态。为此，请将 CloudWatch 代理配置文件嵌入到高级配置（您可以在创建或更新 EKS 加载项或 Helm 图表时使用该配置）代理键下的配置键中。以下是您未提供任何其他配置时的默认代理配置。

**重要**  
您使用其他配置设置提供的任何自定义配置都会覆盖代理使用的默认配置。请注意不要无意中禁用默认启用的功能，例如可观测性经增强的 Container Insights 和 CloudWatch Application Signals。在需要提供自定义代理配置的情况下，我们建议使用以下默认配置作为基准，然后对其进行相应的修改。
+ 使用 Amazon CloudWatch 可观测性 EKS 加载项

  ```
  --configuration-values '{
    "agent": {
      "config": {
        "logs": {
          "metrics_collected": {
            "application_signals": {},
            "kubernetes": {
              "enhanced_container_insights": true
            }
          }
        },
        "traces": {
          "traces_collected": {
            "application_signals": {}
          }
        }
      }
    }   
  }'
  ```
+ 使用 Helm 图表

  ```
  --set agent.config='{
    "logs": {
      "metrics_collected": {
        "application_signals": {},
        "kubernetes": {
          "enhanced_container_insights": true
        }
      }
    },
    "traces": {
      "traces_collected": {
        "application_signals": {}
      }
    }
  }'
  ```

以下示例显示了 Windows 上 CloudWatch 代理的默认代理配置。Windows 上的 CloudWatch 代理不支持自定义配置。

```
{
  "logs": {
    "metrics_collected": {
      "kubernetes": {
        "enhanced_container_insights": true
      },
    }
  }
}
```

### 管理准入 webhook TLS 证书
<a name="CloudWatch-Observability-EKS-addon-Webhook"></a>

Amazon CloudWatch 可观测性 EKS 加载项和 Helm 图表利用 Kubernetes [准入 webhook](https://kubernetes.io/docs/reference/access-authn-authz/extensible-admission-controllers/) 来验证和更改 `AmazonCloudWatchAgent` 和 `Instrumentation` 自定义资源（CR）请求，如果启用了 CloudWatch Application Signals，还可以选择在集群上验证和更改 Kubernetes 容器组（pod）请求。在 Kubernetes 中，webhook 需要一个 TLS 证书，API 服务器配置为信任该证书，以确保安全通信。

默认情况下，Amazon CloudWatch 可观测性 EKS 加载项和 Helm 图表会自动生成自签名 CA 和由此 CA 签名的 TLS 证书，以确保 API 服务器和 webhook 服务器之间的安全通信。此自动生成的证书的默认有效期为 10 年，到期后不会自动续订。此外，每次升级或重新安装加载项或 Helm 图表时，都会重新生成 CA 捆绑包和证书，从而重置有效期。如果要更改自动生成的证书的默认有效期，则可以在创建或更新附加组件时使用以下其他配置。将 *expiry-in-days* 替换为所需的有效期持续时间（以天为单位）。
+ 将此内容用于 Amazon CloudWatch 可观测性 EKS 加载项

  ```
  --configuration-values '{ "admissionWebhooks": { "autoGenerateCert": { "expiryDays": expiry-in-days } } }' 
  ```
+ 将此内容用于 Helm 图表

  ```
  --set admissionWebhooks.autoGenerateCert.expiryDays=expiry-in-days
  ```

为了获得更安全、功能更丰富的证书颁发机构解决方案，该附加组件支持选择加入 [cert-manager](https://cert-manager.io/docs/)，这是一种在 Kubernetes 中广泛采用的 TLS 证书管理解决方案，可简化获取、续订、管理和使用这些证书的过程。此解决方案可确保证书有效且最新，并尝试在证书到期前的配置时间续订证书。cert-manager 还便于从各种支持的来源（包括 [AWS Certificate Manager 私有证书颁发机构](https://aws.amazon.com/private-ca/)）颁发证书。

我们建议您查看集群上管理 TLS 证书的最佳实践，并建议您选择使用针对生产环境的 cert-manager。请注意，如果您通过选择加入来启用 cert-manager，以便管理准入 webhook TLS 证书，则您需要在安装 Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表之前，在 Amazon EKS 集群上预安装 cert-manager。有关可用安装选项的更多信息，请参阅 [cert-manager 文档](https://cert-manager.io/docs/installation/)。安装完成后，您可以使用以下附加配置选择使用 cert-manager 来管理准入 webhook TLS 证书。
+ 如果使用 Amazon CloudWatch 可观测性 EKS 加载项

  ```
  --configuration-values '{ "admissionWebhooks": { "certManager": { "enabled": true } } }' 
  ```
+ 如果您使用的是 Helm 图表

  ```
  --set admissionWebhooks.certManager.enabled=true
  ```

```
--configuration-values '{ "admissionWebhooks": { "certManager": { "enabled": true } } }' 
```

默认情况下，本节中讨论的高级配置将使用 [SelfSigned](https://cert-manager.io/docs/configuration/selfsigned/) 颁发者。

### 收集 Amazon EBS 卷 ID
<a name="CloudWatch-Observability-EKS-addon-VolumeIDs"></a>

如果您希望在性能日志中收集 Amazon EBS 卷 ID，则必须向附加到 Worker 节点或服务账户的 IAM 角色添加另一个策略。添加以下内容作为内联策略。有关更多信息，请参阅[添加和删除 IAM 身份权限](https://docs.aws.amazon.com/IAM/latest/UserGuide/access_policies_manage-attach-detach.html)。

------
#### [ JSON ]

****  

```
{
    "Version":"2012-10-17",		 	 	 
    "Statement": [
        {
            "Action": [
                "ec2:DescribeVolumes"
            ],
            "Resource": "*",
            "Effect": "Allow"
        }
    ]
}
```

------

## 收集 Java 管理扩展（JMX）指标
<a name="install-CloudWatch-Observability-EKS-addon-JMX-metrics"></a>

CloudWatch 代理支持在 Amazon EKS 上收集 Java 管理扩展（JMX）指标。这允许从在 Amazon EKS 集群上运行的 Java 应用程序中收集其他指标，从而深入了解性能、内存使用情况、流量和其他关键指标。有关更多信息，请参阅 [收集 Java 管理扩展（JMX）指标](CloudWatch-Agent-JMX-metrics.md)。

## 启用 Kueue 指标
<a name="enable-Kueue-metrics"></a>

从 CloudWatch 可观测性 EKS 附加组件的 `v2.4.0-eksbuild.1` 版本开始，适用于 Amazon EKS 的 Container Insights 支持从 Amazon EKS 集群收集 Kueue 指标。有关这些指标的更多信息，请参阅 [Kueue 指标](Container-Insights-metrics-EKS.md#Container-Insights-metrics-Kueue)。

如果使用的是 Amazon SageMaker AI Hyperpod Task Governance EKS 附加组件，则可以跳过**先决条件**部分中的步骤，只需按照[启用配置标志](#enable-Kueue-metrics-flag)中的步骤操作即可。

### 先决条件
<a name="enable-Kueue-metrics-prerequisites"></a>

在 Amazon EKS 集群中安装 Kueue 之前，请在清单文件中进行以下更新：

1. 为 Kueue 启用可选的集群队列资源指标。为此，请修改 `kueue-system` ConfigMap 中的内联 `controller_manager_config.yaml`。在 `metrics` 部分中，添加或取消注释行 `enableClusterQueueResources: true`。

   ```
   apiVersion: v1
   data:
     controller_manager_config.yaml: |
       apiVersion: config.kueue.x-k8s.io/v1beta1
       kind: Configuration
       health:
         healthProbeBindAddress: :8081
       metrics:
         bindAddress: :8080
         enableClusterQueueResources: true  <-- ADD/UNCOMMENT THIS LINE
   ```

1. 默认情况下，所有 `k8s` 服务均可在集群范围内使用。Kueue 创建了用于公开指标的服务 `kueue-controller-manager-metrics-service`。为防止重复观察指标，请修改此服务，仅允许从同一节点访问指标服务。为此，请将行 `internalTrafficPolicy: Local` 添加到 `kueue-controller-manager-metrics-service` 定义。

   ```
   apiVersion: v1
   kind: Service
   metadata:
     labels:
       ...
     name: kueue-controller-manager-metrics-service
     namespace: kueue-system
   spec:
     ports:
     - name: https
       port: 8443
       protocol: TCP
       targetPort: https
     internalTrafficPolicy: Local   <-- ADD THIS LINE
     selector:
       control-plane: controller-manager
   ```

1. 最后，`kueue-controller-manager` 容器组（pod）会创建 `kube-rbac-proxy` 容器。此容器当前具有高级别的日志记录详细程度，这会导致指标抓取程序访问 `kueue-controller-manager-metrics-service` 时，容器会记录集群的持有者令牌。我们建议您降低日志记录的详细程度。Kueue 分发的清单中的默认值为 10，我们建议将其更改为 0。

   ```
   apiVersion: apps/v1
   kind: Deployment
   metadata:
     labels:
       ...
     name: kueue-controller-manager
     namespace: kueue-system
   spec:
     ...
     template:
       ...
       spec:
         containers:
         ...
         - args:
           - --secure-listen-address=0.0.0.0:8443
           - --upstream=http://127.0.0.1:8080/
           - --logtostderr=true
           - --v=0  <-- CHANGE v=10 TO v=0
           image: gcr.io/kubebuilder/kube-rbac-proxy:v0.8.0
           name: kube-rbac-proxy
           ...
   ```

### 启用配置标志
<a name="enable-Kueue-metrics-flag"></a>

要启用 Kueue 指标，您必须在附加组件其他配置中启用 `kueue_container_insights`。可以通过使用 AWS CLI 来设置 EKS 可观测性附加组件，也可以使用 Amazon EKS 控制台来执行此操作。

使用以下方法之一成功安装 EKS 可观测性附加组件后，可以在 HyperPod 控制台**控制面板**选项卡下查看 Amazon EKS 集群指标。

------
#### [ AWS CLI ]

**使用 AWS CLI 启用 Kueue 指标**
+ 输入以下 AWS CLI 命令来安装附加组件。

  ```
  aws eks create-addon --cluster-name cluster-name --addon-name amazon-cloudwatch-observability --configuration-values "configuration_json_file"
  ```

  以下是包含配置值的 JSON 文件示例。

  ```
  {
      "agent": {
          "config": {
              "logs": {
                  "metrics_collected": {
                      "kubernetes": {
                          "kueue_container_insights": true,
                          "enhanced_container_insights": true
                      },
                      "application_signals": { }
                  }
              },
              "traces": {
                  "traces_collected": {
                      "application_signals": { }
                  }
              }
          },
      },
  }
  ```

------
#### [ Amazon EKS console ]

**使用 Amazon EKS 控制台启用 Kueue 指标**

1. 从以下位置打开 Amazon EKS 控制台：[https://console.aws.amazon.com/eks/home\$1/clusters](https://console.aws.amazon.com/eks/home#/clusters)。

1. 选择集群的名称。

1. 选择**附加组件**。

1. 在列表中找到 **Amazon CloudWatch 可观测性**附加组件，然后安装。执行此操作时，请选择**可选配置**并包含以下 JSON 配置值。

   ```
   {
       "agent": {
           "config": {
               "logs": {
                   "metrics_collected": {
                       "kubernetes": {
                           "kueue_container_insights": true,
                           "enhanced_container_insights": true
                       },
                       "application_signals": { }
                   }
               },
               "traces": {
                   "traces_collected": {
                       "application_signals": { }
                   }
               }
           },
       },
   }
   ```

------

## 追加 OpenTelemetry 收集器配置文件
<a name="install-CloudWatch-Observability-EKS-addon-OpenTelemetry"></a>

除了自己的配置文件外，CloudWatch 代理还支持补充的 OpenTelemetry 收集器配置文件。此功能允许通过 CloudWatch 代理配置使用 CloudWatch Application Signals 或 Container Insights 等 CloudWatch 代理功能，并借助单个代理引入现有的 OpenTelemetry 收集器配置。

为防止与 CloudWatch 代理自动创建的管道发生合并冲突，我们建议为 OpenTelemetry 收集器配置中的每个组件和管道添加自定义后缀。这可防止冲突和合并冲突。
+ 如果使用 Amazon CloudWatch 可观测性 EKS 加载项

  ```
  --configuration-values file://values.yaml
  ```

  或者

  ```
  --configuration-values '
    agent:
      otelConfig:
        receivers:
          otlp/custom-suffix:
            protocols:
              http: {}
        exporters:
          awscloudwatchlogs/custom-suffix:
            log_group_name: "test-group"
            log_stream_name: "test-stream"
        service:
          pipelines:
            logs/custom-suffix:
              receivers: [otlp/custom-suffix]
              exporters: [awscloudwatchlogs/custom-suffix]
  '
  ```
+ 如果您使用的是 Helm 图表

  ```
  --set agent.otelConfig='
    receivers:
      otlp/custom-suffix:
        protocols:
          http: {}
    exporters:
      awscloudwatchlogs/custom-suffix:
        log_group_name: "test-group"
        log_stream_name: "test-stream"
    service:
      pipelines:
        logs/custom-suffix:
          receivers: [otlp/custom-suffix]
          exporters: [awscloudwatchlogs/custom-suffix]
  '
  ```

## 通过 Application Signals 为 Amazon EKS 集群启用 APM
<a name="Container-Insights-setup-EKS-appsignalsconfiguration"></a>

默认情况下，在安装 CloudWatch 可观测性 EKS 附加组件（V5.0.0 或更高版本）或 Helm 图表时，会通过 Application Signals 启用基于 OpenTelemetry（OTEL）的应用程序性能监控（APM）。您可以使用 Amazon EKS 附加组件的高级配置或通过 Helm 图表覆盖值，进一步自定义特定设置。

**注意**  
如果您使用任何基于 OpenTelemetry（OTEL）的 APM 解决方案，启用 Application Signals 将会影响现有的可观测性设置。在继续操作之前，先检查当前的实施情况。若需在升级到 5.0.0 及更高版本后保留原有 APM 配置，请参阅[选择退出 Application Signals](#Opting-out-App-Signals)。

**Application Signals 自动监控**

CloudWatch 可观测性 Amazon EKS 附加组件 5.0.0 版和 Helm 图表引入了新功能。现在，支持通过“自动监控”配置为 EKS 集群中的所有或特定服务工作负载自动启用 Application Signals。以下 `autoMonitor` 设置可在高级配置 `manager` 部分下的 `applicationSignals` 部分中指定。
+ *monitorAllServices*：一个布尔值标志，用于启用 (true) 或禁用 (false)“自动监控”功能对所有服务工作负载的监控。默认值为 true。启用此标志可确保集群中所有映射到 Kubernetes Service 的 Kubernetes 工作负载（部署、DaemonSets 和 StatefulSets）在首次启动时（或为现有工作负载重新启动时），都纳入自动启用 Application Signals 的范围。系统默认排除 `kube-system` 和 `amazon-cloudwatch` 命名空间中的工作负载。
+ *languages*：一个字符串列表，用于指定启用 `monitorAllServices` 后，Application Signals 将尝试使用哪组语言自动检测服务。默认设置为所有[支持的语言](https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-Application-Monitoring-Sections.html)。
+ *restartPods*：一个布尔值标志，用于控制配置更改后是否重新启动工作负载。默认值为 false。将此标志设置为 `true` 可在保存配置更改时，控制“自动监控”范围内的 Kubernetes 工作负载是否自动重新启动。Kubernetes 工作负载上任何影响容器组（pod）重新启动的设置（如 `updateStrategy`）都将被考虑在内。请注意，重新启动可能会导致服务中断。
+ *customSelector*：一个设置，用于为“自动监控”选择特定 Kubernetes 命名空间或工作负载。
  + *java*：指定要使用 Java 自动检测的工作负载
  + *python*：指定要使用 Python 自动检测的工作负载
  + *nodejs*：指定要使用 Node.js 自动检测的工作负载
  + *dotnet*：指定要使用 .NET 自动检测的工作负载

  可就上述每种语言配置以下字段。
  + *namespaces*：一个字符串列表，用于指定要选择的命名空间。默认值为空列表，即 []
  + *deployments*：一个字符串列表，用于指定要选择的部署。以 `namespace/deployment` 格式指定。默认值为空列表，即 []
  + *daemonsets*：一个字符串列表，用于指定要选择的 daemonsets。以 `namespace/daemonset` 格式指定。默认值为空列表，即 []
  + *statefulsets*：一个字符串列表，用于指定要选择的 statefulsets。以 `namespace/statefulset` 格式指定。默认值为空列表，即 []
+ *exclude*：一个设置，用于从“自动监控”中排除特定的 Kubernetes 命名空间或工作负载。当同一工作负载也处于 `monitorAllServices` 或 `customSelector` 范围内时，将优先排除该工作负载。
  + *java*：指定要排除在使用 Java 自动检测之外的工作负载
  + *python*：指定要排除在使用 Python 自动检测之外的工作负载
  + *nodejs*：指定要排除在使用 Node.js 自动检测之外的工作负载
  + *dotnet*：指定要排除在使用 .NET 自动检测之外的工作负载

  可就上述每种语言配置以下字段。
  + *namespaces*：一个字符串列表，用于指定要排除的命名空间。默认值为空列表，即 []
  + *deployments*：一个字符串列表，用于指定要排除的部署。以 `namespace/deployment` 格式指定。默认值为空列表，即 []
  + *daemonsets*：一个字符串列表，用于指定要排除的 daemonsets。以 `namespace/daemonset` 格式指定。默认值为空列表，即 []
  + *statefulsets*：一个字符串列表，用于指定要排除的 statefulsets。以 `namespace/statefulset` 格式指定。默认值为空列表，即 []

以下是一个示例配置，该配置会自动为集群上所有现有和新的服务工作负载启用 Application Signals。

```
manager:
  applicationSignals:
    autoMonitor:
      monitorAllServices: true
      restartPods: true
```

以下是一个示例配置，该配置会自动为集群上启动的任何新服务工作负载以及显式重启的任何现有服务工作负载启用 Application Signals。

```
manager:
  applicationSignals:
    autoMonitor:
      monitorAllServices: true
```

以下是一个示例配置，该配置会使用 Java，自动为所有与 `pet-warehouse` 命名空间中工作负载对应的现有和新的容器组（pod）启用 Application Signals。

```
manager:
  applicationSignals:
    autoMonitor:
      restartPods: true
      customSelector:
        java:
          namespaces: ["pet-warehouse"]
```

以下是一个示例配置，该配置会使用 Python，自动为集群中除 `pet-clinic` 部署之外的所有现有和新的服务工作负载启用 Application Signals。

```
manager:
  applicationSignals:
    autoMonitor:
      monitorAllServices: true
      languages: ["python"]
      restartPods: true
      exclude:
        python:
          deployments: ["pet-warehouse/pet-clinic"]
```

以下是一个示例配置，该配置会使用 Java，自动为集群中除 `python-apps` 命名空间中的服务工作负载之外的所有服务工作负载启用 Application Signals；该配置还会使用 Python，针对 `python-apps` 命名空间中的 `sample-python-app` 部署进一步启用 Application Signals。

```
manager:
  applicationSignals:
    autoMonitor:
      monitorAllServices: true
      languages: ["java"]
      restartPods: true
      customSelector:
        python:
          deployments: ["python-apps/sample-python-app"]
      exclude:
        java:
          namespaces: ["python-apps"]
```

## Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表问题排查
<a name="Container-Insights-setup-EKS-addon-troubleshoot"></a>

可以使用以下信息帮助对 Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表的问题进行排查

**Topics**
+ [

### 更新和删除 Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表
](#EKS-addon-troubleshoot-update)
+ [

### 验证 Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表使用的 CloudWatch 代理版本
](#EKS-addon-troubleshoot-version)
+ [

### 管理加载项或 Helm 图表时处理 ConfigurationConflict
](#EKS-addon-troubleshoot-conflict)

### 更新和删除 Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表
<a name="EKS-addon-troubleshoot-update"></a>

有关更新或删除 Amazon CloudWatch Observability EKS 附加组件的说明，请参阅[管理 Amazon EKS 附加组件](https://docs.aws.amazon.com/eks/latest/userguide/managing-add-ons.html)。使用 `amazon-cloudwatch-observability` 作为附加组件的名称。

要删除集群中的 Helm 图表，请输入以下命令。

```
helm delete amazon-cloudwatch-observability -n amazon-cloudwatch --wait
```

### 验证 Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表使用的 CloudWatch 代理版本
<a name="EKS-addon-troubleshoot-version"></a>

Amazon CloudWatch 可观测性 EKS 加载项和 Helm 图表安装 `AmazonCloudWatchAgent` 类型的自定义资源，用于控制集群上 CloudWatch 代理守护程序集的行为，包括正在使用的 CloudWatch 代理的版本。您可以通过输入以下命令获取集群 u 上安装的所有 `AmazonCloudWatchAgent` 自定义资源的列表：

```
kubectl get amazoncloudwatchagent -A
```

在此命令的输出中，您应该能够检查 CloudWatch 代理的版本。或者，您也可以描述集群上运行的 `amazoncloudwatchagent` 资源或其中一个 `cloudwatch-agent-*` 容器组（pod）来检查正在使用的映像。

### 管理加载项或 Helm 图表时处理 ConfigurationConflict
<a name="EKS-addon-troubleshoot-conflict"></a>

在安装或更新 Amazon CloudWatch 可观测性 EKS 加载项或 Helm 图表时，如果您发现故障是由现有资源引起的，这可能是因为您已经在集群上安装了 CloudWatch 代理及其相关组件，例如 ServiceAccount、ClusterRole 和 ClusterRoleBinding。

加载项显示的错误将包括 `Conflicts found when trying to apply. Will not continue due to resolve conflicts mode`，

Helm 图表显示的错误将类似 `Error: INSTALLATION FAILED: Unable to continue with install and invalid ownership metadata.`。

当加载项或 Helm 图表尝试安装 CloudWatch 代理及其关联组件时，如果检测到内容有任何变化，在默认情况下这会使安装或更新失败，以避免覆盖集群上资源的状态。

如果您正在尝试载入 Amazon CloudWatch 可观测性 EKS 加载项，但出现此故障，则建议您删除之前在集群上安装的现有 CloudWatch 代理设置，然后安装 EKS 加载项或 Helm 图表。请务必备份您可能对原始 CloudWatch 代理设置所做的任何自定义，例如自定义代理配置，并在下次安装或更新时将其提供给加载项或 Helm 图表。如果您之前安装了 CloudWatch 代理以载入 Container Insights，请参阅 [删除 Container Insights 的 CloudWatch 代理和 Fluent Bit](ContainerInsights-delete-agent.md) 获取更多信息。

或者，该附加组件支持具有指定 `OVERWRITE` 功能的冲突解决配置选项。您可以使用此选项，通过覆盖集群上的冲突来继续安装或更新附加组件。如果您使用的是 Amazon EKS 控制台，则在创建或更新附加组件时选择**可选配置设置**时，会找到**冲突解决方法**。如果您使用的是 AWS CLI，则可以在命令中提供 `--resolve-conflicts OVERWRITE`，以创建或更新附加组件。

## 选择退出 Application Signals
<a name="Opting-out-App-Signals"></a>

通过 CloudWatch 控制台或使用 SDK 微调服务监控首选项。

对于 5.0.0 之前的版本，若要禁用 Application Signals 自动监控，请按照以下步骤操作：

**使用 CLI 或 SDK**

以下配置可以作为高级配置应用于 EKS 附加组件，也可以在使用 Helm 图表时作为值覆盖。

```
{
  "manager": {
    "applicationSignals": {
      "autoMonitor": {
        "monitorAllServices": false
      }
    }
  }
}
```

重启服务，使更改生效。

**使用控制台**

通过 [https://console.aws.amazon.com/cloudwatch/](https://console.aws.amazon.com/cloudwatch/) 打开 CloudWatch 控制台。

1. 在导航窗格中的 **Application Signals（APM）**下，选择**服务**。

1.  选择**启用 Application Signals** 以查看启用页面。

1. 清除不想监控的每项服务的**自动监控**复选框。

1. 重启服务，使更改生效。