[AWS] Amazon CloudWatch

2025. 8. 15. 11:43·Cloud

Amazon CloudWatch

CloudWatch는 EC2를 비롯한 AWS 리소스와 애플리케이션을 모니터링하고, 성능과 리소스 사용 최적화를 위한 로그, 지표, 이벤트 데이터를 제공하는 서비스다. 사용자는 이 데이터를 수집·보존·분석하여 이상 탐지와 원인 분석을 수행한다.

  

CloudWatch의 주요 기능은 다음과 같다.

명칭 기능 소개 이용 예
CloudWatch Metrics AWS 리소스 지표(metrics)를 수집·관리한다 EC2의 CPU 사용률 수집, RDS의 스토리지 남은 용량 수집
CloudWatch Logs AWS 리소스 로그를 수집·관리한다. 통합 CloudWatch 에이전트를 사용한다 EC2의 OS 로그 수집, RDS의 오류 로그 수집
CloudWatch Logs 구독 필터 Logs에 출력된 로그를 실시간으로 Kinesis Data Firehose 등 다른 AWS 서비스로 연동한다 로그 그룹에 보관된 로그를 Firehose 경유로 S3에 전송한다
CloudWatch Logs Insights Logs에 쌓인 로그에 대해 쿼리를 실행하여 분석한다 VPC Flow Logs에 쿼리를 실행해 Reject된 소스 IP 조사
EventBridge(구 CloudWatch Events) AWS 리소스 **상태 변화(이벤트)**를 감시하고, 이벤트를 트리거로 처리 작업을 실행한다 EC2 설정이 변경(이벤트)되면 이메일로 변경 알림 받기

 

Amazon CloudWatch Logs

CloudWatch Logs는 AWS 리소스나 애플리케이션의 로그 데이터를 수집·보관·분석할 수 있는 서비스다.
로그를 단순 저장만 하는 게 아니라, 검색·필터링·알람까지 가능하다.         

구성 요소 3가지는 다음과 같다.

  • 로그 이벤트(Log Event)
    • 모니터링 대상에서 발생한 단일 로그 데이터.
    • 예: EC2 인스턴스에서 발생한 오류 메시지 한 줄.
    • 특징: 타임스탬프와 메시지로 구성됨.
  • 로그 스트림(Log Stream)
    • 연속적인 로그 이벤트 모음.
    • 동일한 소스(예: 특정 EC2 인스턴스, 애플리케이션)에서 시간 순으로 수집됨.
    • 예: EC2 인스턴스 A의 시스템 로그 스트림.
  • 로그 그룹(Log Group)
    • 여러 로그 스트림을 그룹핑한 단위.
    • 로그 보존 기간, 액세스 제어, 필터 등을 그룹 단위로 설정.
    • 예: 웹 애플리케이션 서비스 전체 로그 그룹. 


통합 CloudWatch 에이전트(CloudWatch Agent)

CloudWatch Logs에 로그를 보내려면 EC2 인스턴스나 온프레미스 서버에 CloudWatch Agent를 설치해야 한다.
이 에이전트는 오픈소스 기반 미들웨어로, OS 로그뿐만 아니라 CPU, 메모리, 디스크 I/O 같은 세부 지표도 함께 수집 가능하다.

설치하기에 앞서 다음과 같은 사항들을 주의해야한다.

 

  • 네트워크 경로 확보
    • EC2 인스턴스가 CloudWatch Logs에 데이터를 보내려면 인터넷 또는 VPC 엔드포인트를 통해 AWS에 접근 가능해야 한다.
    • Public Subnet이면 Internet Gateway, Private Subnet이면 NAT Gateway 또는 VPC Endpoint 필요.
  • IAM 역할(Role) 설정
    • CloudWatch Logs에 쓰기 권한이 있는 IAM Role을 EC2에 연결해야 한다.
    • 예: CloudWatchAgentAdminPolicy 또는 커스텀 정책.

에이전트는 sudo yum install -y amazon-cloudwatch-agent와 같은 명령어로 설치 가능하다. 하지만, 관리하는 EC2가 많아질수록 직접 설치하기 보다는 SSM이나 AMI에 포함시켜서 배포하는게 효율적이다.

 

CloudWatch Logs 요금 구조

CloudWatch Logs 요금은 크게 수집(데이터 모으기), 저장(아카이브), 벤딩 로그 전송으로 구분된다.

  • 벤딩 로그(Vended Logs)
    • AWS가 자동으로 생성하는 서비스 로그(VPC Flow Logs, Route 53 Logs 등).
  • AWS 서비스별 공개 로그
    • API Gateway, Lambda, CloudTrail 등.
  • 사용자 지정 로그
    • 애플리케이션·온프레미스 로그.

 

