Java アプリケーション向け New Relic APM 設定ガイド

Java アプリケーションでの New Relic APM 導入は、アプリケーションのパフォーマンスを詳細に監視するソリューションです。Java エージェントを使用することで、アプリケーションのレスポンス時間、エラー率、データベースクエリなどを自動的に追跡できます。

この記事では、Java 環境での New Relic APM エージェントの基本的な導入手順と設定方法について説明します。

Java エージェントの概要

New Relic Java エージェントは、既存のJavaアプリケーションにコード変更なしで監視機能を追加できるツールです。JVM レベルで動作するため、Spring Boot、Spring Framework、Hibernate などの主要なフレームワークを自動的に監視対象とします。

エージェントは以下の情報を自動的に収集します:

  • HTTP リクエストの処理時間
  • データベースクエリの実行時間
  • エラーとスタックトレース
  • JVM のメモリ使用量とガベージコレクション

事前準備

New Relic APM for Java 設定の全体像

Javaアプリケーションへの New Relic APM 導入は、以下の4つのステップで行います。まずは全体の流れを把握してから詳細に進みましょう

システム要件の確認

Java エージェントを導入する前に、以下の要件を確認してください:

  • Java 8 以降(Java 11 以降を推奨)
  • Oracle JDK、OpenJDK、Amazon Corretto のいずれかを使用
  • 追加メモリ: 通常 64-128MB
  • CPU オーバーヘッド: 1-3% 程度

New Relic アカウントの準備

New Relic のアカウント作成とライセンスキーの取得が必要です。アカウント作成後、「APM & Services」から新しいアプリケーションを追加し、Java を選択してライセンスキーを取得してください。

エージェントのダウンロード

New Relic 公式サイトから Java エージェントをダウンロードします:

bash
# ダウンロード用ディレクトリの作成
mkdir -p /opt/newrelic
cd /opt/newrelic

# エージェントのダウンロード
curl -O https://download.newrelic.com/newrelic/java-agent/newrelic-agent/current/newrelic-java.zip
unzip newrelic-java.zip

基本設定

設定ファイルの編集

ダウンロードしたファイルに含まれる newrelic.yml を編集します:

yaml
common: &default_settings
  license_key: 'YOUR_LICENSE_KEY_HERE'
  agent_enabled: true
  app_name: 'My Java Application'

production:
  <<: *default_settings
  
development:
  <<: *default_settings
  log_level: debug

YOUR_LICENSE_KEY_HERE の部分を、取得したライセンスキーに置き換えてください。

New Relic エージェント有効化の仕組み

Java エージェントは「JVM の起動時」に組み込む必要があります。アプリが動作してからでは追加できないので、起動コマンドで指定します。

基本的なJVMオプション

bash
# 📍 基本形式(最小構成)
java -javaagent:/opt/newrelic/newrelic.jar \
     -jar your-application.jar

# 📍 設定ファイル指定版(推奨)
java -javaagent:/opt/newrelic/newrelic.jar \
     -jar your-application.jar

# 📍 Windows環境の例
java -javaagent:C:\newrelic\newrelic.jar ^
     -Dnewrelic.config.file=C:\newrelic\newrelic.yml ^
     -jar your-application.jar

初心者向けの注意点

  • パスにスペースが含まれる場合は引用符で囲む: "C:\Program Files\newrelic\newrelic.jar"
  • -javaagentは必ず-jarに配置する
  • 設定ファイルのパスは絶対パスで指定するのが安全

フレームワーク別の設定例

Spring Boot アプリケーション

Spring Boot の場合、起動コマンドにエージェントを指定するだけで監視が開始されます:

bash
java -javaagent:/opt/newrelic/newrelic.jar \
     -jar myapp.jar

環境変数での設定も可能です:

bash
export JAVA_TOOL_OPTIONS="-javaagent:/opt/newrelic/newrelic.jar"
java -jar myapp.jar

Tomcat での設定

Tomcat を使用している場合、catalina.sh または setenv.sh にJVMオプションを追加します:

bash
# setenv.sh
JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/newrelic/newrelic.jar"

監視データの確認

New Relic UI でのデータ確認

