

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 快速入门：允许运行 Windows Server 2016 的 Amazon EC2 实例使用 CloudWatch 日志代理向 CloudWatch 日志发送日志
<a name="QuickStartWindows2016"></a>

**提示**  
CloudWatch 包括一个新的统一代理，可以从 EC2 实例和本地服务器收集日志和指标。我们建议您使用较新的统一 CloudWatch 代理。有关更多信息，请参阅 [CloudWatch 日志入门](CWL_GettingStarted.md)。  
本节的其余部分将介绍使用较旧的 CloudWatch Logs 代理。

## 允许运行 Windows Server 2016 的 Amazon EC2 实例使用较旧的 CloudWatch 日志代理向 CloudWatch 日志发送日志
<a name="QuickStartWindows2016-olderagent"></a>

您可以使用多种方法使运行 Windows Server 2016 的实例能够将日志发送到 CloudWatch 日志。此部分中的步骤使用 Systems Manager Run Command。有关其他可能方法的信息，请参阅[向 Amazon 发送日志、事件和性能计数器 CloudWatch](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/send_logs_to_cwl.html)。

**Topics**
+ [下载示例配置文件](#configure_cwl_download)
+ [配置 JSON 文件用于 CloudWatch](#send_logs_to_cwl_json)
+ [为 Systems Manager 创建 IAM 角色](#iam_permissions)
+ [验证 Systems Manager 的先决条件](#send_logs_cwl_syspre)
+ [验证 Internet 访问权限](#send_logs_cwl_internet)
+ [使用 Systems Manager 运行命令启用 CloudWatch 日志](#remote-commands-cloudwatch)

### 下载示例配置文件
<a name="configure_cwl_download"></a>

将以下示例文件下载到您的计算机：[https://s3.amazonaws.com/ec2-downloads-windows/CloudWatchConfig/AWS.EC2.Windows.CloudWatch.json](https://s3.amazonaws.com/ec2-downloads-windows/CloudWatchConfig/AWS.EC2.Windows.CloudWatch.json)。

### 配置 JSON 文件用于 CloudWatch
<a name="send_logs_to_cwl_json"></a>

您可以 CloudWatch 通过在配置文件中指定您的选择来确定要发送到哪些日志。创建此文件并指定您的选择的过程可能需要 30 分钟或更长时间才能完成。完成此任务一次后，您可以在所有实例上重复使用此配置文件。

**Topics**
+ [步骤 1：启用 CloudWatch 日志](#enable-CloudWatchLogs-in-JSON-file)
+ [步骤 2：配置以下各项的设置 CloudWatch](#configure_cwl_credentials)
+ [步骤 3：配置要发送的数据](#configure_logs)
+ [步骤 4：配置流程控制](#configure_log_flow)
+ [步骤 5：保存 JSON 内容](#save_json_content)

#### 步骤 1：启用 CloudWatch 日志
<a name="enable-CloudWatchLogs-in-JSON-file"></a>

在 JSON 文件的顶部，将 `IsEnabled` 的“false”改为“true”：

```
"IsEnabled": true,
```

#### 步骤 2：配置以下各项的设置 CloudWatch
<a name="configure_cwl_credentials"></a>

指定凭证、区域、日志组名称和日志流命名空间。这使实例能够将日志数据发送到 Lo CloudWatch gs。要将相同的日志数据发送到不同的位置，您可以为每个 ID 添加具有唯一性 IDs（例如 “CloudWatchLogs2” 和 CloudWatchLogs “3”）和不同区域的其他部分。

**配置设置以将日志数据发送到 CloudWatch 日志**

1. 在 JSON 文件中，找到 `CloudWatchLogs` 部分。

   ```
   {
       "Id": "CloudWatchLogs",
       "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "AccessKey": "",
           "SecretKey": "",
           "Region": "us-east-1",
           "LogGroup": "Default-Log-Group",
           "LogStream": "{instance_id}"
       }
   },
   ```

1.  将 `AccessKey` 和 `SecretKey` 字段留空。您将使用 IAM 角色配置凭证。

1. 对于 `Region`，键入要向其中发送日志数据的区域（例如 `us-east-2`）。

1. 对于 `LogGroup`，键入您的日志组的名称。此名称显示在 ** 控制台的**日志组 CloudWatch屏幕上。

1. 对于 `LogStream`，键入目标日志流。此名称显示在 CloudWatch 控制台的 “**日志组” > “流**” 屏幕上。

   如果使用 `{instance_id}`，则在默认情况下，日志流名称是该实例的实例 ID。

   如果您指定的日志流名称尚不存在，Lo CloudWatch gs 会自动为您创建该名称。您可以使用文字字符串、预定义变量 `{instance_id}`、`{hostname}` 和 `{ip_address}` 或它们的组合定义日志流名称。

#### 步骤 3：配置要发送的数据
<a name="configure_logs"></a>

您可以将事件日志数据、Windows 事件跟踪 (ETW) 数据和其他日志数据发送到 CloudWatch 日志。

**将 Windows 应用程序事件日志数据发送到 CloudWatch 日志**

1. 在 JSON 文件中，找到 `ApplicationEventLog` 部分。

   ```
   {
       "Id": "ApplicationEventLog",
       "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "LogName": "Application",
           "Levels": "1"
       }
   },
   ```

1. 对于 `Levels`，指定要上传的消息类型。可以指定以下值之一：
   + **1** – 仅上传错误消息。
   + **2** – 仅上传警告消息。
   + **4** – 仅上传信息消息。

   您可以将这些值组合在一起，以包含多种类型的消息。例如，一个包含 **3** 个上传错误消息（**1**）和警告消息（**2**）的值。一个包含 **7** 个上传错误消息（**1**）、警告消息（**2**）和信息消息（**4**）的值。

**将安全日志数据发送到 CloudWatch 日志**

1. 在 JSON 文件中，找到 `SecurityEventLog` 部分。

   ```
   {
       "Id": "SecurityEventLog",
       "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "LogName": "Security",
           "Levels": "7"
       }
   },
   ```

1. 对于 `Levels`，键入 **7** 以上传所有消息。

**将系统事件日志数据发送到 CloudWatch 日志**

1. 在 JSON 文件中，找到 `SystemEventLog` 部分。

   ```
   {
       "Id": "SystemEventLog",
       "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "LogName": "System",
           "Levels": "7"
       }
   },
   ```

1. 对于 `Levels`，指定要上传的消息类型。可以指定以下值之一：
   + **1** – 仅上传错误消息。
   + **2** – 仅上传警告消息。
   + **4** – 仅上传信息消息。

   您可以将这些值组合在一起，以包含多种类型的消息。例如，一个包含 **3** 个上传错误消息（**1**）和警告消息（**2**）的值。一个包含 **7** 个上传错误消息（**1**）、警告消息（**2**）和信息消息（**4**）的值。

**将其他类型的事件日志数据发送到 CloudWatch 日志**

1. 在 JSON 文件中，添加新部分。每个部分必须有一个独立的 `Id`。

   ```
   {
       "Id": "Id-name",
       "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "LogName": "Log-name",
           "Levels": "7"
       }
   },
   ```

1. 对于 `Id`，键入要上传的日志的名称（例如 **WindowsBackup**）。

1. 对于 `LogName`，请键入要上传的日志的名称。您可以按如下步骤找到日志的名称。

   1. 打开事件查看器。

   1. 在导航窗格中，选择 **Applications and Services Logs（应用程序和服务日志）**。

   1. 导航到该日志，然后选择 **Actions（操作）**、**Properties（属性）**。

1. 对于 `Levels`，指定要上传的消息类型。可以指定以下值之一：
   + **1** – 仅上传错误消息。
   + **2** – 仅上传警告消息。
   + **4** – 仅上传信息消息。

   您可以将这些值组合在一起，以包含多种类型的消息。例如，一个包含 **3** 个上传错误消息（**1**）和警告消息（**2**）的值。一个包含 **7** 个上传错误消息（**1**）、警告消息（**2**）和信息消息（**4**）的值。

**将 Windows 的事件跟踪数据发送到 CloudWatch 日志**

ETW（Windows 事件跟踪）提供高效且详细的日志记录机制，供应用程序写入日志。每个 ETW 都由可以启动和停止日志记录会话的会话管理器控制。每个会话都具有一个提供者以及一个或多个使用者。

1. 在 JSON 文件中，找到 `ETW` 部分。

   ```
   {
       "Id": "ETW",
       "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "LogName": "Microsoft-Windows-WinINet/Analytic",
           "Levels": "7"
       }
   },
   ```

1. 对于 `LogName`，请键入要上传的日志的名称。

1. 对于 `Levels`，指定要上传的消息类型。可以指定以下值之一：
   + **1** – 仅上传错误消息。
   + **2** – 仅上传警告消息。
   + **4** – 仅上传信息消息。

   您可以将这些值组合在一起，以包含多种类型的消息。例如，一个包含 **3** 个上传错误消息（**1**）和警告消息（**2**）的值。一个包含 **7** 个上传错误消息（**1**）、警告消息（**2**）和信息消息（**4**）的值。

**将自定义日志（任何基于文本的日志文件）发送到 CloudWatch Logs**

1. 在 JSON 文件中，找到 `CustomLogs` 部分。

   ```
   {
       "Id": "CustomLogs",
       "FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "LogDirectoryPath": "C:\\CustomLogs\\",
           "TimestampFormat": "MM/dd/yyyy HH:mm:ss",
           "Encoding": "UTF-8",
           "Filter": "",
           "CultureName": "en-US",
           "TimeZoneKind": "Local",
           "LineCount": "5"
       }
   },
   ```

1. 对于 `LogDirectoryPath`，键入日志在实例上的存储路径。

1. 对于 `TimestampFormat`，请键入要使用的时间戳格式。有关支持的值的更多信息，请参阅 MSDN 上的[自定义日期和时间格式字符串](https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx)主题。
**重要**  
源日志文件必须在每个日志行开头具有时间戳，且时间戳后必须有一个空格。

1. 对于 `Encoding`，键入要使用的文件编码（例如 UTF-8）。有关支持的值的列表，请参阅 MSDN 上的 [Encoding 类](http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx)主题。
**注意**  
使用编码名称，而不是显示名称。

1. （可选）对于 `Filter`，键入日志名称的前缀。将此参数保留空白以监控所有文件。有关支持的值的更多信息，请参阅 MSDN 上的[FileSystemWatcherFilter 属性](https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.filter.aspx)主题。

1. （可选）对于 `CultureName`，键入记录该时间戳的区域。如果 `CultureName` 为空，则它默认为您 Windows 实例当前所使用的相同区域位置。有关更多信息，请参阅 MSDN 上[产品行为](https://msdn.microsoft.com/en-us/library/cc233982.aspx)主题中表格的 `Language tag` 列。
**注意**  
不支持值 `div`、`div-MV`、`hu` 和 `hu-HU`。

1. （可选）对于 `TimeZoneKind`，键入 `Local` 或 `UTC`。可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息。如果此参数留空，并且您的时间戳不包含时区信息，则 “ CloudWatch 日志” 默认为本地时区。如果时间戳已包含时区信息，则忽略此参数。

1. （可选）对于 `LineCount`，在标头中键入行数以识别日志文件。例如，IIS 日志文件拥有几乎相同的标头。您可以输入 **5**，系统会读取日志文件标头的前三行以进行识别。在 IIS 日志文件中，第三行为日期和时间戳，但无法始终保证时间戳在日志文件之间是不同的。为此，建议包含至少一行实际日志数据以便对日志文件进行唯一指纹识别。

**将 IIS 日志数据发送到 CloudWatch 日志**

1. 在 JSON 文件中，找到 `IISLog` 部分。

   ```
   {
       "Id": "IISLogs",
       "FullName": "AWS.EC2.Windows.CloudWatch.CustomLog.CustomLogInputComponent,AWS.EC2.Windows.CloudWatch",
       "Parameters": {
           "LogDirectoryPath": "C:\\inetpub\\logs\\LogFiles\\W3SVC1",
           "TimestampFormat": "yyyy-MM-dd HH:mm:ss",
           "Encoding": "UTF-8",
           "Filter": "",
           "CultureName": "en-US",
           "TimeZoneKind": "UTC",
           "LineCount": "5"
       }
   },
   ```

1. 对于 `LogDirectoryPath`，输入为单个站点存储的 IIS 日志所在的文件夹（例如 `C:\inetpub\logs\LogFiles\W3SVCn`）。
**注意**  
仅支持 W3C 日志格式。不支持 IIS、NCSA 和自定义格式。

1. 对于 `TimestampFormat`，请键入要使用的时间戳格式。有关支持的值的更多信息，请参阅 MSDN 上的[自定义日期和时间格式字符串](https://msdn.microsoft.com/en-us/library/8kb3ddd4(v=vs.110).aspx)主题。

1. 对于 `Encoding`，键入要使用的文件编码（例如 UTF-8）。有关支持的值的更多信息，请参阅 MSDN 上的 [Encoding 类](http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx)主题。
**注意**  
使用编码名称，而不是显示名称。

1. （可选）对于 `Filter`，键入日志名称的前缀。将此参数保留空白以监控所有文件。有关支持的值的更多信息，请参阅 MSDN 上的[FileSystemWatcherFilter 属性](https://msdn.microsoft.com/en-us/library/system.io.filesystemwatcher.filter.aspx)主题。

1. （可选）对于 `CultureName`，键入记录该时间戳的区域。如果 `CultureName` 为空，则它默认为您 Windows 实例当前所使用的相同区域位置。有关支持的值的更多信息，请参阅 MSDN 上[产品行为](https://msdn.microsoft.com/en-us/library/cc233982.aspx)主题中表格的 `Language tag` 列。
**注意**  
不支持值 `div`、`div-MV`、`hu` 和 `hu-HU`。

1. （可选）对于 `TimeZoneKind`，输入 `Local` 或 `UTC`。可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息。如果此参数留空，并且您的时间戳不包含时区信息，则 “ CloudWatch 日志” 默认为本地时区。如果时间戳已包含时区信息，则忽略此参数。

1. （可选）对于 `LineCount`，在标头中键入行数以识别日志文件。例如，IIS 日志文件拥有几乎相同的标头。您可以输入 **5**，系统会读取日志文件标头的前五行以进行识别。在 IIS 日志文件中，第三行为日期和时间戳，但无法始终保证时间戳在日志文件之间是不同的。为此，建议包含至少一行实际日志数据以便对日志文件进行唯一指纹识别。

#### 步骤 4：配置流程控制
<a name="configure_log_flow"></a>

每种数据类型在 `Flows` 部分中都必须具有对应的目标。例如，要将自定义日志、ETW 日志和系统日志发送到 CloudWatch 日志，请`(CustomLogs,ETW,SystemEventLog),CloudWatchLogs`添加到该`Flows`部分。

**警告**  
添加无效的步骤将阻止流。例如，如果您添加了磁盘指标步骤，但实例没有磁盘，则流中的所有步骤都将被阻止。

您可将同一个日志文件发送到多个目标。例如，要将应用程序日志发送到您在 `CloudWatchLogs` 部分中定义的两个不同目标，请将 `ApplicationEventLog,(CloudWatchLogs,CloudWatchLogs2)` 添加到 `Flows` 部分。

**配置流程控制**

1. 在 `AWS.EC2.Windows.CloudWatch.json` 文件中，找到 `Flows` 部分。

   ```
   "Flows": {
       "Flows": [
         "PerformanceCounter,CloudWatch",
         "(PerformanceCounter,PerformanceCounter2), CloudWatch2",
         "(CustomLogs, ETW, SystemEventLog),CloudWatchLogs",
         "CustomLogs, CloudWatchLogs2",
         "ApplicationEventLog,(CloudWatchLogs, CloudWatchLogs2)"
       ]
   }
   ```

1. 对于 `Flows`，添加要上传的每种数据类型（例如 `ApplicationEventLog`）及其目标（例如 `CloudWatchLogs`）。

#### 步骤 5：保存 JSON 内容
<a name="save_json_content"></a>

现在，您已完成编辑 JSON 文件。保存该文件，将文件内容粘贴到另一个窗口中的文本编辑器中。在这个过程后面的步骤中，需要使用这些文件内容。

### 为 Systems Manager 创建 IAM 角色
<a name="iam_permissions"></a>

在您使用 Systems Manager Run Command 时，需要实例凭证的 IAM 角色。该角色使 Systems Manager 能够对实例执行操作。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的[配置 Systems Manager 的安全角色](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-access.html)。有关如何将 IAM 角色附加到现有实例的信息，请参阅《*Amazon EC2 用户指南*》中的[将 IAM 角色附加到实例](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/iam-roles-for-amazon-ec2.html#attach-iam-role)。

### 验证 Systems Manager 的先决条件
<a name="send_logs_cwl_syspre"></a>

在使用 Systems Manager 运行命令配置与 CloudWatch 日志的集成之前，请验证您的实例是否满足最低要求。有关更多信息，请参阅 *AWS Systems Manager 用户指南*中的 [Systems Manager 的先决条件](https://docs.aws.amazon.com/systems-manager/latest/userguide/systems-manager-setting-up.html)。

### 验证 Internet 访问权限
<a name="send_logs_cwl_internet"></a>

您的 Amazon EC2 Windows 服务器实例和托管实例必须具有出站互联网访问权限才能向发送日志和事件数据 CloudWatch。有关如何配置互联网访问权限的更多信息，请参阅 *Amazon VPC 用户指南*中的[互联网网关](https://docs.aws.amazon.com/vpc/latest/userguide/VPC_Internet_Gateway.html)。

### 使用 Systems Manager 运行命令启用 CloudWatch 日志
<a name="remote-commands-cloudwatch"></a>

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

**使用 Run Command 配置与 CloudWatch 日志的集成**

1. 打开位于 [https://console.aws.amazon.com/ec2/](https://console.aws.amazon.com/ec2/) 的 Amazon EC2 控制台。

1. 打开 SSM 控制台，网址为。[https://console.aws.amazon.com/systems-manager/](https://console.aws.amazon.com/systems-manager/)

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

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

1. 对于**命令文档**，请选择 **AWS-ConfigureCloudWatch**。

1. 对于**目标实例**，请选择要与 CloudWatch 日志集成的实例。如果您在此列表中未看到实例，则可能未针对 Run Command 配置实例。有关更多信息，请参阅《*Amazon EC2 用户指南*》中的 [Systems Manager 先决条件](https://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/systems-manager-setting-up.html)。

1. 对于 **Status（状态）**，选择 **Enabled（已启用）**。

1. 对于 **Properties（属性）**，请复制并粘贴您在之前任务中创建的 JSON 内容。

1. 填写剩余选填字段并选择 **Run（运行）**。

执行以下程序查看 Amazon EC2 控制台中的命令执行结果。

**在控制台中查看命令输出**

1. 选择一个命令。

1. 选择 **Output（输出）**选项卡。

1. 选择 **View Output（查看输出）**。命令输出页面将显示命令执行的结果。