📈

【Elixir】New RelicでPhoenixアプリケーションをモニタリングする

2022/04/30に公開

健全な改善作業にはモニタリングが重要です。この記事ではNew RelicのAPMを利用してPhoenixアプリケーションの計測を行ってみます。

New Relic側の作業

New Relic側でサインアップまで済ませ、API-keysからlicence keyを取得しておきます。後ほどElixirのconfigに設定します。

https://docs.newrelic.com/jp/docs/apis/intro-apis/new-relic-api-keys/

licence key

Phoenix project側の作業

New Relic Agentの導入

以下のREADMEに沿って進めます。

https://github.com/newrelic/elixir_agent/blob/master/README.md

depsに :new_relic_agent を追加します。

  defp deps do
    [
     # ... 略
      {:new_relic_agent, "~> 1.0"}
    ]
  end

configに追加する

今回は動作確認のためdev環境のログを送ります。config/config.exs にて環境変数経由で読み込むようにします。

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を入力>

参考:
https://docs.newrelic.com/jp/docs/apm/agents/manage-apm-agents/app-naming/name-your-application/

動かしてみる

作業はたったこれだけです。phoenixサーバーを立ち上げてAPIを呼び出す等して動作させてみます。

iex -S mix phx.server
# 例
curl http://localhost:4000/api/posts

数分待ってNew Relic側で見てみると、データが取得できているのを確認できました。

APM

summary

試しにエラーも起こしてみると、Errorsのデータに入ってきました。

error

また、BEAMというメニューもあり、VMの状況も可視化されているようです。良い感じです。

BEAM

どういった仕組みなのか

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に関してはこちらのページも参考にしてみてください。

https://zenn.dev/koga1020/books/phoenix-guide-ja-1-6/viewer/telemetry

まとめ

New Relicを使ってPhoenixアプリケーションのモニタリングを行う流れについて解説しました。Phoenixの場合はサクッと導入ができ、リッチなUIでデータの可視化ができて良い感じです。「推測するな、計測せよ」の精神で改善活動を行なっていきましょう。

Discussion