Amazon CloudWatch Logs
用户指南
AWS 服务或AWS文档中描述的功能,可能因地区/位置而异。点 击 Getting Started with Amazon AWS to see specific differences applicable to the China (Beijing) Region.

快速入门:让您的运行 Windows Server 2016 的 Amazon EC2 实例将日志发送到 CloudWatch Logs

您可以使用多种方法来让运行 Windows Server 2016 的实例将日志发送到 CloudWatch Logs。此部分中的步骤使用 Systems Manager Run Command。有关其他可能方法的信息,请参阅向 Amazon CloudWatch 发送日志、事件和性能计数器

下载示例配置文件

将以下示例文件下载到您的计算机:AWS.EC2.Windows.CloudWatch.json

为 CloudWatch 配置 JSON 文件

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

步骤 1:为 CloudWatch 配置设置

指定凭证、区域、日志组名称和日志流命名空间。这使实例能够将日志数据发送到 CloudWatch Logs。如果要将同一日志数据发送到其他位置,则可添加包含唯一 ID 的额外部分 (例如,“CloudWatchLogs2”和“CloudWatchLogs3”) 并为每个 ID 添加一个不同的区域。

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

  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}"
        }
    },
  2. AccessKeySecretKey 字段留空。您将使用 IAM 角色配置凭证。

  3. 对于 Region,键入要将日志数据发送到的区域 (例如 us-east-2)。

  4. 对于 LogGroup,键入您的日志组的名称。此名称会显示在 CloudWatch 控制台的 Log Groups 屏幕上。

  5. 对于 LogStream,键入目标日志流。此名称会显示在 CloudWatch 控制台的 Log Groups > Streams 屏幕上。

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

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

步骤 2:配置要发送的数据

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

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

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

    {
        "Id": "ApplicationEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
            "LogName": "Application",
            "Levels": "1"
        }
    },
  2. 对于 Levels,指定要上传的消息类型。可以指定以下值之一:

    • 1 – 仅上传错误消息。

    • 2 – 仅上传警告消息。

    • 4 – 仅上传信息消息。

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

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

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

    {
        "Id": "SecurityEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
            "LogName": "Security",
            "Levels": "7"
        }
    },
  2. 对于 Levels,键入 7 以上传所有消息。

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

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

    {
        "Id": "SystemEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
            "LogName": "System",
            "Levels": "7"
        }
    },
  2. 对于 Levels,指定要上传的消息类型。可以指定以下值之一:

    • 1 – 仅上传错误消息。

    • 2 – 仅上传警告消息。

    • 4 – 仅上传信息消息。

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

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

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

    Copy
    { "Id": "Id-name", "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch", "Parameters": { "LogName": "Log-name", "Levels": "7" } },
  2. 对于 Id,键入要上传的日志的名称 (例如 WindowsBackup)。

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

    1. 打开事件查看器。

    2. 在导航窗格中,选择 Applications and Services Logs

    3. 导航到该日志,然后选择 ActionsProperties

  4. 对于 Levels,指定要上传的消息类型。可以指定以下值之一:

    • 1 – 仅上传错误消息。

    • 2 – 仅上传警告消息。

    • 4 – 仅上传信息消息。

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

将 Windows 事件跟踪数据发送到 CloudWatch Logs

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"
        }
    },
  2. 对于 LogName,请键入要上传的日志的名称。

  3. 对于 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"
        }
    },
  2. 对于 LogDirectoryPath,键入日志在实例上的存储路径。

  3. 对于 TimestampFormat,请键入您要使用的时间戳格式。有关支持的值的列表,请参阅 MSDN 上的自定义日期和时间格式字符串主题。

    重要

    源日志文件必须在每个日志行开头具有时间戳,且时间戳后必须有一个空格。

  4. 对于 Encoding,键入要使用的文件编码 (例如 UTF-8)。有关支持的值的列表,请参阅 MSDN 上的 Encoding 类主题。

    注意

    使用编码名称,而不是显示名称。

  5. (可选) 对于 Filter,键入日志名称的前缀。将此参数留空以监控所有文件。有关支持的值的列表,请参阅 MSDN 上的 FileSystemWatcherFilter 属性主题。

  6. (可选) 对于 CultureName,键入记录该时间戳的区域。如果 CultureName 为空,则它默认为您 Windows 实例当前所使用的相同区域位置。有关支持的值的列表,请参阅 MSDN 上的区域语言支持 (NLS) API 参考主题。

    注意

    不支持值 divdiv-MVhuhu-HU

  7. (可选) 对于 TimeZoneKind,键入 LocalUTC。可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息。如果此参数留空且时间戳不包括时区信息,则 CloudWatch Logs 默认为本地时区。如果时间戳已包含时区信息,则忽略此参数。

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

