Base/Monitering

SpringBoot에 Sentry 적용 팁

findmypiece 2021. 10. 16. 01:56
728x90

Sentry 는 에러수집과 모니터링을 지원하는 툴이다. 온프레미스와 클라우드 버전이 존재하는데 사내 기 구축된 것을 사용했기 때문에 구축 부분은 생략하고 SpringBoot 연동하는 과정의 팁만 간단하게 정리해둔다.

 

Gradle 기준 아래와 같은 의존성이 필요하다. 이렇게 되면 Exception 발생시 Sentry에 수집되어 확인할 수 있다. 물론  Exception 을 catch 로 잡았다면 당연히 수집되지 않는다.

dependencies {
  compile 'io.sentry:sentry-spring-boot-starter:1.7.30'
}

그리고 application.yml 파일에도 아래와 같은 구성이 필요하다.

sentry:
  dsn: {client-key}
#  enable-tracing: false
#  stacktrace:
#    app-packages:
#      - com.example.sentrytest

위에서는 주석처리 해놨지만 enable-tracing 를 지정해서 에러 수집을 제한할 수도 있다. 일반적으로 로컬환경에서는 에러수집이 필요없다. 그리고 app-packages 를 통해 에러를 수집할 패키지를 지정할 수도 있다.

 

그런데 대부분 예외를 그대로 던지기 보다 예측할 수 있는 예외는 catch 로 잡아서 log.error 로 에러를 남기는 방식을 많이 사용한다. 이에 log.error 에서 출력하는 에러도 수집할 수 있는 방법이 필요하다. 이때는 Sentry와 logging 툴을 연동하면 된다.

 

logging 툴로 Log4j2 를 사용한다면 아래와 같은 의존성이 추가로 필요하다.

dependencies {
  compile 'io.sentry:sentry-log4j2:1.7.30'
}

 

그리고 Log4j2 설정파일에 아래와 같은 구성이 필요하다. 설정파일은 log4j2.yml 파일을 사용한다는 가정이고 sentry의 logging level은 꼭 WARN 이 아니더라도 각자 적당하다고 생각하는 level을 지정하면 된다.

Configuration:
  Appenders:
    Sentry:
    - name: sentry

  Loggers:
    Root:
      level: INFO
      AppenderRef:
      - ref: sentry
        level: WARN

 

이제 소스상에서 예상치 못한 Exception 이 발생되거나 예상했던 예외를 catch 로 잡아서 log.error 로 남기는 경우 모두 Sentry를 통해 수집되어 확인이 가능하다.

728x90