EC2 모니터링 및 Observability
소개
지속적인 모니터링과 Observability는 민첩성을 높이고, 고객 경험을 개선하며, 클라우드 환경의 위험을 줄여줍니다. Wikipedia에 따르면, Observability는 시스템의 외부 출력에 대한 지식으로부터 내부 상태를 얼마나 잘 추론할 수 있는지를 측정하는 것입니다. Observability라는 용어 자체는 제어 이론 분야에서 유래했으며, 기본적으로 시스템이 생성하는 외부 신호/출력을 학습함으로써 구성 요소의 내부 상태를 추론할 수 있다는 것을 의미합니다.
모니터링과 Observability의 차이점은 다음과 같습니다. 모니터링은 시스템이 작동하는지 여부를 알려주는 반면, Observability는 시스템이 왜 작동하지 않는지를 알려줍니다. 모니터링은 일반적으로 사후 대응적 조치인 반면, Observability의 목표는 핵심 성과 지표를 사전에 개선할 수 있도록 하는 것입니다. 시스템은 관측되지 않으면 제어하거나 최적화할 수 없습니다. metrics, logs, traces 수집을 통한 워크로드 계측과 적절한 모니터링 및 Observability 도구를 사용하여 의미 있는 인사이트와 상세한 컨텍스트를 얻으면 고객이 환경을 제어하고 최적화하는 데 도움이 됩니다.

AWS는 고객이 모니터링에서 Observability로 전환하여 완전한 엔드투엔드 서비스 가시성을 확보할 수 있도록 지원합니다. 이 문서에서는 Amazon Elastic Compute Cloud(Amazon EC2)에 초점을 맞추고, AWS 네이티브 및 오픈소스 도구를 통해 AWS 클라우드 환경에서 서비스의 모니터링 및 Observability를 개선하기 위한 모범 사례를 다룹니다.
Amazon EC2
Amazon Elastic Compute Cloud(Amazon EC2)는 Amazon Web Services(AWS) 클라우드의 고도로 확장 가능한 컴퓨팅 플랫폼입니다. Amazon EC2는 초기 하드웨어 투자의 필요성을 없애, 고객이 사용한 만큼만 비용을 지불하면서 애플리케이션을 더 빠르게 개발하고 배포할 수 있도록 합니다. EC2가 제공하는 주요 기능으로는 인스턴스(Instances)라 불리는 가상 컴퓨팅 환경, Amazon Machine Images라 불리는 사전 구성된 인스턴스 템플릿, 인스턴스 유형으로 제공되는 CPU, 메모리, 스토리지, 네트워킹 용량의 다양한 구성이 있습니다.
AWS 네이티브 도구를 사용한 모니터링 및 Observability
Amazon CloudWatch
Amazon CloudWatch는 AWS, 하이브리드, 온프레미스 애플리케이션 및 인프라 리소스에 대한 데이터와 실행 가능한 인사이트를 제공하는 모니터링 및 관리 서비스입니다. CloudWatch는 logs, metrics, events 형태로 모니터링 및 운영 데이터를 수집합니다. 또한 AWS 리소스, 애플리케이션, AWS 및 온프레미스 서버에서 실행되는 서비스에 대한 통합 뷰를 제공합니다. CloudWatch는 리소스 사용률, 애플리케이션 성능, 운영 상태에 대한 시스템 전반의 가시성을 확보하는 데 도움을 줍니다.

통합 CloudWatch 에이전트
통합 CloudWatch 에이전트는 MIT 라이선스의 오픈소스 소프트웨어로, x86-64 및 ARM64 아키텍처를 활용하는 대부분의 운영체제를 지원합니다. CloudWatch 에이전트는 Amazon EC2 인스턴스 및 하이브리드 환경의 온프레미스 서버에서 시스템 수준 메트릭을 수집하고, 애플리케이션 또는 서비스에서 커스텀 메트릭을 검색하며, Amazon EC2 인스턴스와 온프레미스 서버에서 로그를 수집하는 데 도움을 줍니다.

