피드로 돌아가기
Dev.toInfrastructure
원문 읽기
추가 비용 $0로 구현한 EC2 systemd 로그의 CloudWatch 통합 아키텍처
How I Ship systemd Logs to CloudWatch for $0 (Django + Celery on EC2)
AI 요약
Context
SSH 접속 기반의 journalctl 로그 분석으로 인한 디버깅 지연 및 로그 유실 위험 존재. 외부 Logging SaaS 도입 시 발생하는 월 $40 수준의 고정 비용 부담 및 운영 오버헤드 해결 필요.
Technical Solution
- CloudWatch Agent의 File Offset 기반 5초 주기 Batch 전송 방식을 통한 애플리케이션 Zero-dependency 구조 설계
- Agent 버전의 journald Collector 미지원 제약을 해결하기 위해 systemd 파이프 서비스 기반의 중간 로그 파일 생성 전략 채택
- IAM Role 및 Instance Metadata Service(IMDS)를 통한 Access Key 없는 보안 인증 체계 구축
- 운영 서비스 무중단 배포를 위해 '파이프 서비스 검증 후 systemd StandardOutput 직접 설정'으로 이어지는 2단계 마이그레이션 수행
- 로그 레벨 최적화(Django: INFO, Celery: ERROR)를 통해 Free Tier 범위 내 데이터 수집량 제어
Impact
- CPU 점유율 0.1% 및 메모리 35-60MB 고정 사용으로 시스템 리소스 영향 최소화
- 월 80-100MB 수준의 로그 발생량으로 CloudWatch Free Tier(5GB) 내 비용 $0 달성
- 로그 분석 쿼리 실행 시간 2초 내외로 단축 및 실시간 메트릭 필터링 기반 알람 체계 확보
Key Takeaway
인프라 제약 사항이 존재할 때 직접적인 수정보다 중간 추상화 계층(Piping Service)을 도입하여 검증 후 최적화하는 단계적 접근법의 유효성 확인.
실천 포인트
- CloudWatch Agent 도입 전 사용 버전의 Collector 지원 범위 확인 - IAM Role을 통한 Temporary Credentials 사용으로 보안 리스크 제거 - production 환경의 로그 레벨을 DEBUG에서 INFO/ERROR로 조정하여 비용 폭증 방지 - 서비스 재시작 없는 검증을 위해 임시 로그 파이프라인 구축 후 점진적 전환 검토