[Log Monitoring] AWS Cloudwatch 설정하기 - InterMark

2023. 2. 12. 11:08프로젝트/학습

💻

로그백 설정하기

로그백 아키텍처는 세 가지 클래스로 구성되는데 Logger, Appender, Layout으로 구성됩니다.

  • Logger : 로그 메시지의 컨텍스트이다. 애플리케이션이 로그 메시지를 생성하기 위해 상호 작용하는 클래스입니다.
  • Appender : 최종 목적지에 로그 메시지를 배치합니다.→ Logger는 하나 이상의 Appender를 가질 수 있습니다.
  • Layout : 출력할 메시지를 준비합니다.

⇒ 로그백은 메시지 서식 지정을 위한 사용자 정의 클래스 생성과 기존 클래스에 대한 강력한 구성 옵션을 지원합니다.

public class Example {      private static final Logger logger        = LoggerFactory.getLogger(Example.class);      public static void main(String[] args) {         logger.info("Example log from {}", Example.class.getSimpleName());     } }

위처럼 Logger를 통해서 간단하고 로그 메시지를 생성할 수 있습니다.

<?xml version="1.0" encoding="UTF-8" ?> <configuration scan="true">     <conversionRule conversionWord="clr" converterClass="org.springframework.boot.logging.logback.ColorConverter" />      <springProperty name="AWS_ACCESS_KEY" source="cloud.aws.credentials.accessKey"/>     <springProperty name="AWS_SECRET_KEY" source="cloud.aws.credentials.secretKey"/>     <property name="LOG_PATTERN" value="%clr(%d{yyyyMMdd HH:mm:ss.SSS}){magenta} %clr([%thread]){blue} %clr(%-5level){} %clr([%logger{0}:%line]){cyan} : %msg %n"/>      <appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">         <encoder>             <pattern>${LOG_PATTERN}</pattern>         </encoder>     </appender>     <appender name="AWS_LOG" class="ca.pjer.logback.AwsLogsAppender">         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">             <level>INFO</level>         </filter>         <layout>             <pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern>         </layout>         <logGroupName>InterMark</logGroupName>         <logStreamUuidPrefix>InterMark-</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>      <root level="debug">         <appender-ref ref="STDOUT"/>         <appender-ref ref="AWS_LOG"/>     </root> </configuration>

위와 같이 logback-spring.xml을 설정할 수 있는데

패턴을 선언해서 로그가 어떻게 찍힐지 정하고 appender를 통해 어디에 출력할 지를 정의하여 설정된 로그 수준 이상의 로그들이 찍히도록 만듭니다.

<appender name="AWS_LOG" class="ca.pjer.logback.AwsLogsAppender">         <filter class="ch.qos.logback.classic.filter.ThresholdFilter">             <level>ERROR</level>         </filter>         <layout>             <pattern>[%thread] [%date] [%level] [%file:%line] - %msg%n</pattern>         </layout>         <logGroupName>InterMark</logGroupName>         <logStreamUuidPrefix>InterMark-</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>

해당 appender를 이용하여 클라우드 와치로 로그 데이터를 쌓을 수 있는데 filter를 설정해서 어떤 로그 수준 이상의 로그들만 보낼 수 있게 거를 수 있습니다.

layout을 통해 로그가 어떻게 찍힐지 정의합니다.

  • logGroupName : 어떤 로그 그룹으로 보낼지를 정함.
  • logStreamUuidPrefix : 로그 그룹에 생기는 이벤트의 prefix name으로 어떤 이름을 붙일지 정하고 그 뒤로 uuid가 생성됨.
  • logRegion : 클라우드 와치 AWS Region
  • maxBatchLogEvents : 배치의 최대 이벤트 갯수를 설정하는 것이며 1 ~ 10000 사이 값만 설정이 가능하다. 이벤트 대기열에 갯수가 50개가 되면 AWS Cloud Watch로 로그가 전송됨.
  • maxFlushTimeMillis : 마지막 플러시가 발생된 이후 지정된 시간이 지나면 AWS Cloud Watch로 로그가 전송됨. 0일 경우 로그를 동기로 전송하고 0보다 큰 값일 경우 비동기로 로그가 전송됨.
  • maxBlockTimeMillis : 로그가 전송되는 동안 코드가 계속 실행되는 것을 차단하고 값을 0으로 세팅하면 전송중에 발생된느 모든 로그를 버림.
  • retentionTimeDays: 로그그룹의 보존기간을 얘기함. 0으로 세팅 시 무기한.

 

클라우드 워치 세팅

  1. 클라우드 와치를 검색해서 해당 서비스로 들어감.
  1. 왼쪽 메뉴에 로그 하단의 로그 그룹으로 들어감.
  1. 오른쪽 상단에 로그그룹 생성 을 클릭함.
  1. 이름만 적고 로그 그룹 생성.
  1. 해당 로그 그룹을 찾아서 들어감.
    기본에는 로그 스트림에 아무것도 없을 것 → 로그 이벤트가 발생하지 않아서
  2. 애플리케이션을 실행했다가 terminate하고 다시 실행할 때마다 스트림이 새롭게 생김. prefix name에 uuid가 붙은 형태.
  1. 로그 이벤트를 발생 시키면 위와 같이 스트림이 생기고 그 세부 정보 확인 시 아래와 같이 이벤트들이 출력되는 것을 확인.

Uploaded by

N2T