Amazon EC2 인스턴스에 CloudWatch 에이전트 설치
커맨드 라인 설치
CloudWatch 에이전트는 커맨드 라인을 통해 설치할 수 있습니다. 다양한 아키텍처와 운영체제에 필요한 패키지는 다운로드 가능합니다. CloudWatch 에이전트가 Amazon EC2 인스턴스에서 정보를 읽고 CloudWatch에 쓸 수 있는 권한을 제공하는 필요한 IAM 역할을 생성합니다. 필요한 IAM 역할이 생성되면, 해당 Amazon EC2 인스턴스에 CloudWatch 에이전트를 설치하고 실행할 수 있습니다.
문서: 커맨드 라인을 사용하여 CloudWatch 에이전트 설치
AWS Observability Workshop: CloudWatch 에이전트 설정 및 설치
AWS Systems Manager를 통한 설치
CloudWatch 에이전트는 AWS Systems Manager를 통해서도 설치할 수 있습니다. CloudWatch 에이전트가 Amazon EC2 인스턴스에서 정보를 읽고 CloudWatch에 쓸 수 있으며 AWS Systems Manager와 통신할 수 있는 권한을 제공하는 필요한 IAM 역할을 생성합니다. EC2 인스턴스에 CloudWatch 에이전트를 설치하기 전에, 해당 EC2 인스턴스에 SSM 에이전트를 설치하거나 업데이트합니다. CloudWatch 에이전트는 AWS Systems Manager를 통해 다운로드할 수 있습니다. 수집할 메트릭(커스텀 메트릭 포함)과 로그를 지정하는 JSON 구성 파일을 생성할 수 있습니다. 필요한 IAM 역할과 구성 파일이 생성되면, 해당 Amazon EC2 인스턴스에 CloudWatch 에이전트를 설치하고 실행할 수 있습니다.
문서: AWS Systems Manager를 사용하여 CloudWatch 에이전트 설치
AWS Observability Workshop: AWS Systems Manager Quick Setup을 사용하여 CloudWatch 에이전트 설치
YouTube 동영상: Collect Metrics and Logs from Amazon EC2 instances with the CloudWatch Agent
하이브리드 환경의 온프레미스 서버에 CloudWatch 에이전 트 설치
온프레미스 서버와 클라우드를 함께 사용하는 하이브리드 고객 환경에서도, Amazon CloudWatch에서 통합 Observability를 달성하기 위해 유사한 접근 방식을 취할 수 있습니다. CloudWatch 에이전트는 Amazon S3에서 직접 다운로드하거나 AWS Systems Manager를 통해 다운로드할 수 있습니다. 온프레미스 서버가 Amazon CloudWatch로 데이터를 전송할 수 있도록 IAM 사용자를 생성합니다. 온프레미스 서버에 에이전트를 설치하고 시작합니다.
Amazon CloudWatch를 사용한 Amazon EC2 인스턴스 모니터링
Amazon EC2 인스턴스와 애플리케이션의 안정성, 가용성, 성능을 유지하기 위한 핵심 요소는 지속적인 모니터링입니다. 필요한 Amazon EC2 인스턴스에 CloudWatch 에이전트가 설치되면, 안정적인 환경을 유지하기 위해 인스턴스의 상태와 성능을 모니터링해야 합니다. 기준선으로, CPU 사용률, 네트워크 사용률, 디스크 성능, 디스크 읽기/쓰기, 메모리 사용률, 디스크 스왑 사용률, 디스크 공간 사용률, 페이지 파일 사용률, EC2 인스턴스의 로그 수집 등의 항목을 모니터링하는 것이 권장됩니다.
기본 모니터링과 세부 모니터링
Amazon CloudWatch는 Amazon EC2의 원시 데이터를 수집하고 처리하여 읽기 가능한 거의 실시간 메트릭으로 변환합니다. 기본적으로 Amazon EC2는 기본 모니터링으로 5분 주기로 CloudWatch에 메트릭 데이터를 전송합니다. 인스턴스에 대해 1분 주기로 메트릭 데이터를 CloudWatch에 전송하려면, 인스턴스에서 세부 모니터링을 활성화할 수 있습니다.
자동화 및 수동 모니터링 도구
AWS는 고객이 Amazon EC2를 모니터링하고 문제 발생 시 보고하는 데 도움이 되는 자동화 도구와 수동 도구 두 가지 유형의 도구를 제공합니다. 이 도구들 중 일부는 약간의 설정이 필요하고, 일부는 수동 개입이 필요합니다. 자동화 모니터링 도구에는 AWS 시스템 상태 검사, 인스턴스 상태 검사, Amazon CloudWatch 경보, Amazon EventBridge, Amazon CloudWatch Logs, CloudWatch 에이전트, Microsoft System Center Operations Manager용 AWS Management Pack이 포함됩니다. 수동 모니터링 도구에는 이 문서의 별도 섹션에서 자세히 살펴볼 대시보드가 포함됩니다.
문서: 자동화 및 수동 모니터링
CloudWatch 에이전트를 사용한 Amazon EC2 인스턴스의 Metrics
Metrics(메트릭)는 CloudWatch의 기본 개념입니다. 메트릭은 CloudWatch에 게시되는 시간순 데이터 포인트 집합을 나타냅니다. 메트릭을 시간에 따른 변수 값을 나타내는 데이터 포인트와 함께 모니터링할 변수로 생각하세요. 예를 들어, 특정 EC2 인스턴스의 CPU 사용량은 Amazon EC2가 제공하는 하나의 메트릭입니다.

