Skip to content

로깅 & 모니터링 시스템 구축 과정

김민겸 edited this page Aug 8, 2024 · 5 revisions

📝 로깅 프레임워크 적용 과정

Log4j2 프레임워크를 도입

사용 이유

비즈니스 로직에서 문제가 발생했을 때 로깅을 남기기 위해 로깅을 남겨야합니다. 스프링에서 사용할 수 있는 대표적인 두 가지 프레임워크인 LogbackLog4fj 중 비동기 처리로 인해 속도가 빠른 Log4fj를 사용하기로 결정하였습니다.

결과물

Log4j2 설정 PR

로그를 남길 상황과 각 상황의 로그 레벨을 결정하여 반영하였습니다. 로그 레벨 별로 파일에 저장할 지, 파일과 콘솔 모두 저장할 지 결정하여 반영하였습니다.

Logback 프레임워크로 수정

사용 이유

로그에 대한 모니터링을 진행하는 도중 Log4j2와 CloudWatch를 연동하기 위한 자료가 부족하다는 것을 깨달았습니다. 그래서 Log4j2 프레임워크 대신 Logback 프레임워크로 이전하여 구현하였습니다.

어떤 설정을 하였나요?

콘솔 로그 출력을 위한 Appender

    <appender name="console" class="ch.qos.logback.core.ConsoleAppender">
        <layout class="ch.qos.logback.classic.PatternLayout">
            <pattern>${logPattern}</pattern>
        </layout>
    </appender>

파일 로그 출력을 위한 Appender

 <appender name="file" class="ch.qos.logback.core.rolling.RollingFileAppender">
        <file>${logPath}/${serviceName}-${NOW}.log</file>
        <rollingPolicy class="ch.qos.logback.core.rolling.TimeBasedRollingPolicy">
            <fileNamePattern>${logPath}/${serviceName}-%d{yyyy-MM-dd}-%i.log.gz</fileNamePattern>
            <timeBasedFileNamingAndTriggeringPolicy class="ch.qos.logback.core.rolling.SizeAndTimeBasedFNATP">
                <maxFileSize>5MB</maxFileSize>
            </timeBasedFileNamingAndTriggeringPolicy>
            <maxHistory>15</maxHistory>
        </rollingPolicy>
        <encoder>
            <pattern>${logPattern}</pattern>
        </encoder>
        <filter class="ch.qos.logback.classic.filter.ThresholdFilter">
            <level>info</level>
        </filter>
    </appender>

로그 레벨 설정

 <logger name="mouda.backend" level="info" additivity="false">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </logger>

우리의 서비스에서 발생하는 INFO 이상의 로그는 콘솔과 파일에 출력합니다.

    <logger name="org.springframework" level="warn"/>
    <logger name="org.hibernate" level="warn"/>

스프링에서 제공하는 로그 중 WARN 이상의 로그만 기록합니다.

   <root level="error">
        <appender-ref ref="console"/>
        <appender-ref ref="file"/>
    </root>

이 외의 로그는 ERROR 로그만 콘솔과 파일에 출력합니다.

언제 로그를 출력하나요?

  • 예상하지 못한 예외 발생 시 WARN 로그
  • 예상한 예외 발생 시 INFO 로그
  • API 요청 시 요청 URL과 Method, Body를 INFO 로그

🖥 모니터링 시스템 구축 과정

수집할 매트릭 정의

  • 메모리 사용량
  • CPU 사용률
  • 네트워크 I/O
  • 디스크 사용량

모니터링 시스템 구상 방안

방안 1) 프로메테우스와 그라파나를 사용한 모니터링 시스템 구축

  • 장점 : 무료 오픈소스입니다. 복잡한 구조인 경우에 적합합니다. 대시보드가 예쁩니다.
  • 단점 : 러닝 커브가 있습니다. 모니터링을 위해 EC2 자원을 사용해야 합니다.

방안 2) Cloud Watch를 사용한 모니터링 구축

  • 장점 : EC2를 이용하고 있기 때문에, 모니터링 시스템 세팅이 간편합니다.
  • 단점 : 별도의 요금이 발생합니다.

아래 두 가지 이유로 Cloud Watch를 택하였습니다.

  • 서버의 구조가 간단하기 때문에 간단하게 구축할 수 있는 시스템을 이용합니다.
  • 대시보드 기준 월별 요금이 USD 3.00 으로 저렴한 편이기 때문에 부담이 적습니다.

추후 시각화의 불편함이 생기거나, 가격이 문제가 된다면 프로메테우스 등의 다른 서비스를 이용할 것을 염두에 둡니다.

결과물

image