Sentry 와 연동하기

 

Sentry는 다양한 언어와 플랫폼과 연동을 지원하고 있으며 온 프레미스 방식의 연동 목록은 https://docs.getsentry.com/on-premise/  에서 확인할 수 있습니다.

Sentry의 공식 연동 클라이언트는 Raven 이라고 부르며 지원하는 언어를 뒤에 붙여서 명명하며 예로 루비의 경우 Raven-ruby, 자바는 raven-java 가 됩니다.

 

다양한 언어를 지원하므로 연동은 그리 어렵지 않아 보이며 API를 사용하기 위해서는 DSN이라고 부르는 token이 포함된 URL을 알고 있어야 하며 

프로젝트를 선택한 후 Settings 을 선택합니다.

하단의 Client Keys(DSN) 을 클릭하면 키를 확인할 수 있습니다.

PHP

PHP SDK 문서는 https://docs.getsentry.com/on-premise/clients/php/ 에서 제공합니다.

Laravel

https://github.com/jenssegers/laravel-raven 에서 php-raven을 래핑한 라라벨 패키지를 제공하며 일반적인 라라벨 패키지처럼 설치하면 됩니다.

 

연동

  1. 패키지 설치

    composer require jenssegers/raven
  2. app/config.php 에 프로바이더 등록

    app/config.php
    'providers' => [
    	Jenssegers\Raven\RavenServiceProvider::class,
    ],
    'aliases' => [
    	'Raven'           => Jenssegers\Raven\Facades\Raven::class,
    ],
  3. config/services.php 에 추가

    'raven' => [
        'dsn'   => env('RAVEN_DSN'),
        'level' => env('LOG_LEVEL'),
    ],
  4. .env 에 DSN과 로그 레벨 설정을 추가합니다.

    RAVEN_DSN=<key>:<secret>@app.getsentry.com/<project>
    LOG_LEVEL=debug

services.php 에 raven 항목과 .env 에 RAVEN_DSN 항목이 둘 다 설정되어 있어야 동작하며 (RavenServiceProvider::register() 참고) 하나만 설정되어 있으면 예외가 발생하고 아예 로그가 남지 않으니 주의해야 합니다.

만약 설치만 하고 사용하지 않을 경우 위 두 항목을 모두 설정하지 말아야 합니다.

 

RavenServiceProvider
if (! getenv('RAVEN_DSN') and ! $this->app['config']->get('services.raven')) {
    return;
}

 

Exception Handler

Sentry 에서 수집하려면 app 에서 명시적으로 Log 파사드로 로깅을 남겨야 되며 예외가 발생할 경우 Sentry 에 남지 않습니다.

라라벨의 기본 예외 처리 핸들러에 다음과 같이 raven 기능을 연동해 놓으면 app 수정없이 발생한 예외도 Sentry 에 남겨됩니다.

App\Exceptions\Handler.php
public function report(Exception $e)
{
    $client = new \Raven_Client(env('RAVEN_DSN'));
    $client->captureException($e);

    parent::report($e);
} 

 

Java

자바와 연동은 https://docs.getsentry.com/on-premise/clients/java/ 에서 확인할 수 있습니다.

 

Logback

pom.xml 에 다음 내용을 추가합니다.

<dependency>
  <groupId>com.getsentry.raven</groupId>
  <artifactId>raven-logback</artifactId>
  <version>7.2.0</version>
</dependency>

 

이제 logback.xml 의 appender에 snetry를 추가합니다.

<configuration>
<appender name="STDOUT" class="ch.qos.logback.core.ConsoleAppender">
    <layout class="ch.qos.logback.classic.PatternLayout">
        <Pattern>%d{HH:mm} %-5level %logger{36} - %msg%n</Pattern>
    </layout>
</appender>

<appender name="FILE" class="ch.qos.logback.core.FileAppender">
    <file>testFile.log</file>
    <append>true</append>
    <encoder>
        <pattern>%-4relative [%thread] %-5level %logger{35} - %msg%n</pattern>
    </encoder>
</appender>
	<!-- Sentry 설정 -->
  <appender name="Sentry" class="com.getsentry.raven.logback.SentryAppender">
    <dsn>https://<key>:<secret>@app.getsentry.com/<project>?options</dsn>
    <tags>tag1:value1,tag2:value2</tags>
    <!-- Optional, allows to select the ravenFactory -->
    <!--<ravenFactory>com.getsentry.raven.DefaultRavenFactory</ravenFactory>-->
  </appender>
  <root level="DEBUG">
    <appender-ref ref="STDOUT" />
    <appender-ref ref="FILE" />
    <appender-ref ref="Sentry"/>
</root>
</configuration>