CloudWatch 란 ?
Amazon CloudWatch는 AWS에서 제공하는 모니터링 및 로깅 서비스입니다. 클라우드 환경에서 리소스의 상태와 성능에 대한 실시간 데이터를 수집, 모니터링하고, 관련 이벤트에 대한 알림을 받을 수 있습니다. CloudWatch를 사용하면 애플리케이션, 서버, 인프라의 모니터링을 한 곳에서 통합적으로 관리할 수 있습니다.
CloudWatch는 다양한 AWS 리소스에 대한 모니터링을 지원합니다. 예를 들어, EC2 인스턴스, RDS 데이터베이스, Lambda 함수 등의 리소스를 모니터링할 수 있으며, CPU 사용률, 네트워크 트래픽, 디스크 사용량 등과 같은 지표를 수집할 수 있습니다.
AWS EC2에서 docker를 사용하여 스프링 서버를 배포하고 있는데, docker의 logging driver를 CloudWatch 와 연동하여 로깅 모니터링 환경을 만들려고 합니다.
프리티어를 사용하는 경우 위와 같이 일부 모니터링 서비스를 무료로 사용해볼 수 있습니다.
서비스별 요금에서 Cloudwatch 사용량을 확인해볼 수 있습니다.
AWS IAM 정책 / 역할 생성
CloudWatch를 docker-compose와 연동하기 위해선 아래 docker docs에 기재된 AWS IAM 정책과 역할 생성이 필요합니다.
https://docs.docker.com/config/containers/logging/awslogs/
AWS IAM에서 정책 생성 > JSON 선택 후 docker docs에 기재된 내용을 저장합니다.
정책명을 지정하고, 정책을 생성합니다.
생성한 정책을 연결해줄 역할을 만들어줍니다. 사용 중인 EC2에 역할 적용을 하니 AWS 서비스 > EC2를 선택해줍니다.
EC2 IAM 등록
역할을 만들었으니, 사용중인 EC2 인스턴스에 IAM 역할 정보를 등록 후 업데이트 해줍니다.
CloudWatch 로그 그룹 생성
CloudWatch에 로그를 저장할 로그 그룹을 만들어줍니다. CloudWatch에선 생성한 로그그룹으로 여러 서버에서 한 곳에 모아 저장할 수 있습니다.
docker-compose.yml 작성
# https://docs.docker.com/compose/compose-file/compose-versioning/
version: "3.8"
services:
web:
extra_hosts:
- "host.docker.internal:host-gateway"
container_name: continaer-name
image: image-name
ports:
- '8080:8080'
logging:
driver: awslogs
options:
awslogs-region: "ap-northeast-2"
awslogs-group: "dodal-docker-group"
awslogs-multiline-pattern: "^(INFO|ERROR)"
awslogs-stream: "dodal-docker-backend"
redis:
image: redis:latest
container_name: dodal-redis
ports:
- 6379:6379
volumes:
- ./redis/data:/data
- ./redis/conf/redis.conf:/usr/local/conf/redis.conf
labels:
- "name=redis"
- "mode=standalone"
restart: always
command: redis-server /usr/local/conf/redis.conf
extra_hosts:
- "host.docker.internal:host-gateway"
docker-compose.yml 파일 내 애플리케이션 부분에 logging driver를 설정해줍니다. awslogs-group 에는 CloudWatch에서 생성한 그룹명을 넣어줍니다.
CloudWatch 로그 결과 확인하기
docker-compose를 빌드하면, 스프링 애플리케이션이 실행되면서 logging-driver로 인해 CloudWatch에 로그 스트림이 생성됩니다.
CloudWatch에 로그가 실시간으로 잘 저장되고 있음을 확인할 수 있습니다.