属性によるカスタムインストゥルメンテーション(.NET)

New Relicの.NETエージェントには、カスタムインストゥルメンテーション向けに複数のオプションがあります。カスタムインストゥルメンテーションを使用すると、自動でインストゥルメントされないアプリケーションの部分をインストゥルメントできます。このドキュメントでは、アプリケーションコードのメソッドを属性で装飾してアプリケーションをインストゥルメントする方法について説明します。

  • Transaction属性を使用して、カスタムトランザクションを作成します。また、属性のWebプロパティを使用して、カスタムトランザクションをウェブトランザクションとしてマークすることもできます。
  • Trace属性を使用して、既存のトランザクション内で呼び出されるメソッドにカスタムインストゥルメンテーションを追加します。

必須バージョンおよび推奨バージョン

要件は、以下のとおりです。

  • .NETエージェントのバージョン6.16.178.0またはそれ以降。

  • ソースコードの修正が必要であることを了解しておいてください。ソースコードを変更できないか、またはそれを望まない場合は、XMLによるカスタムインストゥルメンテーションを使用します。

  • プロジェクトにNewRelic.Api.Agent.dllへの参照が含まれている必要があります。このパッケージは、NuGetギャラリーにあります。
  • Transaction属性とTrace属性は、メソッドの具体的な実装に適用する必要があります。インタフェースまたはスーパークラスのメソッド定義には適用できません。

トランザクション内で呼び出されたトランザクション

[Transaction] 属性で装飾されたメソッドで新規トランザクションを作成するのは、既に存在するものがない場合に限られます。[Transaction]で装飾されたメソッドが、以前開始されたトランザクションから呼び出された場合、[Trace]属性として処理され、既存トランザクションに関するより詳しい情報を提供します。

例: すでに開始されたトランザクションで Transactionを呼び出す

このコンソールアプリケーションの実行中、最初にOuterMethodが呼び出され、新規トランザクションを作成します。InnerMethodは、OuterMethodによって開始されたトランザクション内から呼び出されるため、新規トランザクションを作成しません。その代わり、InnerMethodの実行に関する情報は、[Trace]属性が適用されたかのような形で追跡されます。

static void Main(string[] args)
{
    OuterMethod();
}

[Transaction]
public void OuterMethod()
{
    InnerMethod();
}

[Transaction]
public void InnerMethod()
{
}

非ウェブトランザクションを新規作成する

Transaction属性を使用して、非ウェブトランザクション(バックグラウンド要求とも呼ばれます)を開始するには:

[Transaction]
public void Run()
{
  // your background task
}

ウェブまたは非ウェブのどちらを使用するか、およびその理由については、ウェブまたは非ウェブとして分類するをご覧ください。

ウェブトランザクションを新規作成する

非ウェブタスクをウェブブラウザのトランザクションとしてマークするようにエージェントに指示するには、以下のいずれかのオプションを使用します。

  • Transaction属性のWebプロパティをtrueに設定します。
  • SetTransactionUri()を使用してトランザクションのURIを設定します。
[Transaction(Web = true)]
public void Run()
{
  var uri = new Uri("http://www.mydomain.com/path");
  NewRelic.Api.Agent.NewRelic.SetTransactionUri(uri);
  
  // your web task
}

以前開始されたトランザクション内で使用すると、これは[Trace]属性として処理されます。

ウェブまたは非ウェブのどちらを使用するか、およびその理由については、ウェブまたは非ウェブとして分類するをご覧ください。

Traceで既存のトランザクションに詳細を追加する

トランザクショントレースにインストゥルメントされていない時間のブロックが大量にあり、トレース内にメソッドを追加したい場合は、Trace属性を使用できます:

[Trace]
protected void MethodWithinTransaction()
{
  // your app code
}

[Transaction]のプロパティ

Transaction属性は、以下のプロパティをサポートします。

Web
種類: ブール値
デフォルト: false

trueの場合、エージェントは、このTransaction属性に到達するとウェブトランザクションを開始します。トランザクションが処理中の場合、そのトランザクションは続行されます。

falseの場合(デフォルト)、エージェントは、このTransaction属性に到達すると非ウェブトランザクションを開始します。例えば:

[Transaction(Web = true)]

インストゥルメンテーションに関するフォーラムの投稿を読む

より具体的な推奨事項については、Explorers Hubコミュニティで以下の投稿を参照してください:

他のAPI機能を使用する

.NETエージェントAPIおよびその関数の詳細については、New Relicの.NETエージェントAPIガイドをご覧ください。ソースコードを変更しないカスタムインストゥルメンテーションについては、XMLによるトランザクションの作成XMLによるトランザクションへの詳細の追加をご覧ください。

その他のヘルプ

推奨する詳細情報: