New Relicは、Webブラウザトランザクションと非Webトランザクション(バックグラウンドタスク)に関する情報を収集して報告します。通常、.NETエージェントは、アプリケーションコードを変更することなく、完全な情報を自動的に生成します。ただし、New Relicが フレームワークをサポートしていない場合は、カスタムインストルメンテーションを追加する必要があります。
New Relicは、メソッドトレーサーを使用してカスタムインストルメンテーションを実装します。メソッドトレーサーは、任意のクラスのメソッドに配置できるソフトウェアプローブです。 .NETエージェントは、拡張ディレクトリ内のすべてのXMLファイルからトレースするメソッドを定義するインストルメンテーションディレクティブをロードします。
このドキュメントでは、エージェントがすでにトランザクションを収集しているが、それらのトランザクションにさらに詳細を追加したい場合のインストルメンテーション作業について説明します。エージェントがトランザクションを自動的に作成していないときに作業をインストルメント化するには、「 XMLを介したトランザクションの作成」を参照してください。コードを属性で装飾することにより、詳細を追加してトランザクションを作成することもできます。
カスタムインストルメンテーションで詳細を追加
拡張ファイルは、インストルメンテーション要素内の多数のトレーサーファクトリを定義します。各トレーサーファクトリには、アセンブリを定義する一致要素、完全修飾クラス名、および一致するメソッド名が含まれています。新しいカスタムインストルメンテーションXMLファイルを定義するには:
.NETエージェントがすべてのXMLファイルを読み取り、そのインストルメンテーションセットを定義するために使用するextensionsディレクトリに新しい
.xml
ファイルを作成します。 .NET Frameworkエージェントの場合は、次の場所を使用します。C:\ProgramData\New Relic\.NET Agent\Extensions重要
.xmlファイルを
C:\Program Files\New Relic\.NET agent\Extensions
ディレクトリに置かないでください。カスタムインストルメンテーションが機能するには、ファイルがProgramData
ファイルの場所にある必要があります。配布されたxmlファイルを変更しないでください。これらのファイルは、エージェントがアップグレードされるたびに上書きされます。
このテンプレートを、サンプルを例として使用して作成したファイルにコピーします。これは2つのメソッドをインストルメントしますが、インストルメンテーションファイルにメソッドを追加できます。
ヒント
値
AssemblyName
、NameSpace.ClassName
、およびMethodName
は大文字と小文字が区別されます。<?xml version="1.0" encoding="utf-8"?><extension xmlns="urn:newrelic-extension"><instrumentation><!-- These methods appear in the transactions breakdown table and in transaction traces --><tracerFactory metricName="Category/Name"><match assemblyName="AssemblyName" className="NameSpace.ClassName"><exactMethodMatcher methodName="MethodName" /></match></tracerFactory><tracerFactory metricName="Category/Name2"><match assemblyName="AssemblyName" className="NameSpace.ClassName2"><exactMethodMatcher methodName="MethodName2" /></match></tracerFactory></instrumentation></extension>.xml
インストルメンテーションファイル をextension.xsd
に対して検証します。非IISアプリ(コンソールアプリやバックグラウンドプロセスなど):計測するメソッドを含めるには、 XMLを介してトランザクションを作成する必要もあります。トランザクションの外部でインストルメント化されたカスタムメソッドは、NewRelicに報告されません。
重要
.NETエージェントのバージョンが7.0以降の場合、これで手順は終了です。
.NETエージェントのバージョンが7.0未満の場合は、次の手順に進みます。
アプリがIISでホストされている場合は、IISを再起動します。
非IISアプリケーションの場合は、アプリケーションのホストプロセスまたはアプリケーション自体を再起動します。
重要
XMLカスタムインストルメンテーションを追加した後も一部のメソッドがトレースに表示されない場合は、 [MethodImpl(MethodImplOptions.NoInlining)]
を使用してそれらのメソッドのメソッドインライン化を無効にします。
トランザクションを無視する
カスタムインストルメンテーションファイルを使用して、トランザクションが報告されないようにすることができます。無視されたメソッドが呼び出されるたびに、.NETエージェントは親トランザクション全体を無視します。これは、 IgnoreTransaction()
を呼び出すのと同じです。
トランザクションを無視するには:
名前が
NewRelic.Agent.Core.Tracer.Factories.IgnoreTransactionTracerFactory
のtracerFactory
を追加します:<tracerFactory name="NewRelic.Agent.Core.Tracer.Factories.IgnoreTransactionTracerFactory"><match assemblyName="System.Web.Extensions" className="System.Web.Handlers.ScriptResourceHandler"><exactMethodMatcher methodName="Throw404" /></match></tracerFactory>
別のトランザクションで非同期作業を追跡する
場合によっては、 AsyncForceNewTransactionWrapper
インストルメンテーションを適用することで、非同期作業を個別のトランザクションとして追跡できます。
<tracerFactory name="AsyncForceNewTransactionWrapper"> <match assemblyName="AssemblyName" className="Namespace.ClassName"> <exactMethodMatcher methodName="MethodName" /> </match></tracerFactory>
非同期使用に関する考慮事項 | コメントコメント |
---|---|
計装法 | インストルメント化されたメソッドは、 |
リターンタイプ | インストルメントされたメソッドは |
属性インストルメンテーション | インストルメント化されたメソッドに属性インストルメンテーションを適用することはできません。 |
MyInstrumentation.xmlの例
この例では、2つのメソッドを計測し、別のメソッドを無視します。
Instrument
:
CustomInstrumentDemo.Controllers.FirstController.FirstExample()
Instrument
:
CustomInstrumentDemo.Controllers.SecondController.SecondExample()
Ignore
:
CustomInstrumentDemo.Controllers.SecondController.ThirdExample()
Instrument
:
CustomInstrumentDemo.Controllers.SecondController.FourthExample(int id, string name)
このカスタムインストルメンテーションスキームを実装するには、次のサンプルファイルとインストルメントされたメソッドを使用します。
名前の指標
トレーサーから作成されたメトリックは、一致したメソッドのクラス名とメソッド名を使用して名前が付けられます。この名前はmetricName
属性で上書きできます。 metricName
をCustom/
で始めます(たとえば、 metricName="Custom/OrderSubmissions"
)。
<!-- instruments MyCompany.Order.Submit() and creates a metric named Custom/OrderSubmissions --><tracerFactory metricName="Custom/OrderSubmissions"> <match assemblyName="MyCompany" className="MyCompany.Order"> <exactMethodMatcher methodName="Submit" /> </match></tracerFactory>
名前トランザクション
エージェントは、名前付けの優先度が最も高いトランザクションでトレーサーを使用してトランザクションに名前を付けます。
- Webトランザクションには、トランザクションの実行時に呼び出されるトレーサーに応じて、HTTPハンドラー、ASP名、MVCコントローラー名、またはWebサービス名を使用して名前を付けることができます。
- トランザクションに明示的に名前を付けるトレーサーのないバックグラウンドトランザクションは、単一のトランザクション名にロールアップされます。
transactionNamingPriority
属性を使用して、トレーサートランザクションの名前付けを優先するようにエージェントに指示します。有効な値は1
から7
です。ここで、 7
は1
から6
よりも優先されます。また、 metricName
属性はCustom/
で始まる必要があります(たとえば、 metricName="Custom/instance"
)。
<!-- instructs the agent to create a metric for MyControllerBase.Execute and to name the transaction using this tracer's metric name --><tracerFactory metricName="Custom/instance" transactionNamingPriority="7"> <match assemblyName="MyCompany" className="MyCompany.MyControllerBase"> <exactMethodMatcher methodName="Execute" /> </match></tracerFactory>
XSD検証
XMLインストルメンテーションファイルは、任意のXSDバリデーターを使用してXSDファイル( C:\ProgramData\New Relic\.NET Agent\Extensions\extension.xsd
にあります)と照合できます。
トラブルシューティング
.NETエージェントは、メソッドを書き換えるときに、ログメッセージをNewRelic.Profiler.####.log
( ####
はインストルメントされたプロセスのPID)に書き込みます。これは、カスタムインストルメンテーションが読み取られていること、および適切なメソッドがインストルメントされていることを確認するのに役立ちます。
ヒント
カスタムインストルメンテーションでtracerFactory
要素のname
属性を使用することは避けてください。詳細については、エージェントディレクトリのextension.xsd
スキーマファイルを確認してください。