

# 使用 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)。