NewRelicを導入した話 -ゴルフメドレー開発日記-
こんにちは。ゴルフメドレーの開発をしている宮水です。
ゴルフメドレーとは、全国のゴルフ練習場を特徴(打ち放題 / 駅近 / アプローチ練習場もある...など)から検索できるサービスです。ゴルフ場コンサルタントのあべちゃんと、エンジニアのゆうすけと3人で開発しています。
さて、このゴルフメドレー ですが、最近ありがたいことにアクセス数が増えてきたので、パフォーマンスについて気になるお年頃になってきました。
NewRelicを入れることにした
「何か監視ツール入れたいけど、まだ全然利益も出てないのにお金をかけるわけには...」と思いつつ色々調べていたところ、なんとNewRelicで、以下の条件で全ての機能が無期限で無料で使用できることを知りました。
NewRelicで設定の準備
サーバーサイドには、RailsとGraphQLを採用しており、デプロイにはHerokuを使っています。今回はこの組み合わせで、導入方法について雑にご紹介したいと思います。
まずはこちらから無料サインアップします。
無事ログインできると、Home画面を表示することができます。
画像の右上にある「+ Add mode data」をクリックします。
「App monitoring」というところで、Rubyを選択します。
application nameの入力を求められるので、自分のプロダクトの名前を入力します。名前は後からでも変えられます。
今回はgemでinstallしたいので、「Yes, i'm using Bundler」を選択します。install方法が表示されるだけです。
次に、Downloadボタンをクリックし、「newrelic.yml」ファイルを入手します。このファイルには、NewRelicのライセンスキーが含まれるので大切に保管しましょう。
Railsでの設定
一旦NewRelicのコンソールから離れて、Railsアプリケーションに移ります。
Gemfileに'newrelic_rpm'を追加して、bundle installします。
# Gemfile
gem 'newrelic_rpm'
最後に、先ほどダウンロードした「newrelic.yml」ファイルを、Gemfileと同じ階層に置きます。そのままだと、LICENSE_KEYがそのまま書かれているので、.envファイルに移します。以下のような感じで書きます。先ほど入力した app_name などが気に入らなければ、ここで修正してください。
#
# This file configures the New Relic Agent. New Relic monitors Ruby, Java,
# .NET, PHP, Python, Node, and Go applications with deep visibility and low
# overhead. For more information, visit www.newrelic.com.
#
# Generated May 23, 2021
#
# This configuration file is custom generated for NewRelic Administration
#
# For full documentation of agent configuration options, please refer to
# https://docs.newrelic.com/docs/agents/ruby-agent/installation-configuration/ruby-agent-configuration
common: &default_settings
# Required license key associated with your New Relic account.
license_key: <%= ENV["NEW_RELIC_LICENSE_KEY"] %>
# Your application name. Renaming here affects where data displays in New
# Relic. For more details, see https://docs.newrelic.com/docs/apm/new-relic-apm/maintenance/renaming-applications
app_name: your-app-name (Production)
distributed_tracing:
enabled: true
# To disable the agent regardless of other settings, uncomment the following:
# agent_enabled: false
# Logging level for log/newrelic_agent.log
log_level: info
# Environment-specific settings are in this section.
# RAILS_ENV or RACK_ENV (as appropriate) is used to determine the environment.
# If your application has other named environments, configure them here.
development:
<<: *default_settings
app_name: your-app-name (Development)
test:
<<: *default_settings
# It doesn't make sense to report to New Relic from automated test runs.
monitor_mode: false
staging:
<<: *default_settings
app_name: your-app-name (Staging)
production:
<<: *default_settings
今回はGraphQLを使用しているので、その設定もしていきます。GraphQLのschema.rbファイルに1行追加するだけです。
# app/graphql/schema.rb
class GolfMedleyBackendSchema < GraphQL::Schema
mutation(Types::MutationType)
query(Types::QueryType)
use GraphQL::Tracing::NewRelicTracing, set_transaction_name: true # ここを追加
...
end
Herokuの設定
heroku側で、環境変数の設定をしていきます。今回は、NEW_RELIC_LICENSE_KEYを環境変数にしたので、以下のコマンドで環境変数を設定していきます。多分こんな感じです。
heroku config:set NEW_RELIC_LICENSE_KEY='ここにライセンスキーを入力する' --app your-app-name
最後に、Herokuでサーバーサイドのリポジトリをデプロイします。
NewRelicでみてみる
設定がうまくいっていれば、数分で設定が反映されるはずです。
Explorerタブを開くと、環境ごとにダッシュボードが出来上がっているのがわかります。(ダッシュボードというのかわからないけど...)
staging環境で適当に操作して、Transactionsタブをみてみると、GraphQLのクエリごとにデータが取れてますね!
終わりに
以上、Rails、GraphQL、Herokuの環境でNewRelicを導入してみた話でした。すごく簡単に導入できましたが、正直なところNewRelicの使い方はまだわからないので、これからちょっとずつどんな機能があるのか試していこうと思っています。
以上です。ここまでお読みいただきありがとうございました。
もしよかったら、のぞいてみてください。
\ゴルフメドレー/