AWS)Cloud Watch

박우영·2023년 6월 17일
0

Cloud

목록 보기
9/10

도입 하게 된이유

log 를 확인하는것은 docker logs -f 로 충분히 확인할 수있지만 시간대 별로, 엄청나게 많은 양의 로그를 확인하기엔 너무 불편함이 있었습니다. 특히 kafka 나 eureka 등 연결이 되지않을때 지속적으로 남기는 무분별한 로그를 추적하기는 효율성보단 인내와 끈기가 필요한 작업이었습니다. 하지만 로그를 시간대별로, 토글형식으로 묶어서 확인 할 수있다면 이러한 작업의 효율성을 증가시킬 수 있다고 생각해서 도입하게 되었습니다.

Cloud Watch 적용


먼저 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>

xml 태그 설명

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 를 나누어 로그를 확인 할 수있고 지속적인 로그가 발생했을때 좀 더 간편하게 확인이 가능하다.

0개의 댓글