为运行命令配置 Amazon CloudWatch Logs - Amazon Web Services Systems Manager
AWS 文档中描述的 AWS 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅中国的 AWS 服务入门

本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。

为运行命令配置 Amazon CloudWatch Logs

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

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

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

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

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

{ "Effect": "Allow", "Action": "logs:DescribeLogGroups", "Resource": "*" }, { "Effect":"Allow", "Action":[ "logs:CreateLogGroup", "logs:CreateLogStream", "logs:DescribeLogStreams", "logs:PutLogEvents" ], "Resource":"arn:aws:logs:*:*:log-group:/aws/ssm/*" },

在发送命令时指定 CloudWatch Logs

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

如果您通过使用AmazonCLI 中,指定cloud-watch-output-config部分。此部分可让您指定 CloudWatchOutputEnabled 参数以及 CloudWatchLogGroupName 参数(可选)。以下是示例。

Linux & macOS
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}'
Windows
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