본문 바로가기

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

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

반응형

개요


 다양한 로그 수집을 알아보다가 최근에 많이 사용하는 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

 

반응형