LoginSignup
4
7

More than 5 years have passed since last update.

Webアプリでエラーになった時のクライアント情報収集

Last updated at Posted at 2018-05-12

今回の目標

Webアプリ(今回はSpring)でエラーになった場合、Sentryを使ってクライアントのOSやブラウザの情報を収集する

Sentryって何?

JavaやJavaScriptやRubyやC#といった多種多様な言語のエラー情報を収集するOSS。
操作したクライアントのブラウザやOSまで拾えるから便利。
またエラーに関してGUIベース(Slackライクな画面)で簡単に閲覧・確認できる。
さらにSlackに通知したり、Jiraに課題として登録することが可能。

Sentryの設定手順

Sentryの公式ページでアカウント作成

Sentryのチームとプロジェクト作成

以下の画面よりJavaを選択し、プロジェクトを作成

sentry1.png

プロジェクトのDSNを取得

プロジェクトのSettingsのClient Keysを選択して以下のDSNのURLをコピーする

sentry1.png

Webアプリ「Java(Spring)」の設定

 Mavenにパッケージインストール

Sentry-logbackはログ出力の内容をSentryに送るライブラリ

pom.xml
        <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配下に以下のファイルを設置

logback.xml
<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のプロジェクトにエラーが蓄積される

sentry1.png

 [補足]:SentryとSlack連携

Sentryの設定画面からSlack連携することが可能。他にも多数のアプリと連携。

Slack連携.png

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7