LoginSignup
1
5

More than 3 years have passed since last update.

Playframework(Scala)でSentryを使う

Last updated at Posted at 2019-02-19

Sentryとは

エラーを補足して整理することができるSaaSです。ログに埋もれがちなエラーを集計してチケット化し、すばやく修正していくことができます。

必要なこと

Javaのlogbackにフックを仕掛けることで、Sentryのサーバへエラーログを送信する方法でやります。

  • SentryでOrganizationとProjectを作り、DSNを取得
  • 必要なパッケージを設定
  • 設定を書き込んだDSNでSentry.initする
  • logbackにSentryを設定する

順番に説明していきます

DSN取得

SentryサイトでJavaプロジェクトを作成するとDSNが表示されるのでこれを使います。

必要なパッケージを設定

build.sbtにsentry-logbackの依存を書きます。

libraryDependencies += "io.sentry" % "sentry-logback" % "VERSION"

Sentry.initする

Sentryに設定を書き込む必要があるのですが、いくらか方法があります。

  • sentry.properties
  • 起動引数
  • 環境変数
  • Sentry.initを起動時に実行

どの方法でもいいのですが、Environmentなどの設定が厄介なので、ここでは汎用的なSentry.initを使ってやります。

package modules

import com.google.inject.AbstractModule
import io.sentry.Sentry
import javax.inject.{Inject, Singleton}
import play.api.{Configuration, Environment, Logger}

class SentryModule extends AbstractModule {
  override def configure(): Unit = bind(classOf[SentryService]).asEagerSingleton()
}

@Singleton
class SentryService @Inject()(conf: Configuration, env: Environment) {
  val Packages = 
      "controllers" ::
      "modules" ::
      "models" ::
      "services" ::
      "utils" :: Nil

  val dsn = conf.get[String]("sentry.dsn")
  val packages = Packages.mkString(",")
  val params = Map(
    "environment" -> env.mode.toString,
    "stacktrace.app.packages" -> packages,
    "servername" -> InetAddress.getLocalHost.getHostAddress
  )
  val full = s"${dsn}?${params.map { case (k, v) => s"${k}=${v}" }.mkString("&&")}"
  Sentry.init(full)
}

コードは長いですがやってることはそんな難しくなくて、

  • 設定はDSNのURIにパラメータとしてくっつける
  • このパラメータをEnvironmentその他から生成する
  • DIのModuleで一度だけSentry.initにフルのDSNを渡して実行する

だけです。

このModuleを有効にするにはapplication.confに以下をセットします。

play.modules.enabled += "modules.SentryModule"
sentry.dsn = "https://hoge@sentry.io/fuga"

Logbackの設定

公式を読むのが早いです。

動作確認

以上で設定は完了です。Sentryはイベントが発生しない限りデータを送信することが無いので、わざと例外を発生させるエンドポイントを作っておくと動作確認がとても楽になります。

1
5
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
1
5