ここでは、New Relic の Java エージェントで カスタムインスツルメンテーションを行う際のトラブルシューティングを紹介します。
UIオプション
New RelicのUIを使用して、 Custom Instrumentation Editorでインスツルメンテーションルールを定義するか、Javaアプリの Settings でXMLファイルを編集することができます。
Java アプリのみ: New Relic UI から XML ファイルを直接編集するには: ****one.newrelic.com > APM & services > (Java アプリを選択) > Settings > Live Instrumentationに移動します。ここから、次のことができます。
- サンプルXMLファイルのダウンロード
- 既存のXMLファイルを選択して編集します。
- 楽器の履歴を検索します。
スレッドプロファイラでのネストされたトランザクション
カスタム インストルメンテーションは、ネストされたトランザクションに役立ちます。スレッド プロファイラーでは、横に灰色のアイコンが付いているメソッドはインストルメント化できません。ただし、通常、これらのメソッドの子はインストルメント化できます。
one.newrelic.com > APM & services > (アプリを選択) > Events > Thread profiler:グレーのアイコンはインストルメント化できないことを意味します。白いアイコンは、インストルメント化されていませんが、インストルメント化できることを意味します。青いアイコンは、現在インストルメント化されていることを意味します。
インストゥルメントできるメソッドを特定するには、適切なメソッドが見つかるまでスレッドプロファイルのツリーを展開します。
- one.newrelic.com > APM & services > (アプリを選択) > Events > Thread profilerに移動します。
- 適切な方法が見つかるまで、スレッドプロファイルのツリーを拡張します。
- 標準的な手順 に沿って、カスタム機器を定義し、展開する。
クラスとメソッド
Java エージェントのカスタム インストルメンテーションのトラブルシューティングを行うときは、 newrelic.yml
構成ファイルのpointcut
情報とログ ファイルの確認メッセージを比較してください。クラスとメソッドが一致していることを確認します。
次の例を見てみましょう。
# This is a pointcut example in your newrelic.yml config file:<pointcut transactionStartPoint="true"> <className>com.example.class.name</className> <method> <name>exampleMethod</name> </method></pointcut>
これが適切にインスツルメンテーションされていれば、ログファイルに以下のようなメッセージが表示されるかもしれません。
# This is a confirmation example in your log file:Oct 1, 2015 10:58:52 -0700 [9805 1] com.newrelic FINER: Instrumenting com/example/class/name
ログファイルのクラスとメソッドがカスタム計測器の値と一致しない場合は、見直して必要に応じて調整してください。(カスタム計装のロードが成功したか失敗したかの確認が、ログファイルに表示されない場合もあります)。
XMLでトランザクションを分離
複数のmethod
値を持つポイントカットの例を次に示します。nameTransaction
が XML に追加され、APMトランザクション内訳表のセグメントとしてではなく、個別のトランザクションとしてメソッドを分割しました。
# This is a pointcut example to identify a specific transaction with XML custom instrumentation:<pointcut> <nameTransaction/> <className>com.examplename.client.actionflow.impl.exampleActionFlow</className> <method> <name>requestNAME</name> <parameters> <type>boolean</type> </parameters> </method></pointcut>
非同期トランザクション
アプリケーションで非同期プロセスを使用している場合、Java APIを使用して非同期ワーカーアクティビティを親トランザクションに接続することができる場合があります。デフォルトでは、これらのトランザクションはリンクされません。詳細については、 Java asynchronous instrumentation を参照してください。