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를 통해 수집되어 확인이 가능하다.