AWS Systems Manager
用户指南
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

为 Run Command 配置 Amazon CloudWatch Logs

使用 Run Command 发送命令时,您可以指定要发送命令输出的位置。默认情况下,Systems Manager 仅返回命令输出的前 2500 个字符。如果要查看命令输出的完整详细信息,可以指定 Amazon Simple Storage Service (Amazon S3) 存储桶。也可以指定 Amazon CloudWatch Logs。如果指定 CloudWatch Logs,则 Run Command 会定期向 CloudWatch Logs 发送所有命令输出和错误日志。您可以近乎实时地监控输出日志,搜索特定短语、值或模式,及基于搜索创建警报。

如果将实例或本地混合计算机配置为使用 AWS Identity and Access Management (IAM) 托管策略 AmazonSSMManagedInstanceCoreCloudWatchAgentServerPolicy,则您的实例不需要进行额外配置即可将输出发送到 CloudWatch Logs。如果从控制台发送命令,只需选择此选项;如果使用 AWS CLI、Tools for Windows PowerShell或 API 操作,则需添加 cloud-watch-output-config 部分和 CloudWatchOutputEnabled 参数。我们将在本主题的稍后内容中详细介绍 cloud-watch-output-config 部分和 CloudWatchOutputEnabled 参数。

有关将策略添加到 Amazon EC2 实例的实例配置文件的信息,请参阅为 Systems Manager 创建 IAM 实例配置文件。有关将策略添加到打算用作托管实例的本地实例和虚拟机的服务角色的信息,请参阅为混合环境创建 IAM 服务角色

有关更新现有实例配置文件的信息,请参阅向 Systems Manager 实例配置文件添加权限(控制台)

如果在多个实例上使用自定义策略,则必须在每个实例上更新此类策略,以允许 Systems Manager 向 CloudWatch Logs 发送输出和日志。将以下策略对象添加到您的自定义策略。有关更新 IAM 策略的更多信息,请参阅 IAM User Guide 中的编辑 IAM 策略

{ "Effect":"Allow", "Action":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogGroups", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource":"*" },

在您发送命令时指定 CloudWatch Logs

要在从 AWS Management Console 发送命令时将 CloudWatch Logs 指定为输出,请在 Output options (输出选项) 部分选择 CloudWatch Output (CloudWatch 输出)。(可选)您可以在您要发送命令输出的位置指定 CloudWatch Logs 组的名称。如果您未指定组名称,则 Systems Manager 会自动为您创建一个日志组。日志组使用以下命名格式:aws/ssm/SystemsManagerDocumentName

如果使用 AWS CLI 运行命令,必须在命令中指定 cloud-watch-output-config 部分。此部分可让您指定 CloudWatchOutputEnabled 参数以及 CloudWatchLogGroupName 参数(可选)。以下是一个示例:

aws ssm send-command --document-name "AWS-RunPowerShellScript" --parameters commands=["echo helloWorld"] --targets "Key=instanceids,Values=an instance ID” --cloud-watch-output-config '{"CloudWatchLogGroupName":"log group name","CloudWatchOutputEnabled":true}'

在 CloudWatch Logs 中查看命令输出

一旦命令开始运行,Systems Manager 会近乎实时地向 CloudWatch Logs 发送输出。CloudWatch Logs 中的输出使用以下格式:

CommandID/InstanceID/PluginID/stdout

CommandID/InstanceID/PluginID/stderr

执行的输出每 30 秒或当缓冲区超过 200 KB 时(以先发生的为准)上传一次。

注意

日志流仅在输出数据可用时创建。例如,如果执行不存在错误数据,则 stderr 流不会创建。

下方是在 CloudWatch Logs 中显示的命令输出的示例。

Group - /aws/ssm/AWS-RunShellScript
Streams – 
1234-567-8910/i-abcd-efg-hijk/AWS-RunPowerShellScript/stdout
24/1234-567-8910/i-abcd-efg-hijk/AWS-RunPowerShellScript/stderr