将 IIS 日志数据发送到 CloudWatch Logs

  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"
        }
    },
  2. 对于 LogDirectoryPath,输入为单个站点存储的 IIS 日志所在的文件夹 (例如 C:\inetpub\logs\LogFiles\W3SVCn)。

    注意

    仅支持 W3C 日志格式。不支持 IIS、NCSA 和自定义格式。

  3. 对于 TimestampFormat,请键入您要使用的时间戳格式。有关支持的值的列表,请参阅 MSDN 上的自定义日期和时间格式字符串主题。

  4. 对于 Encoding,键入要使用的文件编码 (例如 UTF-8)。有关支持的值的列表,请参阅 MSDN 上的 Encoding 类主题。

    注意

    使用编码名称,而不是显示名称。

  5. (可选) 对于 Filter,键入日志名称的前缀。将此参数留空以监控所有文件。有关支持的值的列表,请参阅 MSDN 上的 FileSystemWatcherFilter 属性主题。

  6. (可选) 对于 CultureName,键入记录该时间戳的区域。如果 CultureName 为空,则它默认为您 Windows 实例当前所使用的相同区域位置。有关支持的值的列表,请参阅 MSDN 上的区域语言支持 (NLS) API 参考主题。

    注意

    不支持值 divdiv-MVhuhu-HU

  7. (可选) 对于 TimeZoneKind,输入 LocalUTC。可以设置此参数以在日志时间戳中不包含时区信息时提供时区信息。如果此参数留空且时间戳不包括时区信息,则 CloudWatch Logs 默认为本地时区。如果时间戳已包含时区信息,则忽略此参数。

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

步骤 3:配置流程控制

每种数据类型在 Flows 部分中都必须具有对应的目标。例如,要将自定义日志、ETW 日志和系统日志发送到 CloudWatch Logs,请将 (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)"
        ]
    }
  2. 对于 Flows,添加要上传的每种数据类型 (例如 ApplicationEventLog) 及其目标 (例如 CloudWatchLogs)。

步骤 4:保存 JSON 内容

现在,您已完成编辑 JSON 文件。在后面的步骤中,您将其内容粘贴到其他窗口。

为 Systems Manager 创建 IAM 用户和角色

在您使用 Systems Manager Run Command 时,需要实例凭证的 IAM 角色。此角色使 Systems Manager 能够对实例执行操作。您可以选择性地创建用于配置和运行 Systems Manager 的唯一 IAM 用户账户。有关更多信息,请参阅 Amazon EC2 Systems Manager 用户指南 中的为 Systems Manager 配置安全角色。有关如何将 IAM 角色附加到现有实例的信息,请参阅 Amazon EC2 用户指南(适用于 Windows 实例) 中的将 IAM 角色附加到实例

验证 Systems Manager 先决条件

在您使用 Systems Manager Run Command 配置与 CloudWatch Logs 的集成之前,请确保您的实例满足最低要求。有关更多信息,请参阅 Amazon EC2 Systems Manager 用户指南 中的 Systems Manager 先决条件

验证 Internet 访问权限

您的 Amazon EC2 Windows Server 实例和托管实例必须具有出站 Internet 访问权限才能将日志和事件数据发送到 CloudWatch。有关如何配置 Internet 访问权限的更多信息,请参阅 Amazon VPC 用户指南 中的 Internet 网关

使用 Systems Manager Run Command 启用 CloudWatch Logs

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

使用 Run Command 配置与 CloudWatch Logs 的集成

  1. 打开 Amazon EC2 控制台 https://console.amazonaws.cn/ec2/

  2. 在导航窗格中,选择 Systems Manager ServicesRun Command

  3. 选择 Run a command

  4. 对于 Command document,选择 AWS-ConfigureCloudWatch

  5. 对于 Target instances,选择要与 CloudWatch Logs 集成的实例。如果您在此列表中未看到实例,则可能未针对 Run Command 配置实例。有关更多信息,请参阅 Amazon EC2 用户指南(适用于 Windows 实例) 中的 Systems Manager 先决条件

  6. 对于 Status,选择 Enabled

  7. 对于 Properties,请复制并粘贴您在之前任务中创建的 JSON 内容。

  8. 填写剩余选填字段并选择 Run

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

在控制台中查看命令输出

  1. 选择一个命令。

  2. 选择 Output 选项卡。

  3. 选择 View Output。命令输出页面将显示命令执行的结果。