ここでは、New Relic の Java エージェントで カスタムインスツルメンテーションを行う際のトラブルシューティングを紹介します。
UIオプション
New RelicのUIを使用して、 Custom Instrumentation Editorでインスツルメンテーションルールを定義するか、Javaアプリの Settings でXMLファイルを編集することができます。
Java アプリのみ: New Relic UI から直接 XML ファイルを編集するには、以下の手順に従います。 ****one.newrelic.com > APM> (select a Java app)> Settings> Live Instrumentation にアクセスします。ここから以下のことができます。
- サンプルXMLファイルのダウンロード
- 既存のXMLファイルを選択して編集します。
- 楽器の履歴を検索します。
スレッドプロファイラでのネストされたトランザクション
カスタムインストルメンテーションは、ネストされたトランザクションに役立ちます。たとえば、スレッドプロファイラーでは、 許可されていないインストルメンテーションは、許容できないオーバーヘッドが発生する可能性があるため、インストルメントできません。ただし、これらのメソッドの子は通常、インストルメント化できます。
one.newrelic.com > APM> (select an app)> Events> Thread profiler: メソッドが灰色に表示されている場合(Instrumentation not allowed )、スレッドプロファイルツリーを展開して、インスツルメンテーション可能なネストされたトランザクション(白色)を探してみてください。
インストゥルメントできるメソッドを特定するには、適切なメソッドが見つかるまでスレッドプロファイルのツリーを展開します。
- one.newrelic.com > APM> (select an app)> Events> Thread profiler にアクセスします。
- 適切な方法が見つかるまで、スレッドプロファイルのツリーを拡張します。
- 標準的な手順 に沿って、カスタム機器を定義し、展開する。
クラスとメソッド
Java エージェントのカスタムインスツルメンテーションのトラブルシューティングでは、 ポイントカット
の情報を newrelic.yml
設定ファイルと ログファイル の確認メッセージを比較してください。クラスとメソッドが一致していることを確認します。
次の例を見てみましょう。
# 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でトランザクションを分離
以下は、複数の メソッド
値を持つポイントカットの例です。 nameTransaction
は、APM Transactions breakdown table のセグメントとしてではなく、独立したトランザクションとしてメソッドを分離するために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 を参照してください。