티스토리 뷰
Overview
SpringBoot 프로젝트에 Sentry과 logback을 적용하고, Slack으로 에러를 알림으로 받아보려고 합니다.
Sentry에는 4가지의 과금정책이 있는데, Developer
, Team
, Business
, Enterprise
에서 Team Plan
이상을 써야 Slack으로 알림을 받을 수 있나봅니다.. 무료로 사용할 수 있는 Developer Plan
는 메일로 알림을 받을 수 있습니다.
Sentry 웹 콘솔에서 프로젝트를 만들면 DSN(Client Key)가 발급이 됩니다. Alert Rule, Platform 등 해당 Sentry 프로젝트의 설정을 세팅한 후, 발급 된 DSN을 우리가 적용할 어플리케이션에 Client Key로 호출해주면 됩니다.
Sentry 프로젝트 생성하기
Sentry.io에 들어가서 Sentry의 웹콘솔로 프로젝트를 생성해봅니다.
Projects > Create Project
여러가지 Platform들이 나옵니다. SpringBoot로 적용을 할 것이기 때문에 Java로 선택을 합니다. default alert setting은 추후에 변경을 할것이기때문에 그대로 진행합니다. 프로젝트 이름을 설정해주고 Create Project를 누르면 프로젝트가 생성이 완료됩니다.
SpringBoot Sentry 의존성 추가하기
build tool 별로 sentry-spring-boot-starter 와 sentry-logbcak 의존성을 추가합니다.
gradle
implementation(
"io.sentry:sentry-spring-boot-starter:1.7.30",
"io.sentry:sentry-logback:1.7.30"
)
maven
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring-boot-starter</artifactId>
<version>1.7.30</version>
</dependency>
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-logback</artifactId>
<version>1.7.30</version>
</dependency>
Sentry DSN 설정하기
DSN(Data Source Name)은 Sentry의 프로젝트 단위별로 발급이 된다. 적용할 어플리케이션에서 Sentry 프로젝트의 DSN을 복사해서 설정해주면 됩니다.
Sentry DSN 가져오기
Settings > Projects > 프로젝트 선택 > Client Key(DSN) > DSN 복사
어플리케이션에 DSN 설정하기
Sentry에서 제시하는어플리케이션에 DSN 설정은 여러방법이 있습니다. 그 중 Sentry의 SpringBoot-autoconfiguration으로 설정을 진행해보겠습니다.
application.properties
Sentry 프로젝트에서 복사한 DSN 값을 application.properties 에 아래와 같이 설정합니다.
# sentry
sentry.dsn = https://d4fd7560c5184ff985f34413aeb8a03c@o432031.ingest.sentry.io/5385221
logback-spring.xml
logback 설정파일에는 두가지 설정을 해줍니다.
1. appender 태그에 Sentry 설정 추가
2. 추가한 appender를 Spring Profile별로 적용하기
<?xml version="1.0" encoding="UTF-8"?>
<configuration>
<appender name="Sentry" class="io.sentry.logback.SentryAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<!-- Optionally add an encoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
...
어플리케이션 운영환경에만 Sentry를 적용하여 에러를 트래킹하고자 아래와 같이 prod
profile에 위에서 만들어 놓은 Sentry appender 적용을 하였습니다. ( 원하는 환경에 appender를 추가하면 됩니다.)
<appender-ref ref="Sentry" />
...
<springProfile name="local">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="DAILY_ROLLING"/>
</root>
</springProfile>
<springProfile name="dev, stg">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="DAILY_ROLLING"/>
</root>
</springProfile>
<springProfile name="prod">
<root level="DEBUG">
<appender-ref ref="STDOUT"/>
<appender-ref ref="DAILY_ROLLING"/>
<appender-ref ref="Sentry" />
</root>
</springProfile>
</configuration>
이제 어플리케이션 단에 Sentry 설정은 끝났습니다. Sentry Alert을 설정해보겠습니다.
Sentry Alert 설정하기
Sentry + Slack Integrations 설정하기
Setting > Integrations
Sentry Alert Rule 만들기
Alerts > Create Alert Rule
1. condition 설정하기
Alert을 발생시키는 조건을 설정합니다.
2. Alert받을 매체 선택하기
Send a Slack notification을 선택합니다.
선택 후 아래와 같이 나오면, 적용할 Workspace와 Alert을 수신할 채널을 입력합니다.
Sentry Alert Bot 이름 바꾸기
Slack의 Sentry App 설정에서 Sentry Alert Bot의 이름을 변경할수 있습니다.
Apps > Sentry > Settings > Bot User
sentry 4.3.0 버전 업데이트(2021.04.22 기준)
sentry-logback
, sentry-spring-boot-start
를 2021.04.22 기준 최신버전인 4.3.0 으로 업데이트 하면서 아래와 같이 의존성을 버전업 하였습니다.
gradle
implementation(
"io.sentry:sentry-spring-boot-starter:4.3.0",
"io.sentry:sentry-logback:4.3.0"
)
위와 같이 변경 및 빌드 후, 어플리케이션을 동작 시키면 아래와 같은 에러를 받아볼수 있습니다.
ERROR in ch.qos.logback.core.joran.spi.Interpreter@43:18 - no applicable action for [encoder], current ElementPath is [[configuration][appender][encoder]]
ERROR in ch.qos.logback.core.joran.spi.Interpreter@44:22 - no applicable action for [pattern], current ElementPath is [[configuration][appender][encoder][pattern]]
logback-spring.xml
기존 logback 설정파일의 SentryAppender 설정 부분을 TODO와 같이 변경해줍니다.
AS-IS
<appender name="Sentry" class="io.sentry.logback.SentryAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>ERROR</level>
</filter>
<!-- Optionally add an encoder -->
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
TO-DO
<appender name="Sentry" class="io.sentry.logback.SentryAppender">
<minimumEventLevel>ERROR</minimumEventLevel>
</appender>
참고
'DevOps > 자동화' 카테고리의 다른 글
Github PR시 Jenkins를 통한 빌드 자동화 (0) | 2021.05.17 |
---|