为什么从我的 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
的最新版本
我已经在 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
的最新版本