エージェント導入後、数分でNew Relic のダッシュボードにデータが表示されます。確認できる主要な情報は以下の通りです:

  • 概要: アプリケーションの全体的なパフォーマンス
  • トランザクション: 各エンドポイントの処理時間
  • データベース: SQLクエリの実行時間
  • エラー: 発生したエラーとその詳細

基本的なメトリクス

自動的に収集される基本メトリクスには以下があります:

  • アプリケーションレスポンス時間
  • スループット(1分あたりのリクエスト数)
  • エラー率
  • Apdex スコア(ユーザー満足度指標)

よくある問題と解決方法

エージェントが動作しない場合

  1. ライセンスキーの確認: 正しいキーが設定されているか確認
  2. ファイルパスの確認: newrelic.jar のパスが正しいか確認
  3. ネットワーク接続: New Relic への接続が可能か確認
  4. ログの確認: logs/newrelic_agent.log でエラーを確認

パフォーマンスへの影響を最小化する設定

本番環境でのオーバーヘッドを抑えるための基本設定:

yaml
common: &default_settings
  transaction_tracer:
    transaction_threshold: 2.0  # 2秒以上のトランザクションのみ記録
  error_collector:
    max_stack_trace_lines: 30   # スタックトレースの行数制限

セキュリティ設定

データベースクエリや HTTP パラメータに含まれる機密情報を保護するための設定:

yaml
common: &default_settings
  transaction_tracer:
    record_sql: obfuscated  # SQLパラメータを難読化
  capture_params: false     # HTTPパラメータをキャプチャしない

まとめ

Java アプリケーションでの New Relic APM 導入は、エージェントファイルのダウンロードと JVM オプションの追加という簡単な手順で完了します。設定後は自動的にアプリケーションのパフォーマンス情報が収集され、New Relic のダッシュボードで確認できます。

初期設定では基本的な監視が開始されるので、まずはデフォルト設定でデータ収集を開始し、必要に応じて詳細設定を調整することをおすすめします。

高度な活用例

ビジネスメトリクスの実装

New Relic APIを使用してカスタムメトリクスを送信する実装例です。

java
@Service
public class BusinessMetricsService {
    
    @EventListener
    @Trace
    public void onOrderCompleted(OrderCompletedEvent event) {
        Map<String, Object> attributes = new HashMap<>();
        attributes.put("order.value", event.getOrderValue());
        attributes.put("customer.segment", event.getCustomerSegment());
        attributes.put("product.category", event.getProductCategory());
        attributes.put("payment.method", event.getPaymentMethod());
        
        // 売上メトリクス
        NewRelic.recordMetric("Business/Revenue/Total", event.getOrderValue());
        NewRelic.recordMetric("Business/Orders/Completed", 1);
        
        // カテゴリ別売上
        String categoryMetric = "Business/Revenue/Category/" + event.getProductCategory();
        NewRelic.recordMetric(categoryMetric, event.getOrderValue());
        
        // カスタムイベントの送信
        NewRelic.recordCustomEvent("OrderCompleted", attributes);
    }
    
    @Scheduled(fixedRate = 60000) // 1分間隔
    @Trace
    public void collectActiveUsers() {
        int activeUsers = userSessionService.getActiveUserCount();
        NewRelic.recordMetric("Business/Users/Active", activeUsers);
        
        // ユーザーセグメント別の集計
        Map<String, Integer> segmentCounts = userSessionService.getActiveUsersBySegment();
        segmentCounts.forEach((segment, count) -> {
            String metricName = "Business/Users/Active/Segment/" + segment;
            NewRelic.recordMetric(metricName, count);
        });
    }
    
    @EventListener
    @Trace
    public void onUserRegistration(UserRegistrationEvent event) {
        Map<String, Object> attributes = new HashMap<>();
        attributes.put("user.source", event.getRegistrationSource());
        attributes.put("user.plan", event.getSubscriptionPlan());
        attributes.put("user.country", event.getCountry());
        
        NewRelic.recordMetric("Business/Users/Registered", 1);
        NewRelic.recordCustomEvent("UserRegistered", attributes);
        
        // 獲得チャネル別の追跡
        String sourceMetric = "Business/Users/Acquisition/" + event.getRegistrationSource();
        NewRelic.recordMetric(sourceMetric, 1);
    }
}

