Run Command에 대한 Amazon CloudWatch Logs 구성 - AWS Systems Manager

Run Command에 대한 Amazon CloudWatch Logs 구성

AWS Systems Manager의 기능인 Run Command를 사용하여 명령을 전송할 때는 명령 출력을 전송할 위치를 지정할 수 있습니다. 기본적으로 Systems Manager는 명령 출력의 첫 24,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에 필요한 인스턴스 권한 구성을 참조하세요. 관리형 노드로 사용할 예정인 온프레미스 서버 및 가상 머신에 대한 서비스 역할에 정책을 추가하는 것에 대한 정보는 하이브리드 및 멀티클라우드 환경에서 Systems Manager에 필요한 IAM 서비스 역할 생성을 참조하세요.

노드에 사용자 정의 정책을 사용하는 경우라면 Systems Manager가 CloudWatch Logs에 출력 및 로그를 전송하는 것을 허용하도록 각 노드의 정책을 업데이트합니다. 사용자 지정 정책에 다음 정책 객체를 추가하십시오. IAM 정책 업데이트에 대한 자세한 내용은 IAM User GuideEditing IAM policies를 참조하세요.

{ "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 출력(CloudWatch Output)]을 선택합니다. 선택에 따라 명령 출력을 전송할 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초마다 혹은 버퍼가 200KB를 초과할 때, 어느 것에든 먼저 도달하면 실행에서 출력을 업로드합니다.

참고

출력 데이터를 사용할 수 있을 때에만 로그 스트림이 생성됩니다. 예를 들어 실행에 대한 오류 데이터가 없는 경우 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