New Relicとは
New Relicは、アプリケーションのパフォーマンス監視(APM: Application Performance Monitoring)などを提供するSaaS型プラットフォームです。
New Relic公式サイト:
https://newrelic.com/jp
主な特徴
- リアルタイム監視:アプリケーションのパフォーマンス状況をほぼリアルタイムで監視
- 自動インストルメンテーション:コードの大きな変更を行うことなく、主要なフレームワークを自動的に計測
- 包括的な可視性:アプリケーション、インフラ、ログ、エラー情報を一元的に可視化
- アラート機能:パフォーマンス低下やエラーを自動検知して通知
監視できるもの
- アプリケーション:レスポンスタイム、スループット、エラー率などの主要指標
- データベース:クエリパフォーマンス、スロークエリ
- 外部サービス:API呼び出し、HTTPリクエスト
- インフラ:サーバーリソース(CPU、メモリ、ディスク)
- ブラウザ:フロントエンドのパフォーマンス(RUM: Real User Monitoring)を通じた実ユーザー体験の把握
主な機能
1. APM(Application Performance Monitoring)
- トランザクション追跡:リクエストからレスポンスまでの処理を追跡
- スロークエリ検出:データベースクエリのパフォーマンス分析
- エラー追跡:例外やエラーの詳細な情報を記録
2. Infrastructure Monitoring
- サーバー、コンテナ、クラウドリソースの監視
- CPU、メモリ、ディスク、ネットワークの使用状況
3. Browser Monitoring (RUM)
- エンドユーザーのブラウザでのパフォーマンス測定
- ページロード時間、JavaScriptエラーなど
4. Logs
- アプリケーションログの集約と分析
- ログとAPMデータの相関分析
5. Alerts
- パフォーマンス閾値を超えた際の自動通知
- Slack、PagerDuty、メールなどへの通知
New Relicの価格プラン概要
New Relicは、データ使用量に応じた従量課金ベースの価格体系を採用しています。
主な価格プラン
- Free: 月額0円
- 100GB/月のデータインジェスト
- 1ユーザー
- 基本的なAPM、Infrastructure、Browser監視
- Standard: 月額$99〜
- 無制限のデータインジェスト(従量課金)
- 5フルプラットフォームユーザー
- 3ヶ月のデータ保持
- すべての監視機能
- Pro: 月額$349〜
- 無制限のデータインジェスト(従量課金)
- 10フルプラットフォームユーザー
- 13ヶ月のデータ保持
- 高度な分析とAI機能
- Enterprise: カスタム価格
- 大規模組織向け
- カスタムデータ保持期間
- 専任サポート
導入方法
1. New Relic管理画面でIntegrations & Agentsの追加
「Rails」-「Ruby on Rails」を選択し手順を進めていく
途中でライセンスキーを作成するため、メモまたはファイル内に記載のある手順に従って設定ファイルをダウンロードする。
2. Gemのインストール
# Gemfile
gem 'newrelic_rpm'
budle install3. 設定ファイルの作成(config/newrelic.yml)
NewRelic管理画面で作成後、ymlファイルをDLして配置
※ライセンスキーとAPP_NAMEは環境変数で定義するよう変更
common: &default_settings
# Required license key associated with your New Relic account.
license_key: <%= ENV['NEW_RELIC_LICENSE_KEY'] %>
app_name: <%= ENV.fetch('NEW_RELIC_APP_NAME', 'TEST_APP') %>
distributed_tracing:
enabled: true
# Browser monitoring configuration
browser_monitoring:
# Enable browser monitoring (Real User Monitoring)
auto_instrument: true
development:
<<: *default_settings
app_name: <%= ENV.fetch('NEW_RELIC_APP_NAME', 'TEST_APP (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: <%= ENV.fetch('NEW_RELIC_APP_NAME', 'TEST_APP (Staging)') %>
production:
<<: *default_settings
app_name: <%= ENV.fetch('NEW_RELIC_APP_NAME', 'TEST_APP (Production)') %>4. Browser Monitoringを有効にする場合、下記も修正
app/controllers/application_controller.rb
def set_csp
'script-src-elem' => ["'self'", "'unsafe-inline'", 'blob:',
・・・・
'https://js-agent.newrelic.com'],
'connect-src' => ["'self'",
・・・・
'https://bam.nr-data.net', 'https://*.nr-data.net', 'https://ga.jspm.io'],5. サーバ再起動
rails s6. 疎通確認
「Test connection」から疎通確認
7. ログからの起動確認
ログファイル(log/newrelic_agent.log)から起動状況を確認することができる
エージェント情報
- バージョン:9.23.0
- 環境:development
- アプリケーション名:TEST_APP など
- アカウントID
- アプリケーションID
Railsでの監視対象
1. Railsアプリケーション
- コントローラーアクションのパフォーマンス
- ビューのレンダリング時間
- ルーティングの処理
2. データベース(PostgreSQL)
- SQLクエリの実行時間
- スロークエリの検出
- 接続プールの状態
3. バックグラウンドジョブ
- Sidekiq:ジョブの実行時間とエラー
- ActiveJob:ジョブの処理状況
4. 外部サービス
- AWS SQS:メッセージキューの処理
- Redis:キャッシュとセッション管理
- HTTPリクエスト:外部API呼び出し
5. メール送信
- ActionMailer:メール送信のパフォーマンス
NRQL (New Relic Query Language)
NRQL(New Relic Query Language)は、New Relicに収集されたデータを照会するためのSQLライクなクエリ言語です。
NRQLの特徴
- SQLに似た構文:SELECT、FROM、WHEREなど、SQLと同様の文法を使用
- リアルタイムクエリ:New Relicに収集されたデータをリアルタイムで検索・分析
- カスタムダッシュボード作成:NRQLを使って独自のチャートやウィジェットを作成可能
- アラート条件の設定:NRQLクエリを使用してカスタムアラートを設定
基本構文
SELECT [属性] FROM [データタイプ] WHERE [条件] SINCE [期間]NRQLクエリ例
1. トランザクションの平均応答時間
SELECT average(duration) FROM Transaction SINCE 1 hour ago2. エラー率の計算
SELECT percentage(count(*), WHERE error IS true) FROM Transaction SINCE 1 day ago3. 特定のコントローラーアクションのパフォーマンス
SELECT average(duration), count(*) FROM Transaction
WHERE name = 'Controller/users/index'
SINCE 1 week ago
FACET appName4. スループット(リクエスト数/分)
SELECT rate(count(*), 1 minute) FROM Transaction
SINCE 30 minutes ago
TIMESERIES5. データベースクエリの実行時間トップ10
SELECT average(duration) FROM DatabaseQuery
SINCE 1 hour ago
FACET query
LIMIT 106. HTTPステータスコード別のリクエスト数
SELECT count(*) FROM Transaction
SINCE 1 day ago
FACET httpResponseCode
WHERE httpResponseCode IS NOT NULL7. 外部サービス呼び出しの監視
SELECT average(duration), count(*) FROM External
WHERE host LIKE '%api.example.com%'
SINCE 1 hour ago
TIMESERIESよく利用される関数
average():平均値count():カウントsum():合計max()/min():最大値/最小値percentage():パーセンテージ計算rate():レート計算(例: リクエスト/分)uniqueCount():ユニークな値の数
主なデータタイプ
Transaction:アプリケーショントランザクションTransactionError:エラー情報DatabaseQuery:データベースクエリExternal:外部サービス呼び出しPageView:ブラウザページビューJavaScriptError:フロントエンドエラー
アラートの設定方法
設定可能なアラート条件の種類
New Relicでは、様々なタイプのアラート条件を設定できます。
主なアラート条件の種類は以下の通りです。
1. NRQL Alerts(NRQLアラート)
最も柔軟で強力なアラート条件。
NRQLクエリを使用して、任意のデータに対してカスタムアラートを設定できます。
- Static threshold:静的閾値を超えた場合にアラート
- Baseline: 過去のデータから自動的に学習したベースラインから逸脱した場合にアラート
- Anomaly: 異常検知アルゴリズムを使用して予期しない変動を検出
2. APM Alerts(APMアラート)
アプリケーションパフォーマンス監視に特化したアラート条件です。
- Application response time: アプリケーションの応答時間
- Error percentage: エラー率
- Throughput: スループット(リクエスト数)
- Apdex score: ユーザー満足度スコア
- Transaction response time: 特定のトランザクションの応答時間
3. Infrastructure Alerts(インフラアラート)
インフラストラクチャのリソースやメトリクスに対するアラートです。
- CPU percentage: CPU使用率
- Memory percentage: メモリ使用率
- Disk utilization: ディスク使用率
- Network receive/transmit: ネットワーク受信/送信
- Process running: プロセスの実行状態
4. Browser Alerts(ブラウザアラート)
フロントエンドのパフォーマンスに関するアラートです。
- Page load time: ページ読み込み時間
- JavaScript error rate: JavaScriptエラー率
- AJAX response time: AJAX応答時間
- Page views with errors: エラーを含むページビュー
アラート通知先の設定
アラートが発生した際の通知先として、以下のような方法を設定できます:
- Email:メール通知
- Slack:Slackチャネルへの通知
- PagerDuty:PagerDutyへのインシデント作成
- Webhook:カスタムWebhook
- OpsGenie:OpsGenieへの通知
- ServiceNow:ServiceNowへのインシデント作成
アラート条件の設定要素
- Threshold(閾値): アラートをトリガーする値
- Duration(期間): 閾値を超えた状態が継続する時間
- Priority(優先度): Critical(重大)またはWarning(警告)
- Violation time limit:アラート違反状態が自動的にクローズされるまでの時間
まとめ
本記事では、New Relicについて、基本的な概要から主な機能、価格プラン、Railsアプリケーションへの導入手順、さらにNRQLやアラート設定までを一通り紹介しました。
New Relicは、APMを中心に、アプリケーション・インフラ・ログ・ブラウザといった複数のレイヤーを横断して可視化できる点が特徴です。
これにより、パフォーマンス低下やエラー発生時に、影響範囲や原因を把握しやすくなります。
また、Railsアプリケーションでは、コントローラーやデータベース、バックグラウンドジョブ、外部サービスなど、日常的な運用で重要となるポイントを自動的に計測でき、比較的少ない設定で監視を開始できる点も紹介しました。
加えて、NRQLを用いることで、収集されたデータを柔軟に分析し、ダッシュボードやアラート条件として活用できることから、運用状況に応じた監視設計が可能です。
本記事がNew Relicの全体像や、Rails環境での利用イメージを把握する一助となれば幸いです。