本番環境でのデプロイ

段階的なデプロイメント戦略により、New Relic エージェントの本番環境導入リスクを最小化します。カナリアデプロイやブルーグリーンデプロイメントと組み合わせることで、安全な監視システムの構築を実現します。

デプロイメント手順:

  1. ステージング環境での十分なテスト(最低1週間)
  2. カナリアリリース(全トラフィックの5-10%)
  3. 段階的な本番展開(25% → 50% → 100%)
  4. 24時間の監視期間とロールバック準備

設定パラメータ完全リファレンス

JVMシステムプロパティ一覧表

JVMパラメータとして -D オプションで指定できる New Relic 関連のシステムプロパティです。

パラメータ説明デフォルト値
newrelic.config.file設定ファイル(newrelic.yml)のパスエージェントと同じディレクトリ-Dnewrelic.config.file=/opt/newrelic/newrelic.yml
newrelic.config.license_keyNew Relicライセンスキーなし (必須)-Dnewrelic.config.license_key=abc123...
newrelic.config.app_nameアプリケーション名My Application-Dnewrelic.config.app_name="My Java App"
newrelic.config.agent_enabledエージェント有効/無効true-Dnewrelic.config.agent_enabled=false
newrelic.config.distributed_tracing.enabled分散トレーシング有効化true-Dnewrelic.config.distributed_tracing.enabled=true
newrelic.config.log_levelログレベルinfo-Dnewrelic.config.log_level=debug
newrelic.config.audit_mode監査モード(データ送信せず)false-Dnewrelic.config.audit_mode=true
newrelic.config.high_securityセキュリティ強化モードfalse-Dnewrelic.config.high_security=true
newrelic.config.transaction_tracer.enabledトランザクショントレーサーtrue-Dnewrelic.config.transaction_tracer.enabled=false
newrelic.config.error_collector.enabledエラーコレクターtrue-Dnewrelic.config.error_collector.enabled=false
newrelic.config.browser_monitoring.auto_instrumentブラウザ監視自動挿入true-Dnewrelic.config.browser_monitoring.auto_instrument=false
newrelic.config.span_events.enabledスパンイベント収集true-Dnewrelic.config.span_events.enabled=false
newrelic.config.application_logging.enabledアプリケーションログ転送true-Dnewrelic.config.application_logging.enabled=false
newrelic.config.ai_monitoring.enabledAI監視機能(v8.9.0+)false-Dnewrelic.config.ai_monitoring.enabled=true
newrelic.config.strip_exception_messages.enabled例外メッセージ除去false-Dnewrelic.config.strip_exception_messages.enabled=true

環境変数一覧表

環境変数は最高優先度で設定を上書きします。

環境変数対応するYML設定説明
NEW_RELIC_LICENSE_KEYlicense_keyライセンスキー(必須)export NEW_RELIC_LICENSE_KEY="abc123..."
NEW_RELIC_APP_NAMEapp_nameアプリケーション名(必須)export NEW_RELIC_APP_NAME="My Java App"
NEW_RELIC_AGENT_ENABLEDagent_enabledエージェント有効化export NEW_RELIC_AGENT_ENABLED=true
NEW_RELIC_LOG_LEVELlog_levelログレベルexport NEW_RELIC_LOG_LEVEL=debug
NEW_RELIC_DISTRIBUTED_TRACING_ENABLEDdistributed_tracing.enabled分散トレーシングexport NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true
NEW_RELIC_HIGH_SECURITYhigh_securityセキュリティ強化モードexport NEW_RELIC_HIGH_SECURITY=true
NEW_RELIC_TRANSACTION_TRACER_ENABLEDtransaction_tracer.enabledトランザクション追跡export NEW_RELIC_TRANSACTION_TRACER_ENABLED=false
NEW_RELIC_ERROR_COLLECTOR_ENABLEDerror_collector.enabledエラー収集export NEW_RELIC_ERROR_COLLECTOR_ENABLED=true
NEW_RELIC_BROWSER_MONITORING_AUTO_INSTRUMENTbrowser_monitoring.auto_instrumentブラウザ監視export NEW_RELIC_BROWSER_MONITORING_AUTO_INSTRUMENT=false
NEW_RELIC_SPAN_EVENTS_ENABLEDspan_events.enabledスパンイベントexport NEW_RELIC_SPAN_EVENTS_ENABLED=true
NEW_RELIC_APPLICATION_LOGGING_ENABLEDapplication_logging.enabledログ転送export NEW_RELIC_APPLICATION_LOGGING_ENABLED=true
NEW_RELIC_AI_MONITORING_ENABLEDai_monitoring.enabledAI監視(v8.9.0+)export NEW_RELIC_AI_MONITORING_ENABLED=true
NEW_RELIC_CAPTURE_PARAMScapture_paramsHTTPパラメータ収集export NEW_RELIC_CAPTURE_PARAMS=false
NEW_RELIC_IGNORED_PARAMSignored_params除外パラメータexport NEW_RELIC_IGNORED_PARAMS="password,ssn"

