Amazon Web Services 한국 블로그

Amazon CloudWatch를 이용한 효율적인 윈도 서버 모니터링

모니터링 없이 시스템을 운영하게 된다면 마치 계기판을 보지 않고 자동차를 운전하는 것과 같다는 이야기가 있습니다. 시스템 장애는 곧바로 서비스 중지로 이어질 수 있기 때문에 시스템 모니터링은 그만큼 중요합니다. 따라서 시스템 관리자는 지속적으로 시스템의 상태를 모니터링하고 분석하여 미래에 발생할 수 있는 예기치 않는 장애에 대비해야합니다.

시스템 관리자는 시스템의 다음 요소들을 모니터링 할 필요가 있습니다.

  • CPU 사용률
  • 메모리 사용률
  • 디스크 사용률
  • 네트워크 부하 등

Amazon CloudWatch는 AWS 리소스와 온프레미스 서버에서 CPU 사용률, 디스크 I/O, 네트워크 부하 등과 같은 기본 지표를 수집하여 모니터링 서비스를 제공하고 있습니다. 그렇지만 인스턴스의 메모리와 운영체제 내 디스크 사용률과 같은 게스트 운영체제의 지표는 가져오지 못합니다. 이를 위해서는 인스턴스 운영체제에 내장된 모니터링 프로그램을 사용해야만 합니다.

예를 들면 윈도 시스템의 경우, Windows Performance Monitor를 통해서 시스템 성능 지표를 수집할 수 있습니다. 그래서 Amazon EC2 윈도 인스턴스를 운영하는 시스템 관리자는 시스템의 정확한 성능 모니터링을 위해서 Amazon CloudWatch 뿐만 아니라 Windows Performance Monitor 프로그램을 사용해야 합니다.

만약, 모니터링 대상 시스템에 Amazon CloudWatch 에이전트를 설치할 경우 Amazon CloudWatch에서 시스템 지표들을 통합적으로 한 곳에서 볼 수 있습니다. 이 글에서는 Amazon EC2 윈도 인스턴스에 Amazon CloudWatch 에이전트를 설치하여 CloudWatch에서 통합적으로 모니터링하는 방법을 소개하겠습니다.

아래 그림은 이 글에서 설명할 대략적인 단계에 대해 설명하고 있습니다.

CloudWatch 에이전트 설치하기

CloudWatch 에이전트는 Linux 또는 Windows 서버를 실행하는 Amazon EC2 인스턴스 및 온프레미스 서버로부터 로그를 수집합니다. CloudWatch 에이전트를 설치하는 방법은 다음과 같습니다.

이 글에서는 AWS Systems Manager에서 CloudWatch 에이전트를 설치하는 방법을 설명드리겠습니다. 그리고 Systems Manager 의 Parameter Store 기능을 사용하여 하나의 CloudWatch 에이전트 구성을 여러 서버에서 배포하고 사용하는 방법을 설명드리겠습니다. 이 기능은 대규모 시스템에서 유용하게 활용될 수 있습니다.

AWS Systems Manager를 사용하면 여러 AWS 서비스의 운영 데이터를 중앙집중화하고 AWS 리소스 전체에서 작업을 자동화할 수 있습니다. Systems Manager를 통한 CloudWatch 에이전트 설치는 크게 IAM 역할 및 사용자 생성하기, CloudWatch 에이전트 다운로드 및 에이전트 구성 파일 설정하기, 그리고 EC2 인스턴스/온프레미스 서버에 CloudWatch 에이전트 설치하기의 단계로 나누어집니다.

1. IAM 역할 및 사용자 생성하기

CloudWatch 에이전트, AWS Systems Manager, Systems Manager Parameter Store를 이용해 CloudWatch로 지표를 수집하기 위해서는 다음 두가지 권한이 필요합니다.

  1. Systems Manager를 통해 서버에 AmazonCloudWatchAgent를 설치하고 서버의 정보와 지표를 CloudWatch에 쓸 수 있는 권한 (CloudWatch 에이전트를 실행할 모든 서버에 필요)
  2. CloudWatch 에이전트 구성 파일을 Systems Manager Parameter Store에 저장하여 다른 서버에 배포할 수 있는 권한 (관리서버 역할을 할 서버에 필요)

