今回の目標
Webアプリ(今回はSpring)でエラーになった場合、Sentryを使ってクライアントのOSやブラウザの情報を収集する
Sentryって何?
JavaやJavaScriptやRubyやC#といった多種多様な言語のエラー情報を収集するOSS。
操作したクライアントのブラウザやOSまで拾えるから便利。
またエラーに関してGUIベース(Slackライクな画面)で簡単に閲覧・確認できる。
さらにSlackに通知したり、Jiraに課題として登録することが可能。
Sentryの設定手順
Sentryの公式ページでアカウント作成
Sentryのチームとプロジェクト作成
以下の画面よりJavaを選択し、プロジェクトを作成
プロジェクトのDSNを取得
プロジェクトのSettingsのClient Keysを選択して以下のDSNのURLをコピーする
Webアプリ「Java(Spring)」の設定
## Mavenにパッケージインストール
Sentry-logbackはログ出力の内容をSentryに送るライブラリ
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-spring</artifactId>
<version>1.7.4</version>
</dependency>
<dependency>
<groupId>io.sentry</groupId>
<artifactId>sentry-logback</artifactId>
<version>1.2.0</version>
</dependency>
## JavaにSentryの設定を記載しBeanを追加
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletContextInitializer;
import org.springframework.context.annotation.Bean;
import org.springframework.web.servlet.HandlerExceptionResolver;
import io.sentry.Sentry;
@SpringBootApplication
public class SentryApplication {
public static void main(String[] args) {
SpringApplication.run(SentryApplication.class, args);
Sentry.init("https://xxxxxxxxxxxxxxx@sentry.io/1202285");
}
@Bean
public HandlerExceptionResolver sentryExceptionResolver() {
return new io.sentry.spring.SentryExceptionResolver();
}
@Bean
public ServletContextInitializer sentryServletContextInitializer() {
return new io.sentry.spring.SentryServletContextInitializer();
}
}
## LogBackにSentryを追加
resource配下に以下のファイルを設置
<configuration>
<appender name="Console" class="ch.qos.logback.core.ConsoleAppender">
<encoder>
<pattern>%d{HH:mm:ss.SSS} [%thread] %-5level %logger{36} - %msg%n</pattern>
</encoder>
</appender>
<appender name="Sentry" class="io.sentry.logback.SentryAppender">
<filter class="ch.qos.logback.classic.filter.ThresholdFilter">
<level>WARN</level>
</filter>
</appender>
<root level="DEBUG">
<appender-ref ref="Console" />
<appender-ref ref="Sentry"/>
</root>
</configuration>
## Controllerクラスにログ出力記載
logger.error時の内容がSentryに送られる
@RequestMapping("/")
public String list(Model model) {
logger.error("sentry error");
return "Greetings from Spring Boot!";
}
## 結果
Sentryから登録したメールアドレスにエラーメールが送信させる。
またSentryのプロジェクトにエラーが蓄積される
# [補足]:SentryとSlack連携
Sentryの設定画面からSlack連携することが可能。他にも多数のアプリと連携。