• ログイン

本書は、お客様のご参考のために原文の英語版を機械翻訳したものです。

英語版と齟齬がある場合、英語版の定めが優先するものとします。より詳しい情報については、本リンクをご参照ください。

問題を作成する

XML(.NET)を介してトランザクションに詳細を追加する

New Relicは、Webブラウザトランザクションと非Webトランザクション(バックグラウンドタスク)に関する情報を収集して報告します。通常、.NETエージェントは、アプリケーションコードを変更することなく、完全な情報を自動的に生成します。ただし、New Relicが フレームワークをサポートしていない場合は、カスタムインストルメンテーションを追加する必要があります。

New Relicは、メソッドトレーサーを使用してカスタムインストルメンテーションを実装します。メソッドトレーサーは、任意のクラスのメソッドに配置できるソフトウェアプローブです。 .NETエージェントは、拡張ディレクトリ内のすべてのXMLファイルからトレースするメソッドを定義するインストルメンテーションディレクティブをロードします。

このドキュメントでは、エージェントがすでにトランザクションを収集しているが、それらのトランザクションにさらに詳細を追加したい場合のインストルメンテーション作業について説明します。エージェントがトランザクションを自動的に作成していないときに作業をインストルメント化するには、「 XMLを介したトランザクションの作成」を参照してください。コードを属性で装飾することにより、詳細を追加してトランザクションを作成することもできます。

カスタムインストルメンテーションで詳細を追加

拡張ファイルは、インストルメンテーション要素内の多数のトレーサーファクトリを定義します。各トレーサーファクトリには、アセンブリを定義する一致要素、完全修飾クラス名、および一致するメソッド名が含まれています。新しいカスタムインストルメンテーションXMLファイルを定義するには:

  1. .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. このテンプレートを、サンプルを例として使用して作成したファイルにコピーします。これは2つのメソッドをインストルメントしますが、インストルメンテーションファイルにメソッドを追加できます。

    ヒント

    AssemblyNameNameSpace.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>
  3. .xmlインストルメンテーションファイルextension.xsdに対して検証します。

  4. 非IISアプリ(コンソールアプリやバックグラウンドプロセスなど):計測するメソッドを含めるには、 XMLを介してトランザクションを作成する必要もあります。トランザクションの外部でインストルメント化されたカスタムメソッドは、NewRelicに報告されません。

  5. 重要

    .NETエージェントのバージョンが7.0以降の場合、これで手順は終了です。

    .NETエージェントのバージョンが7.0未満の場合は、次の手順に進みます。

  6. アプリがIISでホストされている場合は、IISを再起動します。

  7. 非IISアプリケーションの場合は、アプリケーションのホストプロセスまたはアプリケーション自体を再起動します。

重要

XMLカスタムインストルメンテーションを追加した後も一部のメソッドがトレースに表示されない場合は、 [MethodImpl(MethodImplOptions.NoInlining)]を使用してそれらのメソッドのメソッドインライン化を無効にします。

トランザクションを無視する

カスタムインストルメンテーションファイルを使用して、トランザクションが報告されないようにすることができます。無視されたメソッドが呼び出されるたびに、.NETエージェントは親トランザクション全体を無視します。これは、 IgnoreTransaction()を呼び出すのと同じです。

トランザクションを無視するには:

  1. カスタムインストルメンテーションを追加します
  2. 名前がNewRelic.Agent.Core.Tracer.Factories.IgnoreTransactionTracerFactorytracerFactoryを追加します:
<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>

非同期使用に関する考慮事項

コメント

計装法

インストルメント化されたメソッドは、 Task.RunTask.Factory.StartNew 、またはnew Thread()を使用して呼び出す必要があります。 awaitキーワードを使用して呼び出すことはできません。

リターンタイプ

インストルメントされたメソッドはasyncである必要はありません。ただし、 asyncの場合は、リターンタイプがTaskまたはTask<T>である必要があります。 voidリターンタイプを持つことはできません。

属性インストルメンテーション

インストルメント化されたメソッドに属性インストルメンテーションを適用することはできません。 [Transaction]または[Trace]属性で装飾することはできません。

MyInstrumentation.xmlの例

この例では、2つのメソッドを計測し、別のメソッドを無視します。

  • 楽器CustomInstrumentDemo.Controllers.FirstController.FirstExample()
  • 楽器CustomInstrumentDemo.Controllers.SecondController.SecondExample()
  • 無視するCustomInstrumentDemo.Controllers.SecondController.ThirdExample()
  • 楽器CustomInstrumentDemo.Controllers.SecondController.FourthExample(int id, string name)

このカスタムインストルメンテーションスキームを実装するには、次のサンプルファイルとインストルメントされたメソッドを使用します。

名前の指標

トレーサーから作成されたメトリックは、一致したメソッドのクラス名とメソッド名を使用して名前が付けられます。この名前はmetricName属性で上書きできます。 metricNameCustom/で始めます(たとえば、 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です。ここで、 71から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スキーマファイルを確認してください。

Copyright © 2022 New Relic株式会社。

This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.