첫번째 권한은 CloudWatch 에이전트가 실행되는 모든 서버에 필요합니다. 서버에서는 해당 권한을 이용하여 지표 정보를 CloudWatch로 수집할 수 있습니다.

두번째 권한은 관리 서버 역할을 하는 EC2 인스턴스에 필요합니다. AWS Systems Manager Parameter Store을 사용하지 않는다면 해당 권한은 필요하지 않습니다. 우리가 이 권한이 필요한 이유는 Systems Manager Parameter Store에 CloudWatch 에이전트 구성을 저장하여 여러 서버에서 동일한 구성 파일을 사용할 수 있게 하기 위함입니다.

위 권한들은 AWS IAM 역할 및 사용자를 사용하여 만들 수 있는데 대상 서버가 EC2 인스턴스인 경우 IAM 역할을 사용하고, 온프레미스 서버라면 IAM 사용자를 사용합니다.

이 글에서는 Windows EC2 인스턴스의 지표들을 CloudWatch에 쓸 예정이므로 IAM 역할을 사용하겠습니다. 온프레미스 서버를 위해 IAM 사용자를 생성하는 과정은 다음 링크를 참고해주세요.

1-1. 각 서버가 CloudWatch 에이전트를 실행하는 데 필요한 IAM 역할 생성하기

다음 AWS 관리형 정책을 추가하여 생성합니다.

  • CloudWatchAgentServerPolicy
  • AmazonSSMManagedInstanceCore

생성한 IAM 역할을 CloudWatch 에이전트가 실행될 EC2 인스턴스에 연결시킵니다.

1-2. 관리 서버가 CloudWatch 에이전트 구성 파일을 Parameter Store에 저장할 때 필요한 IAM 역할 생성하기

다음 AWS 관리형 정책을 추가하여 생성합니다.

  • CloudWatchAgentAdminPolicy
  • AmazonSSMManagedInstanceCore

생성한 IAM 역할을 관리 서버 역할을 할 EC2 인스턴스에 연결시킵니다.

 

필요한 IAM 역할이 모두 생성되었습니다.

2. CloudWatch 에이전트 설치하기

AWS Systems Manager를 사용해서 EC2 인스턴스에 CloudWatch 에이전트를 다운로드하고 설치하겠습니다.

2-1. SSM Agent 설치하기

AWS Systems Manager 에이전트 (SSM 에이전트)는 AWS Systems Manager를 통해 인스턴스를 업데이트, 구성 및 관리할 수 있도록 해줍니다. SSM 에이전트는 기본적으로 다음 Amazon Machine Images(AMI)에 사전 설치됩니다.

  • 2016년 11월 이후 생성된 Windows Server 2008-2012 R2 AMI
  • Windows Server 2016 및 2019

SSM 에이전트가 설치가 안되었다면 SSM 에이전트를 수동으로 설치합니다.

2-2. CloudWatch 에이전트 설치하기

데이터를 CloudWatch로 전송하려면 EC2 인스턴스에 아웃바운드 인터넷 액세스 권한이 있어야합니다. 먼저 인터넷 액세스가 가능한지 확인합니다. 다음 단계를 통해 Systems Manager를 사용하여 CloudWatch 에이전트 패키지를 다운로드합니다.

Systems Manager 콘솔에 접속한 후 Node Management 메뉴 아래 Run Command을 선택합니다. Run Command는 AWS Systems Manager 콘솔을 사용하여 인스턴스 플릿에 명령을 보내는 방법입니다.

Command document 영역에서 AWS-ConfigureAWSPackage를 검색하여 선택합니다. AWS Systems Manager Command Document는 Systems Manager가 관리형 인스턴스에서 수행하는 작업을 정의하는 문서입니다. AWS-ConfigureAWSPackage 문서에는 distributor 패키지를 설치하거나 제거할 수 있는 작업이 정의되어 있습니다. 그 안에 AmazonCloudWatchAgent 패키지가 제공되므로 이것을 사용해 설치하겠습니다.

Command Parameters 영역의 Action 항목에서 Install 작업을 선택합니다. Name 항목에 AmazonCloudWatchAgent를 입력합니다.

Target 영역에서 CloudWatch 에이전트를 설치할 EC2 인스턴스를 선택합니다.

Output options 영역에서 필요에 따라 command 실행 결과(Output)를 S3에 저장하거나 Amazon CloudWatch logs로 보낼 수 있습니다.

하단의 Run을 눌러 해당 작업을 실행합니다.

