
ECS 작업 설정에서 CloudWatch를 적용하고 서비스를 실행하면 EC2의 경우 서버에 자동으로 로그가 로드된다. (logback-spring.xml에 설정) 단, Fargate의 경우 로그를 확인할 수 있는 서버가 없기 때문에 AWS CloudWatch 서비스를 이용해야 한다. 오늘은 Fargate를 이용하여 서버의 로그를 보는 방법에 대해 알아보도록 하겠습니다.
1. ECS만으로는 보기 불편한 로그 시스템
먼저 로그 시스템을 볼 수 있는 방법 중 하나인 ECS 자체 내에서 로그를 보는 방법에 대해 설명하겠습니다.

클러스터 목록에 클러스터 중 하나를 입력하고 로그를 확인하는 것으로 시작하겠습니다. 현재 클러스터에서 실행 중인 서비스를 클릭합니다. 그러면 서비스의 상세 화면이 나타납니다. ‘상태 및 표시기’ 화면에서 CPU 사용률과 메모리 사용률을 확인할 수 있습니다.

여기에서 ‘로그’ 탭을 클릭합니다.

그러면 로그가 한 줄씩 연속적으로 출력되는 것을 볼 수 있습니다. 또는 여기에서 ‘Configuration and Tasks’ 탭을 클릭하고 Auto Scaling에서 해당 작업에 대한 컨테이너를 확인하는 부분에서 로그를 확인할 수 있습니다.

여기에서 작업을 클릭한 다음 ‘로그’ 탭을 클릭하면 동일한 결과를 볼 수 있습니다.

하지만 이러한 로그 확인 방법은 불편하며 이를 개선하기 위해 CloudWatch를 사용합니다. 작업을 생성할 때 로그 정책으로 수행할 작업을 설정할 수 있습니다. (없을 경우 ‘Revision Update’를 통해 아래와 같이 추가할 수 있습니다.)

이 로그 구성에서는 기본 로그 시스템을 그대로 사용하려고 합니다.

2. CloudWatch 입력
먼저 아래 링크로 이동하여 Cloud Watch에 들어갑니다.
https://ap-northeast-2.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-2#home:
https://ap-northeast-2.console.aws.amazon.com/cloudwatch/home?region=ap-northeast-2#home:
ap-northeast-2.console.aws.amazon.com
그런 다음 사이드바에서 ‘로그 > 로그 그룹’으로 이동합니다. 그리고 작업 이름으로 검색하십시오.

이제 입력할 작업을 클릭합니다.
- task : 해당 task에서 발생한 신청 단계의 로그를 확인합니다. 로그 스트림은 로그를 실시간으로 확인할 수 있는 시스템을 제공합니다.
- 클러스터: 로그 스트림이 없습니다.

이제 여기에서 로그 스트림의 상단을 선택합니다. 로그를 만들어본적도 없는데 왜 이렇게 로그스트림이 많죠..? 여기에서 작업이 시작되고 종료된 모든 레코드를 로드합니다. 실행했다가 종료하면 왜 시작했다가 어떤 이유로 종료되는지 알 수 있고, 정상적으로 동작하고 있는 서비스가 실시간으로 로드되는 것도 확인할 수 있습니다.
ㅏ. 정상적으로 작동하는 서비스 로그

문제는 별로 문제가 없어 보이는 WARN 수준의 경고 로그만 누적되는 CloudWatch 화면입니다. 재개를 누르면 실시간 로그 스트림이 표시됩니다.

URI 요청에서 INFO 수준으로 누적된 로그도 있습니다. SQL 쿼리는 INFO 수준에서 볼 수 있도록 설정된 경우에도 볼 수 있습니다.
2. 로그가 비정상적으로 종료됨
이제 비정상적으로 강제 종료된 로그를 살펴보자.


로그를 봐 spring.database.url 호출된 환경 변수의 값이 매핑되지 않고 프로그램이 종료되는 것을 알 수 있습니다. 애플리케이션이 정상적으로 실행되는지 확인하기 위해 이렇게 로그를 봅니다. CloudWatch사용하기 쉽다는 것을 알았습니다.
다음에는 S3로 로그 내보내기를 한 번 더 해보고 S3에서도 로그를 확인할 수 있는 방법을 찾아봐야겠다.
