D2-04. CloudWatch

D2-04. CloudWatch

in

1. CloudWatch

CloudWatch는 AWS 리소스와 애플리케이션을 위한 모니터링 및 관측성 서비스입니다.
AWS 모든 리소스에서 발생하는 로그지표(Metrics) 데이터를 수집, 시각화하고 이에 대응합니다.

1-1. 주요 기능

1). CloudWatch Metrics

리소스의 성능 데이터(EC2 CPU 사용률, S3 요청 수 등)를 수집하는 시계열 데이터입니다.

  • 기본 지표: AWS가 분(5분 또는 1분)마다 자동으로 제공하는 지표
  • 사용자 정의 지표: Unified CloudWatch Agent 등을 통해 사용자가 직접 수집하는 상세 지표

2). CloudWatch Logs

애플리케이션 및 OS 로그 파일을 중앙에서 수집, 모니터링, 저장합니다.
Log Group과 Log Streams 구조로 관리되며, Logs Insights로 강력한 쿼리가 가능합니다.

3). CloudWatch Alarms

특정 지표(Metric) 가 설정한 임계값(Threshold) 을 초과할 때 알림을 보내는 기능입니다.
단순 알림(SNS) 외에도 특정 작업(EC2 Auto Scaling 수행, EC2 인스턴스 재부팅 등)을 트리거할 수 있습니다.

4). CloudWatch Dashboards

여러 리전과 계정에 분산된 지표와 로그 쿼리 결과를 단일 뷰에서 시각화하는 대시보드입니다.
운영 현황을 한 눈에 파악하는데 사용됩니다.


2. Unified CloudWatch Agent

Unified CloudWatch Agent는 인스턴스 내부(OS 레벨)의 추가적인 시스템 지표와 로그 파일을 수집하여 CloudWatch로 전송하는 에이전트입니다.

간단하게 정리하면, CloudWatch에서 못 가져오는 데이터를 Agent을 이용하여 가져오는 기능입니다.

2-1. 핵심 기능

항목 설명
수집 대상 상세 지표: RAM 사용률, 디스크 사용 공간, 프로세스 수 등로그 파일: /var/log/messages, 애플리케이션 로그 등 인스턴스 내의 각종 로그 파일
설정 Parameter Store: 에이전트 설정을 Parameter Store에 저장하여 중앙에서 관리설정 파일: 인스턴스 내 직접 설정 파일 배치
IAM 권한 에이전트가 CloudWatch (Logs, Metrics) 및 SSM Parameter Store와 통신할 수 있는 IAM 권한이 필요합니다.
지표 네임스페이스 에이전트를 통해 수집된 사용자 정의 지표는 기본적으로 CWAgent 네임스페이스에 저장됩니다.

2-2. Procstat 플러그인

Procstat 플러그인은 Unified CloudWatch Agent 내의 특정 기능으로, 시스템 전체가 아닌 개별 프로세스(Individual Process) 의 리소스 사용률을 모니터링합니다.

항목 설명
주요 수집 지표 프로세스별 CPU 사용률 (procstat_cpu_usage), 프로세스별 메모리 사용률, 실행 중인 프로세스 수
모니터링 대상 지정 PID 파일: 특정 프로세스 ID(PID) 파일을 지정이름 (Name): httpd, nginx 등 정확한 프로세스 이름을 지정패턴 (Pattern): 정규식을 사용한 프로세스 이름 패턴으로 필터링
지표 접두사 이 플러그인을 통해 수집된 지표는 procstat_ (예: procstat_cpu_usage)으로 시작

2-3. Troubleshooting

# 에이전트 구성 파일 유효성 검사 로그
/opt/aws/amazon-cloudwatch-agent/logs/configuration-validation.log

# 에이전트 디버그 로그 (상세 문제 분석용)
/opt/aws/amazon-cloudwatch-agent/logs/amazon-cloudwatch-agent.log
  • 에이전트가 시작되지 않으면 configuration-validation.log 파일을 확인하여 설정 오류를 파악할 수 있습니다.
  • 메트릭/로그가 전송되지 않는 등의 문제는 amazon-cloudwatch-agent.log 파일에서 상세 원인을 확인할 수 있습니다.

3. CloudWatch Logs

CloudWatch Logs는 애플리케이션, AWS 서비스, OS 등에서 발생하는 로그 파일을 중앙에서 수집, 모니터링, 저장, 분석하는 서비스입니다.

3-1. 구조

항목 설명
로그 그룹 로그의 최상위 컨테이너입니다.보통 애플리케이션 또는 서비스 단위로 생성되며 보존 정책, 암호화(KMS), 구독 필터 등을 해당 그룹에서 설정합니다.
로그 스트림 로그 그룹 내부에 있는 실제 로그 이벤트의 시퀀스입니다.일반적으로 로그를 생성하는 Source (EC2 인스턴스 ID, Lambda 컨테이너 ID 등)에 해당합니다.

3-2. 로그 수집

수집 방식 설명
Unified CloudWatch Agent Agent를 통해 OS 로그 및 애플리케이션 로그를 수집합니다.
AWS 서비스 통합 Lambda, ECS, Elastic Beanstalk, VPC Flow Logs, API Gateway, CloudTrail, Route53 DNS 쿼리 등 다수의 서비스가 기본적으로 로그를 전송합니다.
SDK 애플리케이션 코드 내에서 AWS SDK를 사용해 직접 커스텀 로그를 전송할 수 있습니다.

3-3. Log Insights

Logs Insights는 CloudWatch Logs에 저장된 로그를 검색하고 분석하는 강력한 대화형 쿼리 엔진입니다.

