kenju's blog

About Programming, Mathematics, Security and Blockchain

ローカルでSentryサーバーを実行する方法

Sentryはローカルで実行させることができます。本来はオンプレミス版として提供されているソースを、ローカルで実行するだけです。 Sentryに送るログ内容をデバッグしたい時に便利です。

1. Sentry Serverをインストール

いくつかの手段があります

自分は最初Sentryの開発環境用を試していましたが、Pyenv周りではまってしまいました。 Dockerの方法を途中で見つけて試したらすんなり行きましたので、以降はそちらでの方法を紹介します。

2. Docker Containerを起動

基本的には https://docs.sentry.io/server/installation/docker/ にある"Up and Running" に沿えばできます。 ハマりどころはありませんでした。

途中でローカル開発用のアカウント作成のために、email/passwordを聞かれます。

3. DSNを開発環境用のものにセット

まず、http://127.0.0.1:9000 (ポートはデフォルトでは9000)を開きます。 デフォルトで「Internal」というプロジェクトが作成されています。

f:id:itiskj:20170801172050p:plain

「2」で作成したemail/passwordによるアカウントでログインした後、 「[Project Name] -> Project Settings -> Client Keys (DSN)」からプロジェクトのDSNを取得します。 http://localhost:9000/sentry/internal/getting-started/ からも取得できます。

(JSでは Public DSNである必要があります)

f:id:itiskj:20170801172104p:plain

ハマりポイント1: DSN設定

あとは、セットアップしている箇所で DSN を上記で取得したものにする必要があるのですが、ここで一点ハマりポイントとしては、「表示されるDSNのままでは動かない」 点です。

これはDSNのフォーマットを考えれば当然で、例えば上記では ://12345abc@/1 がPublic DSNとして提示されていますが、公式ドキュメント に記載されている通り、DSNのフォーマットは

'{PROTOCOL}://{PUBLIC_KEY}:{SECRET_KEY}@{HOST}/{PATH}{PROJECT_ID}'

です。したがって、プロトコルhttp とホスト名 127.0.0.1:9000 を付与して、下記のように設定する必要があります。

Railsの例

# app/initializer/sentry.rb とかのイニシャライザーで設定していることが多いかと思います
Raven.configure do |config|
  config.dsn = Rails.env.development? ? 'http://12345abc@127.0.0.1:9000/1' : '***'
  config.environments = ['production', 'development']
end

JavaScriptの例

if (process.env.NODE_ENV === 'production') {
  Raven.config('https://***@app.getsentry.com/***').install();
} else {
  Raven.config('http://12345abc@127.0.0.1:9000/1').install();
}

ハマりポイント2: ホスト名設定

また、第二のハマりポイントとしては、Sentryライブラリは内部でDSN Parseを行なっているため、localhost を指定するとRavenConfigError: Invalid DSN エラーが発生し、正しくインストールできません。lvh.me127.0.0.1などのホスト名である必要があります。

あとはエラーを投げるだけ

エラーを投げまくりましょう :sunglasses:

f:id:itiskj:20170801172152p:plain