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

これらの場合、以下の説明に従って、POCO(Plain Old CLR Object)のカスタムマッチルールを作成できます。 

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

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

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

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

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

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

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

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

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

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

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

  • クライアントが接続するたびに実行するソケットアプリケーションのメソッド
  • Webサービス呼び出しを通じてバッチプロセスを記録するスタンドアロン アプリケーションのループ。例えば、経費精算の承認のために回付される経費報告システム。
  • データベースコールを定期的に実行して、処理する新しいジョブをチェックするWindowsサービス。たとえば、下のサンプルアプリケーションロジックを考えてみてください。
using System.Threading;
using System;
using System.Threading.Tasks;
using System.Configuration;
using System.Collections.Generic;

namespace JobProcessor {
    class JobProcessorCore {
        private void ProcessJob()
            {
            var logic = new JobManagement();
            while(running)
                {
                    var jobs = logic.GetJobs(); // Query in-memory Database for a list of jobs to process
                    foreach (var job in jobs)
                        {
                        logic.GetJobDetails(job, out type, out parameters); // Obtain the details on the specific job at hand
                        ProcessJob(type, parameters);  // Execute the job in a separate thread
                        }

                    if (jobs.Count == 0)   // if there was no job to process, wait 1 minute
                        Thread.Sleep(60000);
                }
        }
    }
}
JAVA

例では、POCOエントリポイントは、名前空間JobProcessor、クラスJobProcessorCore、メソッドProcessJobで定義されます。

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

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

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

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

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

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

エンドツーエンド トランザクションの詳細については、「エンドツーエンドのレイテンシパフォーマンス」参照してください。