为什么从我的 Windows EC2 实例发送的 CloudWatch 日志没有显示在 AWS 控制台上?

Why are CloudWatch Logs sent from my Windows EC2 Instance not showing up on AWS Console?

我已经在 ec2 windows server-R2 上设置了 CloudWatch Logs,但它没有显示在 AWS 控制台上。 (我的 IAM 用户拥有完全访问权限) https://aws.amazon.com/blogs/devops/using-cloudwatch-logs-with-amazon-ec2-running-microsoft-windows-server/

我的 CloudWatch json 文件如下所示:

{
  "EngineConfiguration": {
    "PollInterval": "00:00:15",
    "Components": [
      {
        "Id": "ApplicationEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "Application",
          "Levels": "1"
        }
      },
      {
        "Id": "SystemEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "System",
          "Levels": "7"
        }
      },
      {
        "Id": "SecurityEventLog",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "Security",
          "Levels": "7"
        }
      },
      {
        "Id": "ETW",
        "FullName": "AWS.EC2.Windows.CloudWatch.EventLog.EventLogInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "LogName": "Microsoft-Windows-WinINet/Analytic",
          "Levels": "7"
        }
      },
      {
        "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": "3"
        }
      },
      {
        "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"
        }
      },
      {
        "Id": "PerformanceCounter",
        "FullName": "AWS.EC2.Windows.CloudWatch.PerformanceCounterComponent.PerformanceCounterInputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "CategoryName": "Memory",
          "CounterName": "Available MBytes",
          "InstanceName": "",
          "MetricName": "Memory",
          "Unit": "Megabytes",
          "DimensionName": "",
          "DimensionValue": ""
        }
      },
      {
        "Id": "CloudWatchLogs",
        "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "AccessKey": "accesskey",
          "SecretKey": "secretkey",
          "Region": "eu-west-1",
          "LogGroup": "Default-Log-Group",
          "LogStream": "{instance_id}"
        }
      },
      {
        "Id": "CloudWatch",
        "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
        "Parameters": {
          "AccessKey": "accesskey",
          "SecretKey": "secretkey",
          "Region": "eu-west-1",
          "NameSpace": "Windows/Default"
        }
      }
    ],
    "Flows": {
      "Flows": [
        "(ApplicationEventLog,SystemEventLog),CloudWatchLogs",
        "PerformanceCounter,CloudWatch"
      ]
    }
  }
}

我发现它还需要安装 SSM 才能在 AWS 控制台上显示出来?!我是根据这个link做SSM的安装过程: http://docs.aws.amazon.com/AWSEC2/latest/WindowsGuide/managed-instances.html#install-managed-win

但是下载不了文件,详情如下:

PS C:\Program Files (x86)\AWS Tools\PowerShell\AWSPowerShell> $dir = $env:TEMP + "\ssm"
> New-Item -ItemType directory -Path $dir
> cd $dir
> $username = admin
> $password = 1234
> $wc = New-Object System.Net.Networkcredential($username, $password)
> $wc.DownloadFile("https://amazon-ssm-region.s3.amazonaws.com/latest/windows_amd64/AmazonSSMAgentSetup.exe", $dir + "\AmazonSSMAgentSetup.exe")



You cannot call a method on a null-valued expression.

At line:1 char:1

+ $wc.DownloadFile("https://amazon-ssm-    region.s3.amazonaws.com/latest/windows_amd64 ...

+ 

  + CategoryInfo  : InvalidOperation: (:) [], RuntimeException

  + FullyQualifiedErrorId : InvokeMethodOnNull

知道问题出在哪里吗?

注意: 如果您是从搜索引擎来到这里并正在寻求有关 Windows 服务器上 EC2Launch/EC2Config 4.x 的帮助2016 年,请参阅此 documentation 以了解相关更改。本指南编写时考虑了旧 Windows 服务器上的 EC2Config 3.x Windows 服务,给出的建议可能不会直接与 EC2Launch 并行。

记下您的 EC2Config 版本并查看以下文档以获取更多特定于版本的建议:

对于从 3.x 迁移到 4.x 的用户:您特别需要:

  • "IsEnabled":true 添加到您的 AWS.EC2.Windows.CloudWatch.json JSON 文件。
  • 将此文件从 C:\Program Files\Amazon\Ec2ConfigService\Settings\ 移动到 C:\Program Files\Amazon\SSM\Plugins\awsCloudWatch\

您就一个问题问了很多,所以我将分几部分回答:

1) 您所遵循的指南不适用于您的用例

