【Elixir】New RelicでPhoenixアプリケーションをモニタリングする
健全な改善作業にはモニタリングが重要です。この記事ではNew RelicのAPMを利用してPhoenixアプリケーションの計測を行ってみます。
New Relic側の作業
New Relic側でサインアップまで済ませ、API-keysからlicence keyを取得しておきます。後ほどElixirのconfigに設定します。
Phoenix project側の作業
New Relic Agentの導入
以下のREADMEに沿って進めます。
depsに :new_relic_agent
を追加します。
defp deps do
[
# ... 略
{:new_relic_agent, "~> 1.0"}
]
end
configに追加する
今回は動作確認のためdev環境のログを送ります。config/config.exs
にて環境変数経由で読み込むようにします。
config :new_relic_agent,
app_name: System.get_env("NEW_RELIC_APP_NAME"),
license_key: System.get_env("NEW_RELIC_LICENSE_KEY")
環境変数のセット
System.get_env/2
で読み込まれる環境変数をセットしましょう。余談ですが私はdirenvをよく使っています。
-
NEW_RELIC_APP_NAME
: 任意の値。わかりやすい名前が望ましい -
NEW_RELIC_LICENSE_KEY
: 冒頭で取得したlicense_keyをセット
export NEW_RELIC_APP_NAME=sample_app
export NEW_RELIC_LICENSE_KEY=<New Relicから取得したlicense keyを入力>
参考:
動かしてみる
作業はたったこれだけです。phoenixサーバーを立ち上げてAPIを呼び出す等して動作させてみます。
iex -S mix phx.server
# 例
curl http://localhost:4000/api/posts
数分待ってNew Relic側で見てみると、データが取得できているのを確認できました。
試しにエラーも起こしてみると、Errorsのデータに入ってきました。
また、BEAMというメニューもあり、VMの状況も可視化されているようです。良い感じです。
どういった仕組みなのか
Phoenixアプリケーションではtelemetryを介してレスポンスタイムタイムやEctoのログが収集されており、これらをNew Relic Agentが自動で拾っているようです。
READMEを見るに、以下4つのプロジェクトを利用する分には自動でのログ収集、送信が可能とのことです。
Plug: See NewRelic.Telemetry.Plug for details.
Phoenix: See NewRelic.Telemetry.Phoenix for details.
Ecto: See NewRelic.Telemetry.Ecto for details.
Redix: See NewRelic.Telemetry.Redix for details.
Phoenixを利用していない場合などはmanual-instrumentationの部分を参考に自前での実装が必要になってきそうですね。
telemetryに関してはこちらのページも参考にしてみてください。
まとめ
New Relicを使ってPhoenixアプリケーションのモニタリングを行う流れについて解説しました。Phoenixの場合はサクッと導入ができ、リッチなUIでデータの可視化ができて良い感じです。「推測するな、計測せよ」の精神で改善活動を行なっていきましょう。
Discussion