Windowsサービスやスタンドアロンアプリケーションなどの特定のタイプのアプリケーションには、.NETエージェントで自動的に検出されるエントリポイントがない場合があります。

これらの場合、POCO(Plain Old CLR Object)のカスタム一致ルールを作成できます。 

POCOカスタムマッチルールの概要

POCOカスタムマッチルールを作成するには、 ビジネストランザクションにおいて最も適切なエントリポイントである、.NETのクラス/メソッドのカスタムマッチルールを定義します。アプリケーションのコーディングに精通している人物がこの決定をサポートできます。[カスタムマッチルール] ページも参照してください。

必要に応じて、[Background Task] オプションを有効にして、トランザクションをバックグラウンドタスクとしてモニタできます。AppDynamics は、バックグラウンド タスク トランザクションのビジネス トランザクション メトリックのみを報告します。バックグラウンドタスクのティアレベルおよびアプリケーションレベルでの応答時間とコールメトリックは集計されません。詳細については、「バックグラウンドタスクのモニタリング」を参照してください。

ルールの作成後、AppDynamics は一致したエントリポイントメソッド上のトラフィックを検出し、そのビジネストランザクションをカスタムマッチルールの名前を付けて登録します。  

デフォルトで、新しいPOCOエントリポイントに必要なインストゥルメンテーションの変更を適用するには、1分待機してからアプリケーションを再起動する必要があります。まだコントローラに登録していないティアに適用するアプリケーションレベルの POCO を作成する場合、ビジネストランザクションを表示するために、ティアの登録後にアプリケーションを再起動する必要が生じることがあります。

.NET エージェントのランタイム リインストゥルメンテーションを有効化すると、インストゥルメンテーションの変更後にアプリケーションを再起動する必要がなくなります。

ここで説明したPOCOエントリポイントの定義方法に代わる代替方法として、トランザクション検出ツールを使用して、検出されたトランザクションに基づいて、マッチルールを作成できます。詳細については、ビジネストランザクション検出セッションを参照してください。

Linux 用の .NET エージェントは、コントローラ UI を使用したシンプルな POCO ビジネストランザクション構成をサポートしています。参照: Linux ビジネストランザクション設定用の .NET エージェント

POCOエントリポイントの定義

発生元のティアでは、POCOエントリポイントはビジネストランザクションを開始するメソッドです。POCOエントリポイントがダウンストリームティアにある場合には、アップストリームのイグジットポイントに関連している場合があります。POCOエントリポイントを定義する場合、ビジネストランザクションが実行するたびに開始し終了するメソッドを選択することが重要です。詳細については、ビジネストランザクションを参照してください。

POCOエントリポイントとして推奨される候補は以下のとおりです。

  • クライアントが接続するたびに実行するソケットアプリケーションのメソッド。
  • Webサービス呼び出しを通じてバッチプロセスを記録するスタンドアロン アプリケーションのループ。例えば、経費精算の承認のために回付される経費報告システム。
  • データベースコールを定期的に実行して、処理する新しいジョブをチェックするWindowsサービス。次の例では、POCO エントリポイントは、名前空間 JobProcessor、クラス JobProcessorCore、メソッド ProcessJobs で定義されます。

.NET

using System.Threading;
using System;
using System.Threading.Tasks;
using System.Configuration;
using System.Collections.Generic;

namespace JobProcessor {
    class JobProcessorCore {
        public void Process() {
            while(running) {
                ProcessJobs ();

				// run jobs again after 1 minute
				Thread.Sleep(60000);
            }
        }

		private void ProcessJobs() {
            var logic = new JobManagement ();
            var jobs = logic.GetJobs(); // Query Database for a list of jobs to process

            foreach (var job in jobs) {
                logic.ExecuteJob(job); // logic for executing a job
            }                 
        }
    }
}
CODE


タスクベースのPOCOエントリポイントメソッド

AppDynamics は、エンドツーエンドのトランザクションとして、非同期タスクベースのメソッドエントリポイントの POCO トランザクションを自動的に追跡します。エンドツーエンドの遅延メトリックは、このようなメソッドに関連付けられた非同期アクションを完了するためにかかる時間を示します。  

エンドツーエンドのトランザクションとして追跡できるように、POCO エントリポイントとして定義するメソッドは、Task オブジェクトを返し、async 修飾子を使用する必要があります。つまり、メソッドの署名は次のようになります。

public async Task<int> SearchBestPrice()
{
   ...
}

AppDynamics は、他のタイプのメソッドの場合と同様に、このメソッドの応答時間を記録します。応答時間は、メソッドが呼び出されて、呼び出しスレッドへのコントロールが返されるまでの時間を示します。ただし、非同期タスクベースのメソッドについては、AppDynamics は非同期タスクがエンドツーエンドのトランザクション遅延メトリックとして実行される場合にかかる時間を記録します。 

20.3.0 以降の .NET エージェントの場合、非同期タスクに費やされた時間は平均応答時間(ART)で報告されますが、エンドツーエンドの遅延メトリックでは報告されません。

エンドツーエンドのレイテンシパフォーマンス」を参照してください。