문제 해결, 기술 비교/개인프로젝트(북클럽)

sentry.io로 에러 로그 관리하기

코동이 2022. 6. 1. 08:37

개요


 다양한 로그 수집을 알아보다가 최근에 많이 사용하는 sentry을 알게되었습니다. sentry가 무엇이고 어떻게 사용하는지 코드로 함께 알아보겠습니다.

 

 

 

Sentry란?


 Sentry란 Application 에러 트래킹, 성능 모니터링을 제공해주는 서비스입니다. 에러가 발생하면 알림을 받을 수 있고 에러에 대한 상세 정보를 트래킹 해줍니다. 특히 에러 상황을 자세히 알려주기 때문에 디버깅에 유용합니다. 또한 성능 모니터링을 이용해 각 지표들을 쉽게 확인할 수 있습니다.

 

 

  • 다양한 플랫폼 지원

모바일, 데스크탑, 서버 등 다양한 플랫폼 지원

 

 아무래도 하나의 기업은 몇 가지 기술이 아닌 수십 가지 기술을 사용할 확률이 높습니다. sentry는 방대한 플랫폼을 지원하기 때문에 어떠한 기술을 사용하여도 모두 호환이 가능합니다.

 

 

  • 상세한 디버깅 기능 제공

전통적인 로깅 방식은 이슈 디버깅을 할 때 많은 정보를 제공하지 않습니다. 하지만 sentry는 해당 순간의 문맥(context)들을 최대한 많이 저장하여 충돌 분석에 효과적인 정보를 제공합니다.

 

 

 

Sentry 환경 구축하기


  • started를 통한 플랫폼 정하기

 

자바 관련 로그 라이브러리만 하더라도 JAVA, LOG4J2.X, LOGBACK 등등 다양한 환경을 설정할 수 있습니다. 저는 프로젝트가 LOG4J 2.X이므로 해당 플랫폼을 선택합니다. Create Project를 합니다.

 

친절하게도 sentry 공식 홈페이지에서 Spring Boot에서 어떻게 사용해야 하는지 안내해줍니다.

 

 

  • build.gradle에서 아래 의존성 추가

내가 사용하는 라이브러리에 따라서 sentry에서 추가할 의존성을 알려줍니다.

//log4j2
implementation 'io.sentry:sentry-log4j2:5.7.4'

//logback
implementation 'io.sentry:sentry-logback:5.7.4'

 

 

 

  • logback.xml 파일 정의

기존에 logback을 Console에서 보여주도록 설정하였습니다.

같은 위치에 Sentry를 등록하고 로그 레벨 설정에 참조를 추가하면 됩니다.

<configuration>
    <!-- Configure the Console appender -->
    <appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
        <encoder>
            <pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
        </encoder>
    </appender>

    <!-- Configure the Sentry appender, overriding the logging threshold to the WARN level -->
    <appender name="Sentry" class="io.sentry.logback.SentryAppender">
        <options>
            <dsn>#{dsn 정보}</dsn>
        </options>
    </appender>

    <!-- Enable the Console and Sentry appenders, Console is provided as an example
 of a non-Sentry logger that is set to a different logging threshold -->
    <root level="INFO">
        <appender-ref ref="Console" />
        <appender-ref ref="Sentry" />
    </root>
</configuration>

 

 

  • Spring에 코드 추가

사용하는 방법은 다음과 같습니다.

try ~ catch에서 catch 부분에 Sentry.captureException(e)로 sentry 전용 예외를 던질 수 있습니다.

import java.lang.Exception;
import io.sentry.Sentry;

try {
  throw new Exception("This is a test.");
} catch (Exception e) {
  Sentry.captureException(e);
}

 

 

  • 알람받은 로그 내역

매주 에러 사항을 메일로 알람 받도록 설정하였으며 개인 프로젝트에서 적용하여 나온 결과는 아래와 같습니다.

 

 

요일에 따라 에러가 발생한 횟수를 보여주며, 어떤 에러가 있었는지 보여줍니다.

각 에러를 클릭하면 세세하게 로그 내역을 확인할 수 있습니다.

 

 

 

결론


  • sentry를 통하여 다양한 플랫폼에서 로그 알람을 받을 수 있습니다.
  • 에러가 발생한 문맥과 흐름을 알 수 있어서 디버깅이 편리합니다.
  • 각종 모니터링 정보 기능을 제공하므로 빠르고 편하게 확인 할 수 있습니다.

 

 

참고

https://sentry.io/vs/logging/

https://node-js.tistory.com/33

안정성 높은 서비스 개발하기 — Sentry

 

반응형