newrelic.yml 主要設定パラメータ

セクションパラメータ説明デフォルト値重要度
基本設定
license_keyNew Relicライセンスキーなし🔴 必須
app_nameアプリケーション名My Application🔴 必須
agent_enabledエージェント有効化true🟡 重要
log_levelログレベル (error/warn/info/debug)info🟡 重要
分散トレーシング
distributed_tracingenabled分散トレーシング有効化true🟢 推奨
span_eventsenabledスパンイベント収集true🟢 推奨
span_eventsmax_samples_storedスパンサンプル最大保存数2000🔵 調整可能
トランザクション監視
transaction_tracerenabledトランザクション追跡true🟢 推奨
transaction_tracertransaction_threshold追跡閾値(秒)apdex_f🔵 調整可能
transaction_tracerrecord_sqlSQL記録方式obfuscated🟡 重要
transaction_tracerexplain_enabled実行計画取得true🔵 調整可能
エラー監視
error_collectorenabledエラー収集true🟢 推奨
error_collectorcapture_sourceエラーソース情報true🔵 調整可能
error_collectorignore_status_codes除外HTTPステータス404🔵 調整可能
JVM監視
jvmenable_gc_timeGC時間監視true🟢 推奨
jvmenable_heap_memoryヒープメモリ監視true🟢 推奨
jvmenable_non_heap_memory非ヒープメモリ監視true🔵 調整可能
セキュリティ
high_securityセキュリティ強化モードfalse🟡 重要
capture_paramsHTTPパラメータ収集false🟡 重要
ignored_params除外パラメータリストなし🟡 重要
attributesexclude除外属性リストなし🟡 重要
AI監視 (v8.9.0+)
ai_monitoringenabledAI監視機能false🔵 調整可能
ai_monitoringcontent_recording.enabledコンテンツ記録false🔵 調整可能
アプリケーションログ
application_loggingenabledログ転送機能true🟢 推奨
application_loggingforwarding.enabledログ転送true🟢 推奨
application_loggingmetrics.enabledログメトリクスtrue🔵 調整可能

設定の優先順位

設定は以下の順序で適用されます(上位が優先):

  1. 環境変数 (NEW_RELIC_*)
  2. JVMシステムプロパティ (-Dnewrelic.config.*)
  3. newrelic.yml設定ファイル
  4. エージェントデフォルト値

環境別設定例

bash
# 本番環境
export NEW_RELIC_LICENSE_KEY="your_license_key"
export NEW_RELIC_APP_NAME="MyApp (Production)"
export NEW_RELIC_LOG_LEVEL="warn"
export NEW_RELIC_HIGH_SECURITY="true"

# 開発環境
export NEW_RELIC_LICENSE_KEY="your_license_key"  
export NEW_RELIC_APP_NAME="MyApp (Development)"
export NEW_RELIC_LOG_LEVEL="debug"
export NEW_RELIC_AGENT_ENABLED="false"  # 開発時は無効化も可能

Java アプリケーションでの New Relic APM 導入により、包括的なパフォーマンス監視と継続的な最適化を実現できます。適切な設定と運用により、高品質なアプリケーション体験を継続的に提供し、ビジネス価値の向上を支援します。


関連記事