LoginSignup
15
10

More than 1 year has passed since last update.

Sentryを使ったElixir/Phoenixアプリのエラー監視【Gmail通知付き】

Last updated at Posted at 2021-10-10

fukuoka.ex の koyo です!
アプリケーションを運用する際のエラー監視って悩みますよね。
今回はSentryという 「エラー監視/通知 SaaS」 を Elixir/Phoenix で使う方法を紹介します。
また、検知したエラーを一定のルールでGmailに通知する仕組みも使ってみましょう。

最後に参考リポジトリも置いておくので是非使ってみてください。

動作環境

  • Elixir 1.12.2 on WSL2 Ubuntu
  • Phoenix 1.6

Sentry とは?

Sentry はエラー監視をはじめとする様々なトラッキング機能を提供するSaaSです。
フロントエンドからバックエンドまで幅広く使用でき、各言語向けのSDKが充実しているのが魅力的ですね。なんとElixirのSDKもあります!:thumbsup:

image.png

すでにいろんな記事で紹介されていて、Sentryのプランの違いなどは下記記事にもまとまっているので是非参考にしてみてください。

料金プランは色々ありますが、無料でもお試しすることはできそうなので今回はそちらを使ってみます。
image.png

無料でも1userで5000エラー/月までのログを30日保持してくれそうですね。個人用途なら十分そう。
ただし Alerts -> Integration notifications の項目にあるように、無料の Developer プランでは使えないことに注意です(Teamプラン以上で使える)。
今回はGmail通知を行うので問題ないですが、Slack通知など別Appと連携などになってきたら上位プランを検討してみてもいいかもしれないですね。
image.png

導入方法

Sentryの登録

まず Signupページへ行きます。
今回はGmail通知するつもりなのでGoogleアカウントで登録してみます。
image.png

アカウントを作成します。
image.png

Welcomeページに遷移したらokです。
image.png

ここはもちろん(?)Elixirを選んでProjectを作成します。
image.png

するとかなり丁寧なセットアップ手順が!
こういうのあるとうれしいですね^^
image.png

ちなみにドキュメントのこちらでもセットアップ手順を見ることが出来ます。
Phoenixで使用する場合の手順も書いてあり、非常に親切です。

詳しい方は上記のDocumentを読み解いていけば自然に導入できるかと思います。

初めてだと上記のDocumentだけでは難しいと思うので、今回はより詳しくPhoenixプロジェクトの作成から進めていきたいと思います。

※日本語化

ちなみに Settings -> Account Details にて言語設定を日本語にすることができます!
少しわかりにくいところにあるので右上の検索バーで language と調べてみてください。

image.png

有効にするとこんな感じ。完全な日本語化というわけではなさそうですが、英語に慣れてない人にはうれしい機能ですね。
(今回は英語のままやっていきます!)

image.png

Phoenixプロジェクトの作成

さて、それでは Elixir の Webアプリケーションフレームワークである Phoenix を用いて Sentry によるエラー監視を実験してみましょう。
なお Phoenix 1.6 から LiveView がデフォルトになりました。(使わない場合は--no-live
今回はLiveviewバージョンの方で問題ないです。

image.png

以下のコマンドでプロジェクトを作成してください。

mix phx.new sentry_sample --no-ecto

Sentry の導入

まずSentry公式のライブラリと必要な依存を入れます

mix.exs
  defp deps do
    [
      ...
      {:sentry, "~> 8.0"},
      {:hackney, "~> 1.8"}
    ]
  end

以下コマンドも忘れずに

$ mix deps.get

ちなみにライブラリの仕様は hexdocs にも詳しく書いてあります!丁寧!

以下のファイルに設定を追加します。ドキュメントには config/prod.ex への設定が案内されていますが、今回は手元でしか動かさないのでdev.exに設定しておきます。

config/dev.ex
config :sentry,
  dsn: "xxxxxx", # <- ここは調べて埋める
  environment_name: :dev,
  enable_source_code_context: true,
  root_source_code_path: File.cwd!(),
  tags: %{
    env: "development"
  },
  included_environments: [:dev]

DSN はログイン後の画面で確認できます。
image.png

ドキュメントには Sentry.PlugCapture を使う方法など紹介されていますが最低限動かすのはこの設定のみで十分です。ほかに色々やりたくなったらドキュメントやhexを参考に設定してみてください。

アプリケーション -> Sentry の動作確認

ここまでで設定は完了なので、以下のようなモジュールを使って動かしてみます

lib/sentry_sample/ext_notifier.ex
defmodule ExtNotifier do
  def notify(message) do
    Sentry.capture_message(message)
  end
end

実行してみます

$ iex -S mix
iex(1)> ExtNotifier.notify("send!")
{:ok, ""}

Sentry の Issues の項目を見ると送られていますね!
2021-10-11_01h11_32.png

詳細見ると色々な情報があり、今回設定したtag情報やメッセージも確認できますねb

image.png

Gmail 通知設定

ここまでで アプリケーション -> Sentry への通知はできました。
ここからはさらに アプリケーション -> Sentry -> Gmail の通知を設定していきます。
エラー監視では、届いたエラーを別のサービスに通知する要件は多く出てくると思うので、重要ですね!

ここまでできれば Zapier などを使うことで Gmail に届いたメールをSlackなどに連携もできそうです。
また、Teamプラン以上であれば、Sentryが提供しているIntegrationの設定でSlackをはじめとする各種サービスへの連携もできます。

今回は アプリケーション -> Sentry -> Gmail までをやってみます。

アラートの設定

Alert の項目でセッティングします。 Create Alert Rule で設定します。
image.png

こんな感じで1回でも発生したら送信するようにしてみます。
image.png

メール設定の確認

あと自分の設定を変更してメール届くようにします。左上の自分のアイコンをクリックし、 User setting へ遷移します。

image.png

image.png

ここに通知したいメールアドレスがあることを確認してみてください。
image.png

またアラートの通知設定が以下のようになっているかを確認してください。
image.png

アプリケーション -> Sentry -> Gmail の動作確認

ここまで設定すれば アプリケーション -> Sentry -> Gmail のフローができています!ということで送ってみます!

iex> ExtNotifier.notify("send2")
{:ok, ""}

少し待つとこのように通知来ますね!
image.png

まとめ

簡単な設定で多機能な監視機能をアプリケーションに組み込むことができました!
Sentryは使いやすくルールも色々設定できるので、監視に困ったらぜひ触ってみてください。

今回使ったリポジトリをこちらに置いておきました。
config/dev.exs の DNS を自分のSentryアカウントの DNS に設定すれば動くと思います。

15
10
1

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
15
10