CloudWatch 에이전트를 사용한 기본 메트릭
Amazon CloudWatch는 Amazon EC2 인스턴스에서 메트릭을 수집하며, AWS Management Console, AWS CLI 또는 API를 통해 조회할 수 있습니다. 사용 가능한 메트릭은 기본 모니터링의 경우 5분 간격, 세부 모니터링(활성화된 경우)의 경우 1분 간격의 데이터 포인트입니다.

CloudWatch 에이전트를 사용한 커스텀 메트릭
고객은 API 또는 CLI를 사용하여 1분 단위의 표준 해상도 또는 1초 간격까지의 고해상도로 자체 커스텀 메트릭을 CloudWatch에 게시할 수도 있습니다. 통합 CloudWatch 에이전트는 StatsD와 collectd를 통한 커스텀 메트릭 검색을 지원합니다.
CloudWatch 에이전트에서 StatsD 프로토콜을 사용하여 애플리케이션 또는 서비스의 커스텀 메트릭을 검색할 수 있습니다. StatsD는 다양한 애플리케이션에서 메트릭을 수집할 수 있는 인기 있는 오픈소스 솔루션입니다. StatsD는 특히 자체 메트릭을 계측하는 데 유용하며, Linux 및 Windows 기반 서버를 모두 지원합니다.
collectd 프로토콜 을 사용하는 CloudWatch 에이전트로도 애플리케이션 또는 서비스의 커스텀 메트릭을 검색할 수 있습니다. collectd는 다양한 애플리케이션에 대한 시스템 통계를 수집할 수 있는 플러그인을 갖춘 Linux 서버에서만 지원되는 인기 있는 오픈소스 솔루션입니다. CloudWatch 에이전트가 이미 수집할 수 있는 시스템 메트릭에 collectd의 추가 메트릭을 결합하면, 시스템과 애플리케이션을 더 잘 모니터링, 분석, 문제 해결할 수 있습니다.
CloudWatch 에이전트를 사용한 추가 커스텀 메트릭
CloudWatch 에이전트는 EC2 인스턴스에서 커스텀 메트릭 수집을 지원합니다. 몇 가지 인기 있는 예시는 다음과 같습니다:
- Elastic Network Adapter(ENA)를 사용하는 Linux에서 실행되는 EC2 인스턴스의 네트워크 성능 메트릭.
- Linux 서버의 Nvidia GPU 메트릭.
- Linux 및 Windows 서버의 개별 프로세스에서 procstat 플러그인을 사용한 프로세스 메트릭.
CloudWatch 에이전트를 사용한 Amazon EC2 인스턴스의 Logs
Amazon CloudWatch Logs는 기존 시스템, 애플리케이션, 커스텀 로그 파일을 사용하여 시스템과 애플리케이션을 거의 실시간으로 모니터링하고 문제를 해결하는 데 도움을 줍니다. Amazon EC2 인스턴스와 온프레미스 서버에서 CloudWatch로 로그를 수집하려면, 통합 CloudWatch 에이전트를 설치해야 합니다. 최신 통합 CloudWatch 에이전트가 권장되며, 로그와 고급 메트릭을 모두 수집할 수 있습니다. 또한 다양한 운영체제를 지원합니다. 인스턴스가 Instance Metadata Service Version 2(IMDSv2)를 사용하는 경우 통합 에이전트가 필수입니다.

통합 CloudWatch 에이전트가 수집한 로그는 Amazon CloudWatch Logs에서 처리되고 저장됩니다. Windows 또는 Linux 서버, Amazon EC2와 온프레미스 서버 모두에서 로그를 수집할 수 있습니다. CloudWatch 에이전트 구성 마법사를 사용하여 CloudWatch 에이전트의 설정을 정의하는 구성 JSON 파일을 설정할 수 있습니다.

AWS Observability Workshop: Logs
Amazon EC2 인스턴스 이벤트
이벤트는 AWS 환경의 변경을 나타냅니다. AWS 리소스와 애플리케이션은 상태가 변경될 때 이벤트를 생성할 수 있습니다. CloudWatch Events는 AWS 리소스와 애플리케이션의 변경을 설명하는 거의 실시간의 시스템 이벤트 스트림을 제공합니다. 예를 들어, Amazon EC2는 EC2 인스턴스의 상태가 pending에서 running으로 변경될 때 이벤트를 생성합니다. 고객은 자체 애플리케이션 수준의 커스텀 이벤트를 생성하여 CloudWatch Events에 게시할 수도 있습니다.
고객은 상태 검사와 예약된 이벤트를 확인하여 Amazon EC2 인스턴스의 상태를 모니터링할 수 있습니다. 상태 검사는 Amazon EC2가 수행하는 자동 검사의 결과를 제공합니다. 이 자동 검사는 인스턴스에 영향을 미치는 특정 문제를 감지합니다. Amazon CloudWatch가 제공하는 데이터와 함께 상태 검사 정보는 각 인스턴스에 대한 상세한 운영 가시성을 제공합니다.
Amazon EC2 인스턴스 이벤트를 위한 Amazon EventBridge 규칙
Amazon CloudWatch Events는 리소스 변경이나 문제 같은 작업에 자동으로 대응하기 위해 Amazon EventBridge를 사용하여 시스템 이벤트를 자동화할 수 있습니다. Amazon EC2를 포함한 AWS 서비스의 이벤트는 거의 실시간으로 CloudWatch Events에 전달되며, 고객은 이벤트가 규칙과 일치할 때 적절한 조치를 취하기 위한 EventBridge 규칙을 생성할 수 있습니다. 가능한 조치로는 AWS Lambda 함수 호출, Amazon EC2 Run Command 호출, Amazon Kinesis Data Streams로 이벤트 릴레이, AWS Step Functions 상태 머신 활성화, Amazon SNS 주제 알림, Amazon SQS 큐 알림, 내부 또는 외부 인시던트 대응 애플리케이션이나 SIEM 도구로 전달 등이 있습니다.
AWS Observability Workshop: 인시던트 대응 - EventBridge 규칙
Amazon EC2 인스턴스를 위한 Amazon CloudWatch 경보
Amazon CloudWatch 경보는 지정한 기간 동안 메트릭을 감시하고, 여러 기간에 걸쳐 지정된 임계값에 대한 메트릭 값을 기반으로 하나 이상의 작업을 수행할 수 있습니다. 경보는 상태가 변경될 때만 작업을 호출합니다. 작업은 Amazon Simple Notification Service(Amazon SNS) 주제로 전송되는 알림, Amazon EC2 Auto Scaling 또는 EC2 인스턴스를 중지, 종료, 재부팅 또는 복구하는 것과 같은 다른 적절한 조치가 될 수 있습니다.

경보가 트리거되면, 작업으로서 SNS 주제로 이메일 알림이 전송됩니다.
