-
Notifications
You must be signed in to change notification settings - Fork 6
로깅 & 모니터링 시스템 구축 과정
김민겸 edited this page Aug 8, 2024
·
5 revisions
비즈니스 로직에서 문제가 발생했을 때 로깅을 남기기 위해 로깅을 남겨야합니다. 스프링에서 사용할 수 있는 대표적인 두 가지 프레임워크인 Logback와 Log4fj 중 비동기 처리로 인해 속도가 빠른 Log4fj를 사용하기로 결정하였습니다.
로그를 남길 상황과 각 상황의 로그 레벨을 결정하여 반영하였습니다. 로그 레벨 별로 파일에 저장할 지, 파일과 콘솔 모두 저장할 지 결정하여 반영하였습니다.
로그에 대한 모니터링을 진행하는 도중 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 으로 저렴한 편이기 때문에 부담이 적습니다.
추후 시각화의 불편함이 생기거나, 가격이 문제가 된다면 프로메테우스 등의 다른 서비스를 이용할 것을 염두에 둡니다.
결과물