AWS 文档说“对于 Windows 实例,实例控制台输出显示最后三个系统事件日志错误。”
这显然是错误的。当我从 Web 控制台在我的一个 EC2 实例上运行“获取系统日志”时,我看到
2017/05/23 21:43:15Z: EC2ConfigMonitorState: 0
2017/05/23 21:43:15Z: Windows sysprep configuration complete.
2017/05/23 21:43:16Z: AMI Origin Version: 2016.12.14
2017/05/23 21:43:16Z: AMI Origin Name: Windows_Server-2012-R2_RTM-English-64Bit-Base
2017/05/23 21:43:16Z: OS: Microsoft Windows NT 6.3.9600
2017/05/23 21:43:16Z: OsVersion: 6.3
2017/05/23 21:43:16Z: OsProductName: Windows Server 2012 R2 Standard
2017/05/23 21:43:16Z: Language: en-US
2017/05/23 21:43:16Z: TimeZone: Coordinated Universal Time
2017/05/23 21:43:16Z: Offset: UTC 00:00:00
2017/05/23 21:43:16Z: EC2 Agent: Ec2Config service v4.1.1396
2017/05/23 21:43:16Z: Driver: AWS PV Network Device v7.4.3.0
2017/05/23 21:43:16Z: Driver: AWS PV Storage Host Adapter v7.4.3.0
2017/05/23 21:43:17Z: Message: Waiting for meta-data accessibility...
2017/05/23 21:43:17Z: Message: Meta-data is now available.
....
2017/05/23 21:43:26Z: KMS: Server:169.254.169.251; Attempt:1
2017/05/23 21:43:26Z: Message: Product activation was successful
2017/05/23 21:43:26Z: Message: Windows is Ready to useii
那不是 Windows 事件日志,也不只是“最后 3 个错误”。我查看的输出位于实例的哪里?为什么文档说它应该是错误系统事件日志,但事实并非如此?
答案1
我遇到了同样的问题,得到了同样的结果。所以如果你看看
C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Scripts\Get-ConsolePort.ps1 就是您在第 174 行看到该错误的地方。
Write-Log "ACPI SPCR table not found. Bailing Out"
现在如果你看看上面的 if 语句,你会看到这行代码
$SPCRReaderExeDir = "$env:ProgramData\Amazon\EC2-Windows\Launch\Scripts"
if (Test-Path -Path $SPCRReaderExeDir)
{
$SPCRReaderExePath = Join-Path $SPCRReaderExeDir "AWSAcpiSpcrReader.exe"
$SPCROutput = cmd /c $SPCRReaderExePath
# Parse the SPCR output and extract key fields such as Vendor ID, Device ID, BDF.
$Dictionary = @{ }
if ($SPCROutput -match 'SPCR table signature')
{
我 90% 确信 AWSAcpiSpcrReader.exe 与巨大的
# SIG # Begin signature block
在每个文件的末尾,用于验证它是否是允许的事情。
我正在尝试将块复制到我的用户数据中,但我认为它可能太大了。如果我从 S3 导入,我可以将签名块放在那里,但我不确定。我不是 powershell 人员,所以我们拭目以待。
哈哈哈哈哈成功了!! 2020/06/11 02:17:14Z:消息:Windows 已准备好使用
2020/06/11 02:17:24Z:消息:OMGOMGOMG
现在,每次构建实例时都可能生成块,因此我们可能必须以某种方式获取该块并将其导入到用户数据脚本中。或者可能是在发布新版本时。未知。重点是,签名可能会改变。
答案2
好问题。几个月来,我一直在努力寻找新 Windows 实例日志中有用的信息,所以我不得不深入研究。我想在那里发布来自配置脚本的状态消息。
这是串行控制台的输出。我认为 Amazon 将其设置为类似于 Linux 控制台,或者可能是 Windows 的某个古老部分。EC2Launch 通过 COM 端口向其写入数据。
您可以通过阅读较新的 Windows 实例上的 _C:\ProgramData\Amazon\EC2-Windows\Launch\Module_ 中的代码来查看一些示例。
对于我手头的一些实例,在启动过程中有效地写入的示例 C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SendWindowsIsReady.ps1
还有另一个脚本用于将系统事件日志中的错误复制到其中, C:\ProgramData\Amazon\EC2-Windows\Launch\Scripts\SendEventLogs.ps1... 我认为这肯定是“最近三个系统事件日志错误”文档所指的内容。但我从未能够让它显示我想要显示的任何内容,例如我的用户数据脚本的进度。
我在向控制台写入任何内容时遇到了很多麻烦。也许它只能在启动时访问。我尝试了以下方法:
Import-Module C:\ProgramData\Amazon\EC2-Windows\Launch\Module\Ec2Launch.psd1
Initialize-Log -Filename "testlog.log" -AllowLogToConsole
Open-SerialPort
Write-Log -Message 'hi from powershell' -LogToConsole
但我收到此错误Open-SerialPort
:
未找到 ACPI SPCR 表。正在救援
答案3
从 EC2 面板中选择您的 EC2
在操作选项中导航 => 选择实例设置 => 获取系统日志。
您可以在那里找到您的系统日志。