You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

多Windows EC2实例执行脚本后CloudWatch日志仅显单条输出问题排查

多Windows EC2实例执行SSM PowerShell脚本后CloudWatch日志仅显示单实例输出的排查与解决

核心原因

当通过AWS Systems Manager的AWS-RunPowerShellScript批量执行脚本时,若所有实例的输出被配置写入同一个固定名称的CloudWatch日志流,后续实例的输出会覆盖之前的内容。这是因为CloudWatch日志流是顺序写入的,相同流的新日志会直接覆盖或冲掉旧的输出内容(取决于SSM命令的日志写入逻辑)。

另外,默认情况下SSM会为每个实例的命令执行生成独立的日志流(格式通常为命令ID/实例ID),如果看不到多实例日志,大概率是手动指定了固定日志流名称,导致所有实例往同一流写入。

解决步骤

1. 修正CloudWatch日志流配置

执行SSM命令时,确保日志流使用动态变量生成,而非固定名称:

  • 勾选「启用CloudWatch日志」
  • 指定日志组(例如/aws/ssm/windows-pv-drivers-audit)
  • 日志流名称填写{CommandId}/{InstanceID},这样每个实例的命令执行会生成独立的日志流,彻底避免覆盖问题
  • 确认SSM实例关联的IAM角色拥有cloudwatch:PutLogEvents和cloudwatch:CreateLogStream权限

2. 优化脚本(可选但推荐)

原脚本功能正常,但Win32_Product类会触发MSI安装包的一致性检查,可能拖慢实例性能。建议替换为注册表查询,同时增强输出的实例标识信息:

# 通过注册表查询AWS PV Drivers信息,避免Win32_Product的性能问题
$pvRegPath = "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\*"
$pvInfo = Get-ItemProperty -Path $pvRegPath | 
          Where-Object { $_.DisplayName -eq "AWS PV Drivers" } | 
          Select-Object @{Name='Name'; Expression={$_.DisplayName}}, 
                        @{Name='Version'; Expression={$_.DisplayVersion}}

# 添加实例标识属性
$pvInfo | Add-Member -MemberType NoteProperty -Name "ComputerName" -Value $env:COMPUTERNAME -Force
$pvInfo | Add-Member -MemberType NoteProperty -Name "InstanceId" -Value (Invoke-RestMethod -Uri http://169.254.169.254/latest/meta-data/instance-id) -Force

# 输出结果
$pvInfo

3. 排查已有日志

进入目标CloudWatch日志组,检查是否存在多个以命令ID/实例ID命名的日志流——可能你之前忽略了这些流,误以为只有单实例输出。

内容的提问来源于stack exchange,提问作者MickyD

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 22:37:32