RelicのJavaエージェントは、カスタムインストゥルメンテーションに複数のオプションを提供しています。したオプションの1つとして、JavaエージェントAPIの@Trace、@TraceLambdaまたは@TraceByReturnTypeアノテーションをご利用のアプリケーションコードに追加できます。このドキュメントでは、アノテーションの利用方法を解説しています。重要アノテーションを利用するには、ソースコードを修正する必要があります。ソースコードの修正を希望しない、またはできない場合は、カスタムインストゥルメンテーションでその他のインストゥルメンテーションオプションを参照してください。アノテーションはデフォルトで有効になっていますデフォルトでは、構成設定enable_custom_tracingのJavaエージェントはtrueに設定されています。これは、@Traceアノテーションを機能させる上で必須の設定です。この設定は、デフォルトではnewrelic.ymlに含まれていません。false(2つのスペースで始まる)をnewrelic.ymlのcommonセクションで設定します。@Trace@Traceでメソッドにアノテーションを付けると、Javaエージェントにそのメソッドの測定が必要であることを伝えます。メソッドの呼び出しをカスタムトレースとして追加するには、メソッドに@Traceアノテーションを追加します。これらのすべてのアノテーションを含むものとして、classpathにnewrelic-api.jarが表示されることを確認してください。新規トランザクションを作成するトランザクションが表示されず、新規トランザクションを開始したい場合は、@Traceアノテーションにdispatcher=trueを含めます。task}コピートランザクションに詳細を追加するトランザクショントレースにインストゥルメントされていない時間のブロックが大量にあり、トレース内により多くのメソッドを含めたい場合は、パラメーターなしで@Traceアノテーションを使用できます。work}コピートランザクションをWebリクエストに変換するJavaエージェントAPIコールを使用してウェブブラウザトランザクションとしてバックグラウンドタスクレポートを作成するには、@Trace(dispatcher=true)でアノテーションを付けたメソッドで、次のコールを実行します。response)コピーこの引数は、newrelic-api.jarのRequestおよびResponseのインタフェースの実装です。重要RequestおよびResponseオブジェクトが既に存在している場合でも、このAPIコールを追加する必要があります。独自の@Traceアノテーションクラスを定義する独自の@Traceアノテーションクラスを定義する場合、newrelic-api.jarとの依存関係はありません。次に、エージェントを設定して、このアノテーションをnewrelic.ymlのcommonセクションで使用します。com.test.Traceコピー@Traceのプロパティ@Traceアノテーションは、以下のプロパティに対応しています。ディスパッチャータイプ:ブール値デフォルト:falsetrueの場合、トランザクションが既に進行中でなければ、エージェントはこの@Traceアノテーションでメソッドに達した際にトランザクションを開始します。トランザクションが既に進行中であれば、新しく作成されるのではなく、進行中のトランザクションにこのアノテーションのメソッドが含まれます。false(デフォルト)の場合、@Traceアノテーションに達する前にエージェントがトランザクションを開始していない場合、メトリクスは記録されません。非同期タイプ:ブール値デフォルト:falsetrueの場合、このメソッドは非同期としてマークされ、エージェントが既存のトランザクションとリンクする場合はこのメソッドをトレースします。例:@Trace(async=true)コピーfalse(デフォルト)の場合、メソッドは非同期としてマークされません。他の@Traceアノテーションが存在し、メソッドが非同期に実行していない場合でも、トレースはされます。metricNameタイプ:文字列デフォルト:(なし)このプロパティは、トランザクショントレースとエラーレポートに影響します。デフォルトでは、メトリック名にはクラス名に続いてメソッド名が含まれます。クラスの次にメソッド名が続くことを希望しない場合、このプロパティを使用してメトリック名を変更できます。metricNameを@Trace(metricName="YourMessageHere")のように設定した場合、このメソッドに費やした時間はすべてのトランザクショントレースで、YourMessageHereとして表示されます。dispatcher=true)のように設定した場合、トランザクション名はAPMのTransactionsページでYourMessageHereと表示されますが、このメソッドで費やした時間はすべてのトランザクショントレースで、YourMessageHereとして表示されません。次の例を見てみましょう。重要トランザクション名の末尾に角括弧[suffix]を使わないでください。Relicは名前から自動的に角括弧を除去します。代わりに、必要に応じて丸括弧(suffix)、またはその他の記号を使ってください。excludeFromTransactionTraceタイプ:ブール値デフォルト:falsetrueの場合、このメソッドはトランザクショントレースから除外されます。エージェントは、依然としてこのメソッドのメトリクスを収集します。次の例を見てみましょう。@Trace(excludeFromTransactionTrace=true)コピーリーフタイプ:ブール値デフォルト:falseリーフトレーサーには、子トレーサーがありません。これは、トレーサーの実行時に他のトレースポイントに遭遇する場合でも、すべての時間をトレーサーに帰属させたい時に便利です。多くの場合、データベーストレーサーはリーフとして機能するため、インストゥルメントされた外部コールが行われた場合でも、すべての時間はデータベースアクティビティに帰属します。次の例を見てみましょう。@Trace(leaf=true)コピーリーフトレーサーがトランザクショントレースに参加しない場合、エージェントは少ないオーバーヘッドでトレーサーを作成できます。次の例を見てみましょう。leaf=true)コピー@TraceLambdaこの機能はデフォルトでは無効になっており、明示的に有効にして(例:-Dnewrelic.config.instrumentation.trace_lambda.enabled=true)アノテーションを有効にします。同等の環境変数はNEW_RELIC_INSTRUMENTATION_TRACE_LAMBDA_ENABLEDです。トランザクショントレースにインストゥルメントされていない時間のブロックが大量にあり、トレース内にラムダ式を含める場合は、パラメーターなしで@TraceLambdaアノテーションを使用できます。work}コピーラムダ式は、コンパイル後にクラスを含む静的メソッドになります。デフォルトで、アノテーションパターンに一致する@TraceLambdaアノテーションでマークされたクラス内の静的メソッドは、@Traceアノテーションでマークされます。@TraceLambdaのプロパティ@TraceLambdaアノテーションは、以下のプロパティに対応しています。パターンタイプ:文字列デフォルト:^\$?(lambda\|anonfun)\$(?\<name\>.*)patternを@TraceLambda(pattern="YourPattern")のように設定した場合、マークされたクラスのメソッド名が正規表現パターンYourPatternと照合されます。一致した場合、関連メソッドは@Traceアノテーションでマークされます。次の例を見てみましょう。@TraceLambda(pattern="YourPattern")コピーincludeNonstaticタイプ:ブール値デフォルト:falsetrueの場合、マークされたクラスの非静的メソッドは、インストゥルメンテーションのパターンに対する評価の対象となります。次の例を見てみましょう。@TraceLambda(includeNonstatic="true")コピー@TraceByReturnTypeトレース内に特定の戻り値の型のメソッドを含めるには、@TraceByReturnTypeアノテーションを使用して、戻り値の型をプロパティとして渡すクラスをマークします。アノテーション付きクラスのメソッドは、指定された戻り値の型の1つに一致し、@Traceアノテーションでマークされます。...}コピー@TraceByReturnTypeのプロパティ@TraceByReturnTypeアノテーションは、以下のプロパティに対応しています。traceReturnTypesタイプ:List<Class>デフォルト:空のリストtraceReturnTypesを@TraceByReturnType(traceReturnTypes={String.class})のように設定した場合、マークされたクラスのメソッドの戻り値の型がString.classと照合されます。一致したすべてのメソッドは、@Traceアノテーションでマークされます。次の例を見てみましょう。}}コピーパフォーマンスに関する考慮事項JavaエージェントがJVMに存在する場合、アノテーション付きメソッドにコードを投入します。パフォーマンスヒットは、データベースまたはウェブサービスコールなどの重い操作ではほとんど影響はありませんが、アクセサと呼ばれる1秒に数千回など、頻繁に呼び出されるメソッドでは顕著です。注意すべてのメソッドをインストゥルメントしないでください。パフォーマンスが低下し、メトリクスのグループ化問題につながる可能性があります。追加API機能JavaエージェントAPIとその機能の詳細については、JavaエージェントAPI入門を参照してください。