특히, CloudWatch Logs는 로그 데이터 보관료보다 수집 요금이 비싸다. 대략적인 요금은 다음과 같다. 요금은 변동이 있으므로 대략적인 참고만 한다.

  • 무료 범위
    • 매월 5GB까지 수집 + 아카이브 무료.
  • 일반 로그 요금
    • 수집: 0.76 USD/GB
    • 저장(아카이브): 0.0314 USD/GB
  • 벤딩 로그 요금(구간별)
    • 0~10TB: 0.76 USD/GB
    • 10~30TB: 0.38 USD/GB
    • 30~50TB: 0.152 USD/GB
    • 50TB 초과: 0.076 USD/GB

AWS 서비스 도입을 검토할 때는 AWS Pricing Calculator를 이용해서 예상 비용을 계산하는 것이 편리하다. 또한 제 3자에게 해당 URL을 공유하여 대략적인 AWS 예상 사용료를 알 수 있다.

cf. AWS Pricing Calculator: https://calculator.aws/#/

 

CloudWatch Logs Insights

CloudWatch Logs Insights는 선택한 로그 그룹에 대해 전용 쿼리 언어로 질의를 실행하고, 결과를 표·차트로 시각화하여 원인 분석과 트러블슈팅에 쓰는 기능이다. 로그 필드 스키마를 자동으로 추론하고, filter | stats | sort | limit 같은 파이프라인 구문으로 빠르게 요약·집계할 수 있다. VPC Flow Logs처럼 구조가 일정한 로그는 기본 필드를 자동 인식하므로 바로 질의가 가능하다.

 

VPC Flow Logs

VPC Flow Logs는 VPC의 ENI(Elastic Network Interface) 사이를 오가는 IP 트래픽 메타데이터를 캡처하는 기능이다. 패킷 페이로드는 저장하지 않고, 연결의 시작·종료 시각, 바이트·패킷 수, 프로토콜, 소스/목적지 IP·포트, 결과(ACCEPT/REJECT) 같은 요약 정보를 기록한다. 대상 리소스는 ENI 단위이며, 다음과 같이 ENI를 사용하는 각종 서비스들의 트래픽도 기록할 수 있다.

  • ELB
  • Amazon RDS
  • Amazon ElastiCache
  • Amazon Redshift
  • Amazon WorkSpaces
  • NAT Gateway
  • Transit Gateway
  • Amazon EC2

로그 전송 대상은 CloudWatch Logs 또는 S3이며, 필요하면 Kinesis Data Firehose로도 전달할 수 있다.

 

CloudWatch Logs Insights 로그 필드

CloudWatch Logs Insights는 CloudWatch Logs에 출력된 로그 데이터를 데이터 특성에 따라 로그 필드로 자동으로 검색해서 분류한다. 공통적인 필드는 대략 다음과 같다.

accountId AWS 계정 ID이다.
interfaceId 트래픽이 기록된 ENI ID이다.
start 집계 구간에서 첫 패킷이 수신된 시각(유닉스 초)이다.
end 집계 구간에서 마지막 패킷이 수신된 시각(유닉스 초)이다.
version VPC Flow Logs 버전이다(일반적으로 2)이다.
logStatus 전송 상태이다(예: OK, NODATA, SKIPDATA)이다.
action 연결 결과이다. ACCEPT는 허용, REJECT는 거부이다.
protocol IANA 프로토콜 번호이다(예: 6=TCP, 17=UDP, 1=ICMP)이다.
srcAddr, dstAddr 소스/목적지 IP 주소이다.
srcPort, dstPort 소스/목적지 포트 번호이다.
bytes, packets 전송된 바이트/패킷 수이다.

 

Logs Insights는 여기에 @로 시작하는 메타 필드를 추가로 노출한다.

@timestamp 이벤트 타임스탬프이다.
@ingestionTime 이벤트가 CloudWatch Logs로 수집된 시각(유닉스 초)이다.
@log 로그 그룹 식별자이다.
@logStream 로그 스트림 이름이다.
@message 원본 로그 문자열이다. parse로 세부 값을 추출할 때 사용한다.

 

cf. 보다 자세한 필드들은 다음 링크를 참고한다.
https://docs.aws.amazon.com/ko_kr/AmazonCloudWatch/latest/logs/CWL_AnalyzeLogData-discoverable-fields.html

 

VPC Flow Logs 로그는 다음과 같은 형식으로 생성되고, 각 의미는 다음과 같다.

2 111111111111 eni-09234fd609f3aaб d2 10.0.20.236 172.16.0.89 49795 3389 6 3 152
1621151386 1621151388
ACCEPT OK

 

2 VPC Flow Logs 버전으로, 기본값은 2
111111111111 AWS 계정 ID
eni-09234fd609f3aa6d2 트래픽이 기록되는 Elastic Network Interface(ENI)의 ID
10.0.20.236 트래픽 소스 IP 주소
172.16.0.89 트래픽 대상 IP 주소
49795 트래픽 소스 포트 번호
3389 트래픽 대상 포트 번호
6 IANA로 할당된 프로토콜 번호로, 6은 TCP 프로토콜
3 전송된 패킷 수
152 전송된 바이트 수
1621151386 집계 간격 내에서 첫 패킷이 수신된 시간(유닉스 초)
1621151388 집계 간격 내에서 마지막 패킷이 수신된 시간(유닉스 초)
ACCEPT 트래픽과 연결된 작업• ACCEPT: 통신 수락• REJECT: 통신 거부
OK CloudWatch Logs에 전송된 로그 데이터 상태• OK: CloudWatch Logs에 정상적으로 기록됨• NODATA: 통신 트래픽 없음• SKIPDATA: 내부 오류 등으로 레코드 기록을 건너뜀

 

