log 를 확인하는것은 docker logs -f 로 충분히 확인할 수있지만 시간대 별로, 엄청나게 많은 양의 로그를 확인하기엔 너무 불편함이 있었습니다. 특히 kafka 나 eureka 등 연결이 되지않을때 지속적으로 남기는 무분별한 로그를 추적하기는 효율성보단 인내와 끈기가 필요한 작업이었습니다. 하지만 로그를 시간대별로, 토글형식으로 묶어서 확인 할 수있다면 이러한 작업의 효율성을 증가시킬 수 있다고 생각해서 도입하게 되었습니다.
먼저 logback.xml 파일을 만들어줍니다. 저는 커스텀 하기위해 logback-spirng.xml 로 만들었습니다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration packagingData="true">
<timestamp key="timestamp" datePattern="yyyy-MM-dd-HH-mm-ssSSS"/>
<appender name="aws_cloud_watch_log" class="ca.pjer.logback.AwsLogsAppender">
<layout>
<pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern>
</layout>
<logGroupName>solved</logGroupName>
<logStreamUuidPrefix>solved-log</logStreamUuidPrefix>
<logRegion>ap-northeast-2</logRegion>
<maxBatchLogEvents>50</maxBatchLogEvents>
<maxFlushTimeMillis>30000</maxFlushTimeMillis>
<maxBlockTimeMillis>5000</maxBlockTimeMillis>
<retentionTimeDays>0</retentionTimeDays>
<accessKeyId>${AWS_ACCESS_KEY}</accessKeyId>
<secretAccessKey>${AWS_SECRET_KEY}</secretAccessKey>
</appender>
<property name="CONSOLE_LOG_PATTERN" value="%highlight(%-5level) %date [%thread] %cyan([%C{0} :: %M :: %L]) - %msg%n"/>
<appender name="console_log" class="ch.qos.logback.core.ConsoleAppender">
<encoder class="ch.qos.logback.classic.encoder.PatternLayoutEncoder">
<pattern>${CONSOLE_LOG_PATTERN}</pattern>
</encoder>
</appender>
<springProfile name="dev">
<root level="INFO">
<appender-ref ref="console_log"/>
</root>
</springProfile>
<springProfile name="prod">
<root level="INFO">
<appender-ref ref="aws_cloud_watch_log"/>
</root>
</springProfile>
</configuration>
logGroupName : cloud watch 그룹을 명시합니다.
logStreamUuidPrefix: 저는 group-log 로 prefix를 설정해주었습니다. 이는 로그스트림이 생성될때 참고합니다.
logRegion: aws 리전을 명시합니다.
maxBatchLogEvents: 한번에 전송할 수 있는 최대 로그 이벤트의 수를 지정합니다.
maxFlushTimeMillis: 로그 이벤트 배치가 전송되기 전에 대기할 수 있는 최대 시간을 밀리초 단위로 지정합니다. 예를 들어, 이 값이 30000(30초)으로 설정되어 있으면, 로그 이벤트가 쌓여있더라도 30초가 지나면 해당 로그 이벤트들이 전송됩니다.
retentionTimeDays: 로그가 저장될 시간을 명시합니다.
maxBlockTimeMillis: 배치 작업을 하기 전에 내부 버퍼가 가득 찼을 때 기다리는 시간을 정의합니다.
implementation'ca.pjer:logback-awslogs-appender:1.6.0'
처음엔 Github action 을 통해 환경변수 넣어주려 했으나 실패했습니다.
그래서 docker run 할때 환경변수를 직접 넣어주었습니다.
다음은 로컬에서 테스트할때 실행화면입니다. prod 설정으로 변경하고 테스트 해봤습니다.
다음과같이 aws client 를 생성하고 아래 사진처럼 cloud watch 로그 그룹에서 확인 할 수있습니다.
팀 프로젝트를 진행하면 pem키, 패스워드를 공유하며 진행할 수 있지만 그렇지 못하는 상황일때는 log 확인이 필요할 경우 다음과같이 설정을 하여 로그를 확인 할 수있다.
또한 이번 MSA 프로젝트의 경우 각 그룹별로 MS 를 나누어 로그를 확인 할 수있고 지속적인 로그가 발생했을때 좀 더 간편하게 확인이 가능하다.