배포가 끝난 뒤, 곰곰히 생각해보다가 한 가지 문제점을 발견했다.
바로 log!
실행 중일때에는 docker logs <name>
으로 확인할 수 있다지만
매번 사람이 직접 로그를 확인 할 수는 없다.
현재 우리는 EC2 -> nginx -> docker(blue/green)
환경에서 서비스를 배포하고 있다.
배포한 것은 좋지만
우리는 아직 완벽한 서비스를 만든것이 아니다.
물론, 모든 서비스가 완벽해 컨테이너가 죽지(?) 않는다면 좋겠지만
컨테이너는 언제 어디서 어떻게 개복치처럼 죽을 지 알 수 없다.
도커는 실행 종료시 해당 컨테이너가 가지고 있던 볼륨을 없앤다.
단, 마운트 된 볼륨은 컨테이너가 종료되더라도 지워지지 않는다.
그 점을 이용해 로그를 쌓아보려고 한다.
필요 과정은 이렇다.
스프링부트 프로젝트 내 resources > logback-spring.xml 파일을 생성한다.
우리는 개발 서버와는 다르게 실제 배포 환경에서는 중요한 부분만 남기고자
log 레벨을 WARN으로 진행하기로 했다.
또한, log file의 History는 10일로 잡아두었다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<include resource="org/springframework/boot/logging/logback/base.xml"/>
<appender name="ROLLING_FILE" class="ch.qos.logback.core.rolling.RollingFileAppender">
<file>logs/quizpop.log</file>
<rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
<fileNamePattern>logs/quizpop.%d{yyyy-MM-dd}.log</fileNamePattern>
<maxHistory>10</maxHistory>
</rollingPolicy>
<encoder>
<pattern>%d{yyyy-MM-dd HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<root level="WARN">
<appender-ref ref="CONSOLE" />
<appender-ref ref="ROLLING_FILE" />
</root>
<root level="WARN">
<appender-ref ref="CONSOLE" />
</root>
</configuration>
스프링부트를 실행하면 logs 폴더 밑에 로그 파일들이 생기게 된다.
이제 log 파일이 도커 종료시에도 유지될 수 있도록
호스트와 볼륨을 매핑해준다.
기존에 작성되었던 docker-compose(blue / green) 파일에
내가 log파일을 보관하고자 하는 ec2 인스턴스 내 경로를 작성해준다.
volumes:
- /home/ubuntu/app/logs:/logs
이제 docker compose down을 하더라도 해당 로그파일은 지워지지 않고,
보관되게 된다.