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 エージェントをダウンロードします:
# ダウンロード用ディレクトリの作成
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
を編集します:
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オプション
# 📍 基本形式(最小構成)
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 の場合、起動コマンドにエージェントを指定するだけで監視が開始されます:
java -javaagent:/opt/newrelic/newrelic.jar \
-jar myapp.jar
環境変数での設定も可能です:
export JAVA_TOOL_OPTIONS="-javaagent:/opt/newrelic/newrelic.jar"
java -jar myapp.jar
Tomcat での設定
Tomcat を使用している場合、catalina.sh
または setenv.sh
にJVMオプションを追加します:
# setenv.sh
JAVA_OPTS="$JAVA_OPTS -javaagent:/opt/newrelic/newrelic.jar"
監視データの確認
New Relic UI でのデータ確認
エージェント導入後、数分でNew Relic のダッシュボードにデータが表示されます。確認できる主要な情報は以下の通りです:
- 概要: アプリケーションの全体的なパフォーマンス
- トランザクション: 各エンドポイントの処理時間
- データベース: SQLクエリの実行時間
- エラー: 発生したエラーとその詳細
基本的なメトリクス
自動的に収集される基本メトリクスには以下があります:
- アプリケーションレスポンス時間
- スループット(1分あたりのリクエスト数)
- エラー率
- Apdex スコア(ユーザー満足度指標)
よくある問題と解決方法
エージェントが動作しない場合
- ライセンスキーの確認: 正しいキーが設定されているか確認
- ファイルパスの確認: newrelic.jar のパスが正しいか確認
- ネットワーク接続: New Relic への接続が可能か確認
- ログの確認:
logs/newrelic_agent.log
でエラーを確認
パフォーマンスへの影響を最小化する設定
本番環境でのオーバーヘッドを抑えるための基本設定:
common: &default_settings
transaction_tracer:
transaction_threshold: 2.0 # 2秒以上のトランザクションのみ記録
error_collector:
max_stack_trace_lines: 30 # スタックトレースの行数制限
セキュリティ設定
データベースクエリや HTTP パラメータに含まれる機密情報を保護するための設定:
common: &default_settings
transaction_tracer:
record_sql: obfuscated # SQLパラメータを難読化
capture_params: false # HTTPパラメータをキャプチャしない
まとめ
Java アプリケーションでの New Relic APM 導入は、エージェントファイルのダウンロードと JVM オプションの追加という簡単な手順で完了します。設定後は自動的にアプリケーションのパフォーマンス情報が収集され、New Relic のダッシュボードで確認できます。
初期設定では基本的な監視が開始されるので、まずはデフォルト設定でデータ収集を開始し、必要に応じて詳細設定を調整することをおすすめします。
高度な活用例
ビジネスメトリクスの実装
New Relic APIを使用してカスタムメトリクスを送信する実装例です。
@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週間)
- カナリアリリース(全トラフィックの5-10%)
- 段階的な本番展開(25% → 50% → 100%)
- 24時間の監視期間とロールバック準備
設定パラメータ完全リファレンス
JVMシステムプロパティ一覧表
JVMパラメータとして -D
オプションで指定できる New Relic 関連のシステムプロパティです。
パラメータ | 説明 | デフォルト値 | 例 |
---|---|---|---|
newrelic.config.file | 設定ファイル(newrelic.yml)のパス | エージェントと同じディレクトリ | -Dnewrelic.config.file=/opt/newrelic/newrelic.yml |
newrelic.config.license_key | New 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.enabled | AI監視機能(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_KEY | license_key | ライセンスキー(必須) | export NEW_RELIC_LICENSE_KEY="abc123..." |
NEW_RELIC_APP_NAME | app_name | アプリケーション名(必須) | export NEW_RELIC_APP_NAME="My Java App" |
NEW_RELIC_AGENT_ENABLED | agent_enabled | エージェント有効化 | export NEW_RELIC_AGENT_ENABLED=true |
NEW_RELIC_LOG_LEVEL | log_level | ログレベル | export NEW_RELIC_LOG_LEVEL=debug |
NEW_RELIC_DISTRIBUTED_TRACING_ENABLED | distributed_tracing.enabled | 分散トレーシング | export NEW_RELIC_DISTRIBUTED_TRACING_ENABLED=true |
NEW_RELIC_HIGH_SECURITY | high_security | セキュリティ強化モード | export NEW_RELIC_HIGH_SECURITY=true |
NEW_RELIC_TRANSACTION_TRACER_ENABLED | transaction_tracer.enabled | トランザクション追跡 | export NEW_RELIC_TRANSACTION_TRACER_ENABLED=false |
NEW_RELIC_ERROR_COLLECTOR_ENABLED | error_collector.enabled | エラー収集 | export NEW_RELIC_ERROR_COLLECTOR_ENABLED=true |
NEW_RELIC_BROWSER_MONITORING_AUTO_INSTRUMENT | browser_monitoring.auto_instrument | ブラウザ監視 | export NEW_RELIC_BROWSER_MONITORING_AUTO_INSTRUMENT=false |
NEW_RELIC_SPAN_EVENTS_ENABLED | span_events.enabled | スパンイベント | export NEW_RELIC_SPAN_EVENTS_ENABLED=true |
NEW_RELIC_APPLICATION_LOGGING_ENABLED | application_logging.enabled | ログ転送 | export NEW_RELIC_APPLICATION_LOGGING_ENABLED=true |
NEW_RELIC_AI_MONITORING_ENABLED | ai_monitoring.enabled | AI監視(v8.9.0+) | export NEW_RELIC_AI_MONITORING_ENABLED=true |
NEW_RELIC_CAPTURE_PARAMS | capture_params | HTTPパラメータ収集 | export NEW_RELIC_CAPTURE_PARAMS=false |
NEW_RELIC_IGNORED_PARAMS | ignored_params | 除外パラメータ | export NEW_RELIC_IGNORED_PARAMS="password,ssn" |
newrelic.yml 主要設定パラメータ
セクション | パラメータ | 説明 | デフォルト値 | 重要度 |
---|---|---|---|---|
基本設定 | ||||
license_key | New Relicライセンスキー | なし | 🔴 必須 | |
app_name | アプリケーション名 | My Application | 🔴 必須 | |
agent_enabled | エージェント有効化 | true | 🟡 重要 | |
log_level | ログレベル (error/warn/info/debug) | info | 🟡 重要 | |
分散トレーシング | ||||
distributed_tracing | enabled | 分散トレーシング有効化 | true | 🟢 推奨 |
span_events | enabled | スパンイベント収集 | true | 🟢 推奨 |
span_events | max_samples_stored | スパンサンプル最大保存数 | 2000 | 🔵 調整可能 |
トランザクション監視 | ||||
transaction_tracer | enabled | トランザクション追跡 | true | 🟢 推奨 |
transaction_tracer | transaction_threshold | 追跡閾値(秒) | apdex_f | 🔵 調整可能 |
transaction_tracer | record_sql | SQL記録方式 | obfuscated | 🟡 重要 |
transaction_tracer | explain_enabled | 実行計画取得 | true | 🔵 調整可能 |
エラー監視 | ||||
error_collector | enabled | エラー収集 | true | 🟢 推奨 |
error_collector | capture_source | エラーソース情報 | true | 🔵 調整可能 |
error_collector | ignore_status_codes | 除外HTTPステータス | 404 | 🔵 調整可能 |
JVM監視 | ||||
jvm | enable_gc_time | GC時間監視 | true | 🟢 推奨 |
jvm | enable_heap_memory | ヒープメモリ監視 | true | 🟢 推奨 |
jvm | enable_non_heap_memory | 非ヒープメモリ監視 | true | 🔵 調整可能 |
セキュリティ | ||||
high_security | セキュリティ強化モード | false | 🟡 重要 | |
capture_params | HTTPパラメータ収集 | false | 🟡 重要 | |
ignored_params | 除外パラメータリスト | なし | 🟡 重要 | |
attributes | exclude | 除外属性リスト | なし | 🟡 重要 |
AI監視 (v8.9.0+) | ||||
ai_monitoring | enabled | AI監視機能 | false | 🔵 調整可能 |
ai_monitoring | content_recording.enabled | コンテンツ記録 | false | 🔵 調整可能 |
アプリケーションログ | ||||
application_logging | enabled | ログ転送機能 | true | 🟢 推奨 |
application_logging | forwarding.enabled | ログ転送 | true | 🟢 推奨 |
application_logging | metrics.enabled | ログメトリクス | true | 🔵 調整可能 |
設定の優先順位
設定は以下の順序で適用されます(上位が優先):
- 環境変数 (
NEW_RELIC_*
) - JVMシステムプロパティ (
-Dnewrelic.config.*
) - newrelic.yml設定ファイル
- エージェントデフォルト値
環境別設定例
# 本番環境
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 導入により、包括的なパフォーマンス監視と継続的な最適化を実現できます。適切な設定と運用により、高品質なアプリケーション体験を継続的に提供し、ビジネス価値の向上を支援します。
関連記事