작업이 완료되면 콘솔 화면에서 결과를 확인할 수 있습니다. 아래 화면은 성공적으로 CloudWatch 에이전트 설치가 완료되었음을 나타냅니다.

Windows EC2 인스턴스에 접속해보면 다음과 같이 CloudWatch 에이전트 파일이 “C:\Program Files\Amazon\AmazonCloudWatchAgent” 경로에 다운로드가 된 것을 확인할 수 있습니다.

PowerShell에서 Get-Service 명령을 사용하여 CloudWatch 에이전트가 현재 실행 중인지 확인할 수 있습니다.

Get-Service -Name AmazonCloudWatchAgent

이제 CloudWatch 에이전트 구성 파일을 생성하겠습니다.

3. CloudWatch 에이전트 구성 파일을 생성하고 배포하기

3-1. CloudWatch 에이전트 구성 파일 생성하기

CloudWatch 에이전트 구성 파일은 에이전트가 수집해야 하는 지표와 로그가 지정되어 있는 JSON 파일입니다. 직접 생성하거나 편의를 위해 CloudWatch 에이전트 구성 마법사(amazon-cloudwatch-agent-config-wizard)를 사용할 수 있습니다. 마법사를 통해 만든 파일은 나중에 수동으로 편집하여 지표 또는 로그를 추가하거나 제거할 수 있습니다. 구성 파일을 변경할 때마다 변경 사항을 적용하기 위해서는 에이전트 재시작이 필요합니다.

이 글에서는 마법사를 사용하여 구성 파일을 만든 다음, 수동으로 원하는 지표를 수집할 수 있도록 수정하겠습니다.

1) CloudWatch 에이전트 구성 마법사를 통해 기본 에이전트 구성 파일 생성하기

관리 서버 역할을 하는 EC2 인스턴스에 접속하여 CloudWatch 에이전트 구성 마법사(amazon-cloudwatch-agent-config-wizard)를 실행합니다.

cd "C:\Program Files\Amazon\AmazonCloudWatchAgent"
amazon-cloudwatch-agent-config-wizard.exe

CloudWatch 에이전트 구성 파일 마법사에서는 다음을 포함한 일련의 질문을 던집니다. 질문에 답하여 서버의 구성 파일을 생성합니다.

  • 에이전트를 Amazon EC2 인스턴스에 설치할 것입니까 아니면 온프레미스 서버에 설치할 것입니까?
  • 서버가 Linux를 실행합니까 아니면 Windows Server를 실행합니까?
  • CloudWatch Logs 로그에 로그 파일을 보내도록 하시겠습니까? 그렇다면 기존 CloudWatch Logs 에이전트 구성 파일이 있습니까? 예인 경우 CloudWatch 에이전트는 이 파일을 사용하여 서버에서 수집할 로그를 결정할 수 있습니다.
  • 서버에서 지표를 수집하려는 경우 기본 지표 집합 중 하나를 모니터링하시겠습니까? 아니면 수집할 지표 목록을 사용자 지정하시겠습니까?
  • StatsD 또는 collectd를 사용하여 애플리케이션 또는 서비스에서 사용자 지정 지표를 수집하시겠습니까?
  • 기존 SSM 에이전트에서 마이그레이션하는 중입니까?

자세한 내용은 에이전트 구성 파일 마법사를 완료하기 위한 팁을 참조하세요.

StatsD는 서비스/애플리케이션에서 메트릭 저장소 백엔드로 사용자 지정 메트릭을 게시하는 솔루션 중 하나로, CloudWatch 에이전트는 StatsD 프로토콜을 사용하는 StatsD 데몬 중 하나입니다. 따라서 이 질문에서는 yes를 선택해주세요.

마법사는 사전 정의된 지표 집합을 Basic, Standard, Advanced 레벨로 구성해놓았습니다. 이 질문에서는 Standard 이상을 선택하는 것이 좋습니다. 각 수준에서 지원하는 기본 지표에 대한 자세한 내용은 사전 정의된 CloudWatch 에이전트 지표 집합을 참조하세요.

