設定 Run Command 的 Amazon CloudWatch Logs - AWS Systems Manager

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

設定 Run Command 的 Amazon CloudWatch Logs

當您使用 Run Command (AWS Systems Manager 的功能) 傳送命令時,您可以指定您要傳送命令輸出的位置。在預設情況下,Systems Manager 只會傳回命令輸出的前 48,000 個字元。如果您想要檢視命令輸出的完整詳細資訊,您可以指定 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 Command Line Interface (AWS CLI)、AWS Tools for Windows PowerShell 或 API 操作,則請新增 cloud-watch-output-config 區段和 CloudWatchOutputEnabled 參數。本主題稍後會更詳細地說明 cloud-watch-output-config 區段和 CloudWatchOutputEnabled 參數。

如需有關將政策新增至 EC2 執行個體的執行個體設定檔的資訊,請參閱設定 Systems Manager 的執行個體許可。如需將政策新增到您計劃做為受管節點使用的內部部署伺服器和虛擬機器服務角色的資訊,請參閱建立適用於混合環境的 IAM 服務角色

若您正在節點上使用自訂政策,則須在每個節點上更新政策,允許 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

若要在從 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 參數。請見此處範例。

Linux & macOS
aws ssm send-command \ --instance-ids "instance ID" \ --document-name "AWS-RunShellScript" \ --parameters "commands=echo helloWorld" \ --cloud-watch-output-config "CloudWatchOutputEnabled=true,CloudWatchLogGroupName=log group name"
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