New Relic

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 install

3. 設定ファイルの作成(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 s

6. 疎通確認

「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 ago

2. エラー率の計算

SELECT percentage(count(*), WHERE error IS true) FROM Transaction SINCE 1 day ago

3. 特定のコントローラーアクションのパフォーマンス

SELECT average(duration), count(*) FROM Transaction 
WHERE name = 'Controller/users/index' 
SINCE 1 week ago 
FACET appName

4. スループット(リクエスト数/分)

SELECT rate(count(*), 1 minute) FROM Transaction 
SINCE 30 minutes ago 
TIMESERIES

5. データベースクエリの実行時間トップ10

SELECT average(duration) FROM DatabaseQuery 
SINCE 1 hour ago 
FACET query 
LIMIT 10

6. HTTPステータスコード別のリクエスト数

SELECT count(*) FROM Transaction 
SINCE 1 day ago 
FACET httpResponseCode 
WHERE httpResponseCode IS NOT NULL

7. 外部サービス呼び出しの監視

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環境での利用イメージを把握する一助となれば幸いです。

役に立ったらシェアしていただけると嬉しいです
  • URLをコピーしました!
  • URLをコピーしました!
目次