Windowsサービスやスタンドアロンアプリケーションなどの特定のタイプのアプリケーションには、.NETエージェントで自動的に検出されるエントリポイントがない場合があります。
これらの場合、POCO(Plain Old CLR Object)のカスタム一致ルールを作成できます。
POCOカスタムマッチルールの概要
POCOカスタムマッチルールを作成するには、 ビジネストランザクションにおいて最も適切なエントリポイントである、.NETのクラス/メソッドのカスタムマッチルールを定義します。アプリケーションのコーディングに精通している人物がこの決定をサポートできます。[カスタムマッチルール] ページも参照してください。
必要に応じて、[Background Task] オプションを有効にして、トランザクションをバックグラウンドタスクとしてモニタできます。AppDynamics は、バックグラウンド タスク トランザクションのビジネス トランザクション メトリックのみを報告します。バックグラウンドタスクのティアレベルおよびアプリケーションレベルでの応答時間とコールメトリックは集計されません。詳細については、「バックグラウンドタスクのモニタリング」を参照してください。
ルールの作成後、AppDynamics は一致したエントリポイントメソッド上のトラフィックを検出し、そのビジネストランザクションをカスタムマッチルールの名前を付けて登録します。
デフォルトで、新しいPOCOエントリポイントに必要なインストゥルメンテーションの変更を適用するには、1分待機してからアプリケーションを再起動する必要があります。まだコントローラに登録していないティアに適用するアプリケーションレベルの POCO を作成する場合、ビジネストランザクションを表示するために、ティアの登録後にアプリケーションを再起動する必要が生じることがあります。
.NET Agent のランタイム リインストゥルメンテーションを有効化すると、インストゥルメンテーションの変更後にアプリケーションを再起動する必要がなくなります。
ここで説明したPOCOエントリポイントの定義方法に代わる代替方法として、トランザクション検出ツールを使用して、検出されたトランザクションに基づいて、マッチルールを作成できます。詳細については、ビジネストランザクション検出セッションを参照してください。
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
修飾子を使用する必要があります。つまり、メソッドの署名は次のようになります。
AppDynamics は、他のタイプのメソッドの場合と同様に、このメソッドの応答時間を記録します。応答時間は、メソッドが呼び出されて、呼び出しスレッドへのコントロールが返されるまでの時間を示します。ただし、非同期タスクベースのメソッドについては、AppDynamics は非同期タスクがエンドツーエンドのトランザクション遅延メトリックとして実行される場合にかかる時間を記録します。
20.3.0 以降の .NET エージェントの場合、非同期タスクに費やされた時間は平均応答時間(ART)で報告されますが、エンドツーエンドの遅延メトリックでは報告されません。
「エンドツーエンドのレイテンシパフォーマンス」を参照してください。