Logs Insights 쿼리 언어 핵심 명령어

수집된 로그에 쿼리를 실행하여 필요한 테이터를 추출할 수 있다. 쿼리 명령어는 파이프(|)로 구분되는 유닉스 스타일 구문을 사용한다.

명령어 설명
display 결과에 표시할 필드를 지정한다.
filter 조건에 일치하는 이벤트만 남긴다. 정규식(/.../)과 비교 연산을 지원한다.
fields 출력이나 후속 집계에 쓸 필드를 선택한다.
sort 지정한 필드 기준으로 정렬한다(asc/desc)이다.
stats count(), sum(bytes), avg(packets), max(), min(), pct() 등으로 집계한다.
limit 결과 행 수를 제한한다(기본 최대 1000)이다.
parse @message 등에서 패턴으로 임시 필드를 만든다. glob와 정규식을 지원한다.

 

자주 쓰는 보조 함수·패턴 예시

  • 시간 버킷팅: stats count(*) by bin(5m) 처럼 bin()으로 n분 단위 집계를 만든다.
  • 목록 비교: filter dstPort in [22,3389,5432,3306] 형태로 다중 포트를 거른다.
  • 정규식 매칭: filter srcAddr like /^10\./ 처럼 사설 대역을 대략 거른다.

 

예제 쿼리 해설

다음은 거부 요청이 많은 소스 IP TOP 20을 구하는 쿼리이다.

filter action="REJECT"
| stats count(*) as numRejections by srcAddr
| sort numRejections desc
| limit 20

 

  • filter에서 방화벽/NACL/보안그룹에 의해 거부된 흐름만 남긴다.
  • stats로 소스 IP별 거부 건수를 집계한다.
  • sort로 내림차순 정렬하고, limit으로 상위 20개만 본다.
  • 해당 결과는 스캐닝, 오탑재 보안그룹, 잘못된 라우팅 등 의심 지점을 빠르게 좁히는 데 유용하다.

 

운영 팁

  • 시간 범위를 좁혀 쿼리한다 → 스캔 비용과 응답 속도를 개선한다.
  • 먼저 filter로 데이터량을 줄인다 → 이후 stats·sort의 비용을 크게 절약한다.
  • logStatus를 항상 확인한다 → SKIPDATA가 보이면 전송 경로와 할당량을 점검한다.
  • 프로토콜 번호 매핑을 숙지한다 → 6=TCP, 17=UDP, 1=ICMP처럼 즉시 해석한다.
  • 보안 이벤트 기준을 미리 정의한다 → REJECT 급증, 다중 포트 시도, 중요 포트 접근 등을 Saved Query로 표준화한다.
  • 저장소 선택을 구분한다 → 실시간 탐색은 CloudWatch Logs가 편하고, 장기 보관·배치 분석은 S3가 유리하다.
  • 비밀정보는 기록되지 않는다 → Flow Logs는 페이로드를 저장하지 않는 메타데이터이므로, DPI가 필요하면 별도 도구를 쓴다.

 

 

 CloudWatch Log Insights 이용 요금

  • 과금 기준: 쿼리 실행 시 스캔한 데이터 양(GB 단위)에 따라 요금이 부과됨
  • 무료 사용량: 월 5GB까지 무료 (쿼리 실행으로 스캔한 데이터 기준)
  • 요금 부과 시작: 월간 스캔량이 5GB를 초과할 때부터
cf. 정확한 요금 정보는 다음을 참고한다.
https://aws.amazon.com/ko/cloudwatch/pricing/

 

 

'Cloud' 카테고리의 다른 글
  • [AWS] Amazon Athena
  • [AWS] Amazon Kinesis
  • [AWS] AWS 로그 운영
  • [AWS] 표본 아키텍처를 운영할 때 주의점 - MFA 설정
SummerToday
SummerToday
summertoday 님의 블로그 입니다.
  • SummerToday
    SummerToday
    SummerToday
  • 전체
    오늘
    어제
  • 인기 글

  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
    • 글쓰기
    • 관리자
    • 분류 전체보기 (62)
      • OS & Network (4)
      • Cloud (11)
      • Container & DevOps (41)
      • Database (4)
      • Develop (0)
      • IaC (2)
  • 태그

    tailscale
    s2s vpn
    Grafana
    container
    gitops
    Galera Cluster
    aws
    CI/CD
    argocd
    Kubernetes
    점프 계정
    MariaDB
    계정 관리
    K8S
    cloud
    openebs
    EIP
    Eni
    CloudWatch
    AmazonSNS
  • hELLO· Designed By정상우.v4.10.3
SummerToday
[AWS] Amazon CloudWatch
상단으로

티스토리툴바