您链接到的 documentation 用于在混合环境中设置 SSM 代理,例如在同时具有 EC2 实例和内部部署机器的环境中。由于您使用的是 EC2 实例而不是本地机器,因此本文档与您无关。这改变了以下假设:

  • 您应该明确下载 EC2Config 而不是 SSM 代理。 (见步骤 3)
  • 您需要一个 IAM Instance Profile 附加到您的实例,而不是具有所有相关权限的 IAM 用户。 (见第 4 步)

2) 使用 EC2 Run Command

验证您的 SSM 代理

根据 documentation:

,您可能已经安装了 SSM 代理

SSM Agent is installed by default on Windows Server 2016 instances and instances created from Windows Server 2003-2012 R2 AMIs published in November 2016 or later.

要签入 AWS Web 控制台,请导航至 EC2 > Commands > Command History > Run A Command

在 'Run A Command' UI 中寻找按钮 'Select Instances'。这将打开 运行 个实例的下拉列表,这些实例是 运行 个 SSM 代理。

如果您的实例在此处列出,恭喜!您已经安装了 SSM 代理。跳过第 3 步。

3) 为 CloudWatch Logs 设置 SSM 代理

你应该install the latest version of EC2Config。 SSM 代理与 EC2Config 捆绑在一起并一起安装。您可以以交互方式或使用 PowerShell(此示例需要 v5)执行此操作:

iwr https://ec2-downloads-windows.s3.amazonaws.com/EC2Config/EC2Install.zip -UseBasicParsing -OutFile Ec2Config.zip
Expand-Archive Ec2Config.zip
.\Ec2Config\Ec2Install.exe /install

安装后,EC2 配置服务将重新启动。继续并重新启动实例(如果你是 managing your password with EC2Config 如果你没有重新启用该设置,你可能无法在重新启动后从控制台检索它 - 将它复制到某个地方以防万一! ),然后再次按照步骤 2 验证您的实例是否可用于 EC2 运行 命令。新增福利:从现在开始,您将能够从 EC2 运行 命令更新 EC2Config 和 SSM 代理。

4) 验证您的 IAM 实例配置文件的 IAM 角色是否具有足够的权限

AWS 文档涵盖了这个 here,所以我不会翻阅它。

如果当前没有实例配置文件附加到您的 EC2 实例,您应该 create an AMI 并启动一个与当前实例具有相同配置的新实例,除了它使用您创建的新 AMI 和使用具有足够权限的 IAM 角色。

5) 您不需要在 CloudWatch 配置中明确指定您的 AWS 凭证

AccessKey 和 SecretKey 应留空,因为凭证将从您的 IAM 实例配置文件继承:

{
    "Id": "CloudWatchLogs",
    "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatchLogsOutput,AWS.EC2.Windows.CloudWatch",
    "Parameters": {
        "AccessKey": "",
        "SecretKey": "",
        "Region": "eu-west-1",
        "LogGroup": "MyLogGroup",
        "LogStream": "{instance_id}"
    }
},
{
    "Id": "CloudWatch",
    "FullName": "AWS.EC2.Windows.CloudWatch.CloudWatch.CloudWatchOutputComponent,AWS.EC2.Windows.CloudWatch",
    "Parameters": 
    {
        "AccessKey": "",
        "SecretKey": "",
        "Region": "eu-west-1",
        "NameSpace": "MyMetricsNameSpace"
    }
}

对配置文件进行任何更改后,重新启动 EC2Config(或您的实例本身,如果这在您的工作流程中更容易),更改应该会应用。

6) 疑难解答

可以在您的实例上找到与将本地日志发送到 CW 相关的日志:C:\Program Files\Amazon\Ec2ConfigService\Logs\Ec2ConfigLog.txt。这对我第一次配置它来说是无价的。

documentation 也有针对常见问题的指导。


除此之外,我觉得一切正常。也许可以分小块来解决问题——先处理设置 Windows 事件日志,然后是指标,然后是自定义日志。

我在 Cloudwatch 指标方面遇到了很多问题,但我终于解决了其中的大部分问题。

为了接收指标,您需要在文件顶部添加 "IsEnabled":true,如下所示:

{
    "IsEnabled": true
    "EngineConfiguration": {
        "PollInterval": "00:00:15",
        "Components": [

您还必须将 EC2Config 更新到 here

的最新版本