設定 Amazon CloudWatch 日誌 Run Command - AWS Systems Manager

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

設定 Amazon CloudWatch 日誌 Run Command

當您使用Run Command功能傳送指令時 AWS Systems Manager,您可以指定要傳送命令輸出的位置。根據預設,Systems Manager 只會傳回命令輸出的前 24,000 個字元。如果您想要檢視命令輸出的完整詳細資訊,您可以指定 Amazon Simple Storage Service (Amazon S3) 儲存貯體。或者,您可以指定 Amazon CloudWatch 日誌。如果您指定 CloudWatch 記錄檔,則會定Run Command期將所有命令輸出和錯誤記錄檔傳送至 CloudWatch 記錄檔。您可以以幾乎即時的方式監控輸出日誌、搜尋特定字詞、數值或模式,並根據搜尋建立警示。

如果您將受管節點設定為使用 AWS Identity and Access Management (IAM) 受管政策 AmazonSSMManagedInstanceCoreCloudWatchAgentServerPolicy,則您的節點不需要其他組態即可將輸出傳送到 CloudWatch Logs。如果從主控台傳送命令,請選擇此選項,或者如果使用 AWS Command Line Interface (AWS CLI) 或 API 作業 AWS Tools for Windows PowerShell,則新增cloud-watch-output-config區段和CloudWatchOutputEnabled參數。本主題稍後會更詳細地說明 cloud-watch-output-config 區段和 CloudWatchOutputEnabled 參數。

如需將政策新增至 EC2 執行個體設定檔的相關資訊,請參閱設定 Systems Manager 所需的執行個體許可。如需將政策新增至您打算做為受管節點使用的內部部署伺服器和虛擬機器的服務角色的詳細資訊,請參閱在混合式和多雲端環境中建立 Systems Manager 所需的 IAM 服務角色

如果您在節點上使用自訂原則,請更新每個節點上的政策,以允許 Systems Manager 將輸出和記錄檔傳送至 CloudWatch 記錄檔。將以下政策物件新增至您的自訂政策。如需更新 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 記錄檔

若要在從中傳送命令時將 CloudWatch 記錄檔指定為輸出 AWS Management Console,請在 [CloudWatch 輸出選項] 區段中選擇 [輸出]。或者,您可以指定要傳送命令輸出的 CloudWatch 記錄群組名稱。如果您不指定群組名稱,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 記錄檔中檢視命令輸出

一旦命令開始運行,Systems Manager 會以近乎即時的速度將輸出發送到 CloudWatch 日誌。 CloudWatch 記錄檔中的輸出使用下列格式:

CommandID/InstanceID/PluginID/stdout

CommandID/InstanceID/PluginID/stderr

每 30 秒或當緩衝區超過 200 KB 時 (視何者先發生),即會從執行上傳輸出。

注意

只有當輸出資料可供使用時,才會建立日誌串流。例如,如果執行沒有錯誤的資料,則不會建立 stderr 串流。

以下是在 CloudWatch 記錄中顯示的命令輸出範例。

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