Systems Manager Parameter Store에 파일을 저장할 것인지 묻는 질문이 나타나면 yes를 선택합니다. Systems Manager의 Parameter Store에 CloudWatch 에이전트 구성 파일을 저장해놓으면 나중에 Systems Manager에서 다른 인스턴스에 CloudWatch 에이전트를 설치할 때 해당 구성 파일을 배포할 수 있습니다. 이 때 에이전트 구성 파일의 이름은 앞서 만든 IAM role의 policy 정책에 따라 AmazonCloudWatch- 이름으로 시작되어야합니다. AmazonCloudWatch- 이름으로 시작되지 않으면 앞서 만든 IAM role의 policy을 사용하여 Parameter Store에서 파일을 다운로드 및 사용할 수 없습니다.

마법사를 완료하면 에이전트 구성 파일이 기본적으로 “C:\Program Files\Amazon\AmazonCloudWatchAgent\config.json”에 저장됩니다.

Systems Manager Parameter Store에서도 CloudWatch 에이전트 구성 파일이 저장된 것을 확인할 수 있습니다.

2) 에이전트 구성 파일을 수동으로 편집하여 수집할 지표를 추가하기

Windows Performance Monitor에는 다양한 Performance counter가 있습니다. Performance counter 목록은 cmd에서 다음 명령어를 통해 파일로 export 하여 확인할 수 있으며, CloudWatch로 수집할 수 있는 지표들에 대한 자세한 내용은 CloudWatch 에이전트 구성 파일: 지표 섹션을 참고하세요.

typeperf -q -o counters.txt

우리는 그 중에서 아래 두가지 메모리 관련 지표를 추가해보겠습니다.

  • Memory: Available MBytes (운영체제 메모리가 전반적으로 부족한지 체크할 수 있는 중요한 카운터입니다.)
  • Memory: Page Faults/sec (이 카운터의 비율이 높으면 페이징이 과도하다는 의미입니다. RAM이 충분하지 않고 과도한 하드 페이지 폴트가 지속적으로 발생하면 애플리케이션 성능이 저하되므로 시스템 모니터링에 있어서 중요한 지표 중 하나입니다.)

CloudWatch 에이전트 구성 파일을 EC2 인스턴스 내 텍스트 편집기 도구를 이용해서 수정할 수도 있지만 우리는 Systems Manager Parameter Store에서 수정 기능을 통해 편리하게 수정하겠습니다.
Save Changes 버튼을 눌러 저장합니다.

3-2. CloudWatch 에이전트 구성 파일을 다른 서버들에 배포하기

Systems Manager 콘솔에 접속한 후 Node Management 메뉴 아래 Run Command로 이동합니다.

Command document 영역에서 AmazonCloudWatch로 검색한 후 결과에서 AmazonCloudWatch-ManageAgent를 선택합니다.
이 문서는 CloudWatch 에이전트에서 사용할 수 있는 명령어들로 구성되어 있습니다.

Command parameters 영역의 Optional Configuration Location 항목에 AmazonCloudWatch-windows를 입력합니다.

Targets 영역에서 CloudWatch 에이전트 구성 파일을 배포할 인스턴스들을 선택하고 실행합니다.

설정이 완료되었습니다. 이제 CloudWatch 콘솔에서 지표가 잘 수집이 되는지 보겠습니다.

CloudWatch 에이전트에서 수집되는 지표 모니터링하기

CloudWatch 콘솔에 접속하여 Metrics 메뉴로 이동합니다. CloudWatch 에이전트가 수집하는 지표의 기본 네임스페이스는 CWAgent입니다.

CloudWatch 대시보드를 구성해서 단일 뷰에서 모니터링할 수 있습니다.

특정 임계값을 초과할 경우 CloudWatch 경보를 생성하여 자동으로 알림을 받을 수도 있습니다.

마무리

Amazon CloudWatch에서는 게스트 운영체제 지표를 기본적으로 수집하지 못하는 문제점이 있어 시스템 관리자가 별도의 모니터링 프로그램을 통해 해당 정보를 확인해야하는 불편함이 있었습니다. 이를 해결하기 위해 Amazon CloudWatch 에이전트를 리소스에 설치하여 일괄적으로 Amazon CloudWatch에서 정보를 수집 및 모니터링할 수 있는 방법을 알아보았습니다. 추가적으로 CloudWatch 에이전트 설정 파일의 배포 편의성을 위해 Systems Manager Parameter Store 기능을 소개했습니다. 더 자세한 내용은 CloudWatch 에이전트 관련 공식 문서를 살펴보세요.

– 주혜령, AWS Technical Account Manager