为啥从我的 Windows EC2 实例发送的 CloudWatch Logs 没有显示在 AWS 控制台上?
Posted
技术标签:
【中文标题】为啥从我的 Windows EC2 实例发送的 CloudWatch Logs 没有显示在 AWS 控制台上?【英文标题】:Why are CloudWatch Logs sent from my Windows EC2 Instance not showing up on AWS Console?为什么从我的 Windows EC2 实例发送的 CloudWatch Logs 没有显示在 AWS 控制台上? 【发布时间】:2017-04-01 04:38:08 【问题描述】:我在 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 控制台上显示?!我正在根据此链接进行 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
你知道问题是什么吗?
【问题讨论】:
您到底想向 CloudWatch 日志发送什么?只是 Windows 事件日志? 【参考方案1】:注意:如果您是从搜索引擎来到这里并正在寻求有关 Windows Server 2016 上的 EC2Launch/EC2Config 4.x 的帮助,请参阅此documentation 了解相关更改。本指南在编写时考虑了旧 Windows 服务器上的 EC2Config 3.x Windows 服务,给出的建议可能不会直接与 EC2Launch 并行。
记下您的 EC2Config 版本,并查看以下文档以获取更多特定于版本的建议:
Use EC2Config 3.x or Earlier to Configure CloudWatch Use EC2Config 4.x to Configure CloudWatch对于从 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 代理默认安装在 Windows Server 2016 实例和从 2016 年 11 月或之后发布的 Windows Server 2003-2012 R2 AMI 创建的实例上。
要查看 AWS Web 控制台,请导航至 EC2 > Commands > Command History > Run A Command
。
在“运行命令”UI 中查找“选择实例”按钮。这将打开正在运行 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 Config Service 将重新启动。继续并重新启动实例(如果您是managing your password with EC2Config,如果您没有重新启用该设置,您可能无法在重新启动后从控制台检索它 - 将其复制到某处以防万一!),然后再次执行第 2 步以验证您的实例是否可用于 EC2 Run Command。新增福利:从现在开始,您将能够从 EC2 Run Command 更新 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 事件日志,然后是指标,然后是自定义日志。
【讨论】:
完美指导 :) 非常感谢。【参考方案2】:我在 Cloudwatch 指标方面遇到了很多问题,但我终于解决了其中的大部分问题。
为了接收指标,您需要在文件顶部添加"IsEnabled":true
,如下所示:
"IsEnabled": true
"EngineConfiguration":
"PollInterval": "00:00:15",
"Components": [
您还必须将 EC2Config 从 here 更新到最新版本
【讨论】:
以上是关于为啥从我的 Windows EC2 实例发送的 CloudWatch Logs 没有显示在 AWS 控制台上?的主要内容,如果未能解决你的问题,请参考以下文章
如何从我的 Amazon EC2 实例中连接到 Amazon Redshift 集群