로그확인할때 ec2에 직접들어가서 로그파일을 열고 확인하는 작업이 너무 번거롭다
로그 수집용으로 쓸게 뭐가 있나 찾아봤는데 사람들이 많이 쓰는 게 보통 ELK(ElasticSearch LogStash Kibana)와 CloudWatch인거 같았다. ELK보다는 적용하기 훨씬 쉽고 레퍼런스도 많은 CloudWatch를 적용하기로 했다.
적용하는 방법 자체는 매우 쉬웠다.
1. 먼저 CloudWatchFullAccess를 받은 IAM계정을 만든다.
2. LogBack을 설정해준다. -> logback-awslogs-appender이라는 라이브러리를 사용하면 쉽게 설정할 수 있다.
implementation "ca.pjer:logback-awslogs-appender:1.6.0"
먼저 의존성을 추가해준다.
<?xml version="1.0" encoding="UTF-8"?>
<configuration packagingData="true">
<springProperty name="AWS_ACCESS_KEY" source="cloud.aws.credentials.access-key"/>
<springProperty name="AWS_SECRET_KEY" source="cloud.aws.credentials.secret-key"/>
<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>dongnebook-</logGroupName>
<logStreamUuidPrefix>dongnebook-</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>
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>INFO</level>
</filter>
</appender>
<appender name="application_log" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern>
</encoder>
</appender>
<root level="INFO">
<springProfile name="local">
<appender-ref ref="application_log"/>
<!-- <appender-ref ref="aws_cloud_watch_log"/>-->
</springProfile>
</root>
<root level="WARN">
<springProfile name="rds">
<appender-ref ref="application_log"/>
<appender-ref ref="aws_cloud_watch_log"/>
</springProfile>
</root>
</configuration>
logGroupName
: Cloud Watch에서 묶이는 그룹이름
logStreamUuidPrefix
: 로그스트림에서 접두사로 무엇이 들어갈지 써줌
logregion
: AWS 지역명
maxBatchLogEvents
: 배치의 최대 이벤트 개수를 설정하는 것이며 1 ~ 10000사이 값만 설정이 가능하다. 이벤트 대기열에 개수가 50개가 되면 AWS Cloud Watch로 로그가 전송됩니다.
maxFlushTimeMillis
: 마지막 플러시가 발생한 이후 지정된 시간이 지나면 AWS Cloud Watch로 로그가 전송된다. 0일 경우 로그를 동기로 전송하고 0보다 큰값일 경우 비동기로 로그가 전송됩니다.
maxBlockTimeMillis
: 로그가 전송되는 동안 코드가 계속 실행되는 것을 차단하고 값을 0으로 세팅하면 전송중에 발생되는 모든 로그를 버립니다.
retentionTimeDays
: 로그 그룹의 보존기간
일단 그렇다고하는데 잘 이해가 가질 않는다. 입맛에 맞게 쓰면 될거같다.
나는 로컬에서는 로깅레벨을 INFO로 설정하고 ec2에 올라간 것은 WARN레벨 이상만 보고싶어서 로깅레벨을 WARN으로 설정했다.
accessKeyId
, secretAccessKey
에 iam계정의 액세스키와 시크릿키를 잘 넣어주면 끝이다.
ec2에 연동설정이 끝난 버전을 올리고 Cloud Watch를 확인해보니 로그가 잘 오는 모습을 확인할 수 있었다.