1). 주요 기능

구성 요소 설명
로그 수집 (Log Ingestion) VPC Flow Logs, Lambda, ECS, API Gateway, Route53, CloudTrail 등 다양한 AWS 서비스와 CloudWatch 에이전트를 통해 EC2 및 온프레미스 서버의 로그를 자동으로 수집합니다.
로그 검색 및 분석 CloudWatch Logs Insights라는 강력한 쿼리 엔진을 제공합니다. 전용 쿼리 언어를 사용해 대용량 로그 데이터를 신속하게 검색, 분석하고 시각화할 수 있습니다.
일괄 내보내기 (Batch Export to S3) 특정 기간의 로그 데이터를 S3 버킷으로 한 번에 내보낼 수 있습니다. 장기 보관, 규정 준수, 또는 다른 분석 도구와의 연동을 위해 사용됩니다. (실시간 아님, 최대 12시간 소요)
실시간 스트리밍 (Real-time Streaming) 구독 필터를 사용하여 특정 패턴(예: “ERROR”)의 로그를 실시간으로 필터링하고, 이를 Kinesis Data Streams, Kinesis Data Firehose, Lambda로 즉시 전송하여 실시간 알림, 처리, 분석을 수행할 수 있습니다.
교차 계정 로그 집계 구독 필터와 대상(Destination) 기능을 활용하여 여러 AWS 계정 및 리전의 로그를 중앙 계정의 Kinesis 등으로 집계하여 통합 관리 및 분석을 할 수 있습니다.

2). CloudWatch Logs Insights 쿼리

-- "Exception" 또는 "Error"라는 단어가 포함된 최신 로그 20개를 검색
fields @timestamp, @message
| filter @message like /Exception/ or @message like /Error/
| sort @timestamp desc
| limit 20
  • fields: 결과에 표시할 필드를 지정합니다.
  • filter: 특정 조건을 만족하는 로그만 필터링합니다.
  • sort: 지정된 필드를 기준으로 정렬합니다. (desc: 내림차순)
  • limit: 표시할 결과의 수를 제한합니다.

3). S3로 로그를 내보내는 API 호출

# S3 버킷으로 로그를 일괄적으로 내보내는 작업을 시작하는 AWS CLI 명령어 예시
aws logs create-export-task \\\\
    --log-group-name "/my-app/logs" \\\\
    --from 1672531200000 \\\\
    --to 1675209599000 \\\\
    --destination "my-log-archive-bucket" \\\\
    --destination-prefix "exported-logs"

  • 지정된 로그 그룹의 특정 기간 데이터를 대상 S3 버킷으로 내보내는 작업을 생성합니다.
    이는 실시간 처리가 아닌 배치(batch) 작업입니다.

4. CloudWatch Alarms

CloudWatch Alarms는 특정 지표가 사용자가 정의한 임계값을 위반할 때, 자동으로 알림을 보내거나 특정 작업을 트리거하는 기능입니다.

4-1. 알람 상태

항목 설명
OK 지표가 임계값 이내 (정상)
ALARM 지표가 임계값을 위반 (경보 발생)
INSUFFICIENT_DATA 상태를 판단하기에 데이터가 충분하지 않음

4-2. 경보 작업 대상

항목 설명
EC2 작업 인스턴스를 중지, 종료, 재부팅, 복구를 시킵니다.
Auto Scaling Auto Scaling 그룹을 확장(Scale-out)하거나 축소(Scale-in) 시킵니다.
SNS 알림 SNS 토픽으로 알림을 전송합니다.이를 통해 Lambda 호출 등 다양한 2차 작업으로 연동이 가능합니다.

4-3. 복합 알람 (Composite Alarms)

기본 알람은 단 하나의 지표만 모니터링할 수 있습니다. 복합 알람은 여러 개의 다른 알람 상태를 조합하여 하나의 새로운 알람을 생성하는 기능입니다.

항목 설명
작동 방식 AND 또는 OR 논리 연산자를 사용해 여러 알람을 결합합니다.
주요 장점 알람 노이즈(Alarm Noise) 감소에 매우 효과적입니다.단순히 CPU만 높을 때가 아니라, CPU와 네트워크가 동시에 높을 때만 알림을 받아 불필요한 경보를 줄일 수 있습니다.

4-4. 알람 테스트

임계값이 실제로 위반되지 않았더라도, 알람 발생 시 연결된 작업(SNS, EC2 작업 등)이 올바르게 동작하는지 테스트해야 할 수 있습니다.
이때, set-alarm-state 명령어를 사용하면, 알람 상태를 ALARM으로 강제로 변경하여 테스트를 수행할 수 있습니다.


5. CloudWatch Contributor Insights

CloudWatch Contributor Insights는 로그 데이터를 분석하여 “기여자(Contributor)” 데이터를 보여주는 시계열 리포트를 생성하는 기능입니다.
가장 큰 특징은 시스템 성능에 가장 큰 영향을 미치는 상위 N개(Top-N) 항목, 일명 “Top Talkers”를 식별하는 것입니다.

5-1. 동작 방식

  1. CloudWatch Logs로 전송된 로그 데이터를 분석합니다. (VPC Flow Logs, DNS Logs 등)
  2. AWS 관리형 또는 사용자 정의 **“규칙(Rules)“을 적용합니다.
  3. “기여자”를 순위별로 정렬하여 시계열 리포트를 생성합니다.
    • 가장 많은 트래픽을 유발하는 IP 주소 (Bad Host) 식별
    • 가장 트래픽이 많은 네트워크 사용자 파악
    • 가장 많은 오류를 생성하는 URL 식별