Elixirアプリのエラーとパフォーマンスの監視にAppSignalを試してみました。まだβ版とのことなので利用の際は注意がです。Elixirのアプリだけでなく、Rubyのアプリでも利用が可能です。
どんなことができるの?
Web GUI上でElixirアプリのエラーとパフォーマンスの監視ができます。似たようなサービスではNew Relicとかが有名ですよね。ElixirではNew RelicよりApp Signalの方が導入が簡単そうだったのでこちらを試すことにしました。
AppSiganlでは、もう少し具体的には以下のようなことができます。
エラー監視
- エラー一覧(Issue List)があり、1つ1つのIssueをOpenしたりCloseしたりできる。
- githubと連携すると自動的にgithubの方にissueを投げてくれる。
- エラーは頻度の多い順に見ることができ、それぞれのエラーについてバックトレースやRequest Pathなど、解決のために必要な情報がしっかりと含まれている。
パフォーマンス分析
- コントローラー(アクション)ごとに、どのぐらい実行に時間がかかっているか、何度呼び出されているかを一覧で見ることができ、どのアクションが最もパフォーマンスにインパクトを与えているかを確認できる。
- パフォーマンスの問題についてもエラー監視と同様にOpen / Closeが可能。
- DBのスロークエリ一覧と詳細の確認
そのほかにもカスタムメトリクスの作成、デプロイ履歴の確認、ホストごとの分析などの機能があります。
また、前述のgithubとの連携に加え、Slackなどの外部サービスとの連携は非常に便利ですね。AppSignalのWeb GUIはReactで書かれており動作が軽快なのも地味に良いです。
料金
Rubyで使う場合は30日超えると料金が発生するようですが、おそらくElixirの方は(β版のうちは)30日超えて使用しても無料です。
インストール
では早速導入していきます。今回、試すにあたってPhoenixアプリを使っていますが、Phoenix以外の場合の導入方法についても触れていきます。Getting Startedに書いてある通り、以下のようにインストールできます。
mix.exsに依存を追加します。
def application do
[applications: [:appsignal]]
end
def deps do
[{:appsignal, "~> 0.9"}]
end
Phoenixアプリの場合、lib/my_app/endpoint.ex
にAppsignal.Phoenix
モジュールを使うように以下のように追記します。
use Appsignal.Phoenix
また、config/config.exs
に以下を追記します。
config :my_app, MyApp.Endpoint,
instrumenters: [Appsignal.Phoenix.Instrumenter]
テンプレートの描画にどのぐらい時間がかかっているかを計測するためには、同様に次のconfigを追加します。
config :phoenix, :template_engines,
eex: Appsignal.Phoenix.Template.EExEngine,
exs: Appsignal.Phoenix.Template.ExsEngine
DBのクエリのログも同様にして、次のようにconfigを追加します。
config :my_app, MyApp.Repo,
loggers: [Appsignal.Ecto]
設定
AppSignalに登録して、Add ApplicationからAPIキーを入手しconfig.exs
に追記します。
config :appsignal, :config,
name: :my_first_app,
push_api_key: "your-hex-appsignal-key"
プロダクション環境では次のように設定します。
config :appsignal, :config,
name: :my_first_app,
push_api_key: "your-hex-appsignal-key",
env: :prod,
revision: Mix.Project.config[:version]
テスト環境では次のように無効にしておくと良いです。
config :appsignal, :config,
active: false
ログに残してはいけない情報は、次のようにPhoenixの設定をします。デフォルトでは["password"]
となっています。
config :phoenix, :filter_parameters, ["password", "secret"]
Phoenixを使っていない場合は、AppSignalの設定で同様のことができます。
config :appsignal, :filter_parameters, ["password", "secret"]
以上で導入は終わりです。
おわり
あまり深堀りした内容ではないですが、一旦導入までで。また何かあれば追記します。