← 통합 포탈 서비스

09 / 09

운영 모니터링

5계층 모니터링 설계, CloudWatch + Container Insights + Managed Grafana + ADOT/X-Ray, 서비스 품질 중심 알람

CloudWatchGrafanaX-RayADOTContainer Insights
개요 & 아키텍처전체 아키텍처 / DR 대비보안 관련 요소비용 관련 요소성능 관련 요소DNS & 도메인CI/CD & 배포데이터베이스운영 모니터링

설계 배경

통합 포탈 서비스는 ECS Fargate 기반 마이크로서비스, ALB, CloudFront, ElastiCache, DB EC2 등 다양한 리소스로 구성되어 있습니다. 각 리소스의 상태를 개별적으로 확인하는 것은 비효율적이므로, Terraform 모듈 기반의 통합 모니터링 체계를 설계하여 Prod/Staging 환경에 동일한 알람과 대시보드를 일괄 배포했습니다.

모니터링 구조

Terraform 모듈CloudWatch 알람SNS Topic이메일 알림

공통 모니터링 모듈을 만들어 환경별 변수만 주입하면 동일한 알람 세트가 생성되도록 설계했습니다. CloudFront 알람은 us-east-1 리전에 별도 생성되며, 나머지 알람은 ap-northeast-2에 배치됩니다.

모니터링 대상 리소스

ECS 서비스

auth-service, tax-service — Task 수, CPU, Memory

Service Connect

서비스 간 내부 통신 — 5XX, 응답 시간, 커넥션

ALB

외부 트래픽 — 5XX 에러, 응답 시간, Unhealthy Host

CloudFront

Edge 계층 — 에러율, 캐시 히트율, Origin Latency

ElastiCache (Valkey)

캐시 계층 — Engine CPU, Memory 사용률

DB EC2

데이터베이스 — CPU, Memory, Disk, Swap (CWAgent)

CloudWatch 알람 구성 — 환경당 26개

Prod/Staging 각각 서울 22개 + 버지니아 4개, 총 52개 알람을 운영합니다. 모든 알람은 Terraform 모듈에서 환경 변수만 바꿔 동일하게 생성됩니다.

계층알람 수주요 메트릭
ECS 서비스 헬스2개RunningTaskCount < 1 (서비스 다운 감지)
ECS CPU/Memory4개CPUUtilization, MemoryUtilization > 80%
Service Connect (auth)5개5XX, p99 응답 시간, 커넥션, 요청 수
Service Connect (tax)5개5XX, p99 응답 시간, 커넥션, 요청 수
ALB3개5XX 에러, p99 응답 시간, Unhealthy Host
ElastiCache Valkey2개EngineCPU > 70%, Memory > 80%
DB EC2 (기본)1개CPUUtilization > 80%
CloudFront (us-east-1)4개5XX/4XX 에러율, 캐시 히트율, Origin Latency

Service Connect 모니터링

ECS Service Connect를 통한 서비스 간 내부 통신을 모니터링합니다. ALB를 경유하지 않는 내부 트래픽이므로, Service Connect 전용 메트릭으로 별도 추적합니다.

5XX 에러

> 10건 / 5분

내부 서비스 오류 급증 감지

p99 응답 시간

> 3초 / 15분

서비스 간 통신 지연 감지

Active Connection

> 100 / 3분

커넥션 과다 점유 감지

New Connection Spike

> 200/분 / 3분

비정상 커넥션 급증 감지

CloudWatch Agent — DB EC2 심층 모니터링

DB EC2 인스턴스는 기본 CloudWatch 메트릭(CPU)만으로는 메모리, 디스크, Swap 상태를 파악할 수 없습니다. CloudWatch Agent를 설치하여 OS 수준 메트릭을 수집하고, 이를 기반으로 추가 알람을 구성했습니다.

구성 방식

01

Terraform으로 IAM Role, Instance Profile, SSM Parameter 사전 생성

02

EC2에 Instance Profile 연결 후 CloudWatch Agent 설치

03

SSM Parameter Store에서 Agent 설정을 가져와 적용 — 설정 중앙 관리

04

systemd 서비스로 등록되어 재부팅 후에도 자동 시작

메트릭알람 임계값평가 기간
mem_used_percent> 85%15분 (5분×3)
disk_used_percent (/)> 85%10분 (5분×2)
disk_used_percent (/data)> 85%10분 (5분×2)
swap_used_percent> 50%15분 (5분×3)

CloudWatch 대시보드

Prod/Staging 각각 전용 대시보드를 구성하여 전체 리소스 상태를 한눈에 파악할 수 있도록 했습니다. 6개 Row로 구성되며, 각 Row는 관련 리소스의 핵심 메트릭을 시각화합니다.

Row 1

ECS RunningTaskCount, CPU/Memory 사용률

Row 2

Service Connect auth — 요청/응답, 응답 시간, 커넥션

Row 3

Service Connect tax — 요청/응답, 응답 시간, 커넥션

Row 4

ALB — 요청/에러, 응답 시간, Healthy/Unhealthy Host

Row 5

ElastiCache Valkey CPU/Memory, DB EC2 CPU/Network

Row 6

CloudFront — 요청/에러율, 캐시 히트율, Origin Latency

SNS 알림 채널

CloudFront 알람은 us-east-1에서만 메트릭이 생성되므로, 리전별로 SNS Topic을 분리하여 구성했습니다. 이메일 구독은 Terraform 변수로 자동 생성됩니다.

Seoul (ap-northeast-2)

ECS 서비스 헬스/리소스 알람

Service Connect 알람

ALB 알람

ElastiCache 알람

DB EC2 알람

Virginia (us-east-1)

CloudFront 5XX/4XX 에러율 알람

CloudFront 캐시 히트율 알람

CloudFront Origin Latency 알람

Terraform 기반 IaC 구성

모니터링 전체를 Terraform으로 코드화하여, 환경 추가 시 변수만 변경하면 동일한 모니터링 세트가 자동 생성됩니다. Prod와 Staging은 각각 독립된 state를 가지며, 계정 공통 리소스(Config, CloudTrail)와 분리됩니다.

# Terraform 디렉토리 구조

modules/monitoring/

├── main.tf # 알람 (ECS, SC, ALB, ElastiCache, DB)

├── dashboard.tf # CloudWatch 대시보드

├── cwagent-iam.tf # CWAgent IAM Role/Profile

├── cwagent-ssm.tf # CWAgent 설정 SSM Parameter

└── variables.tf # 환경별 변수

environments/connect-portal/

├── prod/ # 운영 환경

└── staging/ # 스테이징 환경

Summary

52개

CloudWatch 알람 (Prod 26 + Staging 26)

6계층

모니터링 범위 (ECS / SC / ALB / CF / Cache / DB)

2개

CloudWatch 대시보드 (Prod + Staging)

IaC

Terraform 모듈 기반 — 환경 추가 시 변수만 변경

데이터베이스