티스토리 뷰

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>

참고

sentry-logback

'DevOps > 자동화' 카테고리의 다른 글

Github PR시 Jenkins를 통한 빌드 자동화  (0) 2021.05.17
댓글
공지사항
최근에 올라온 글
최근에 달린 댓글
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함
Total
Today
Yesterday