ここでは、New Relic の Java エージェントで カスタムインスツルメンテーションを行う際のトラブルシューティングを紹介します。
UIオプション
New RelicのUIを使用して、カスタムインストゥルメンテーション エディターでインストゥルメンテーション ルールを定義したり、Java アプリの Settings を介して XML ファイルを編集したりできます。
Java apps only: New Relic UI から XML ファイルを直接編集するには、 one.newrelic.com > All capabilities > APM & services > (select a Java app) > Settings > Live Instrumentationに移動します。 ここから次のことができます:
- サンプルXMLファイルのダウンロード
- 既存のXMLファイルを選択して編集します。
- 楽器の履歴を検索します。
スレッドプロファイラでのネストされたトランザクション
カスタム インストルメンテーションは、ネストされたトランザクションに役立ちます。スレッド プロファイラーでは、横に灰色のアイコンが付いているメソッドはインストルメント化できません。ただし、通常、これらのメソッドの子はインストルメント化できます。
one.newrelic.com > All capabilities > APM & services > (select an app) > Events > Thread profiler: 灰色のアイコンは、インストゥルメントできないことを意味します。 白いアイコンは、インストルメントされていないが、インストゥルメント化できることを意味します。 青いアイコンは現在インストゥルメントされていることを意味します。
インストゥルメントできるメソッドを特定するには、適切なメソッドが見つかるまでスレッドプロファイルのツリーを展開します。
one.newrelic.com > All capabilities > APM & services > (select an app) > 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
値を持つポイントカットの例です。 メソッドを APM Transactions内訳表のセグメントとしてではなく、個別のトランザクションとして分離するために、 nameTransaction
が XML に追加されました。
# 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 を参照してください。