.NETエージェントAPIによるカスタム インストルメント
.NETエージェントAPIによるカスタム インストルメント
APMインサイト(.NETエージェント)APIは、Webアプリケーションにおける、ユーザー定義のメソッドを追跡するのに役立ちます。Webアプリケーションのパフォーマンスを監視するため、DLLの指定メソッドをインストルメントするのにも有用です。コードの特定箇所追跡にも、利用いただけます。
API追加の手順
- DotNetAgent.Api.dllライブラリへの参照を、Webアプリケーション プロジェクトに追加します。
- DLLはNuGetパッケージでの提供となります。
- APIには、CustomTrackerという名称のクラスがあり、メソッドのパフォーマンスを追跡するのに利用します。
- ApiParameterクラスには、CustomTrackerにパラメーターとして渡す、メソッド名、クラス名、コンポーネント名も含まれます。
CustomTrackerクラスと、そのメソッド
コンストラクター
CustomTracker(Type thisType)
- thisType:今のクラスか基底クラスのタイプです。
例:CustomTracker dotNetAgentCustomTracker = new CustomTracker(this.GetType());
CustomTracker(Type thisType, ApiParameters apiParameters)
- thisType:今のクラスか基底クラスのタイプです。
- apiParameters - クラス名、メソッド名、コンポーネント名など、監視メソッドのパラメーター値。
例: var customTracker = new CustomTracker(this.GetType(), new ApiParameters() { MethodName = "GetEmployeeReport", ComponentName = "REPORT" });
メソッド
CustomTracker.StartTracker(Type thisType)
- thisType:今のクラスか基底クラスのタイプです。
- これは、コンストラクター自体で呼び出されるため、必要ありません。
CustomTracker.StartTracker (Type thisType, ApiParameters apiParameters)
- このメソッドは、カスタム メソッドのメトリック収集を開始するのに用います。
- これは、コンストラクター自体で呼び出されるため、必要ありません。
CustomTracker.StopTracker()
- メトリック収集は、このメソッドの呼び出しで停止します。
- finallyブロックでは、必ず、これを呼び出してください。
CustomTracker.TraceError(System.Exception ex)
- Webトランザクションにおける例外をトラックします。
- この静的メソッドは、catchブロックで呼び出します。
メソッドの最初ではCustomTrackerクラスのインスタンスを作成し、StopTracker()はメソッドの終わりに実行します。
{}ブロックを利用して、CustomTrackerインスタンスを作成することもできます。オブジェクト廃棄の際には自動的に、StopTracker()メソッドが呼び出されます。
CustomTrackerの利用法
例1:Usingステートメントの利用
protected void Page_Load(object sender, EventArgs e)
{
using (var customTracker = new CustomTracker(this.GetType(), new ApiParameters() { MethodName = "GetBasicDetails", ComponentName= "DETAILS" }))
{
AdminBL adminBL = new AdminBL();
if
(!IsPostBack)
{
ASPSite.BL.MYSQLReference.BasicDetails basicDetails = adminBL.getBasicDetails(id);
EmpApp.Models.BasicDetails basicDetailsModel = getBasicDetailsModel(basicDetails);
}
}
}
例2:StartTrackerとStopTrackerをtry・finallyブロックで利用
public ActionResult BasicDetails(int id = 0)
{
CustomTracker customTracker = null;
AdminBL adminBL = new AdminBL();
try
{
customTracker = new CustomTracker(base.GetType(),new ApiParameters(){ MethodName = "BasicDetails", ComponentName= "DETAILS" });
ASPSite.BL.MYSQLReference.BasicDetails basicDetails = adminBL.getBasicDetails(id);
EmpApp.Models.BasicDetails basicDetailsModel = getBasicDetailsModel(basicDetails);
}
finally
{
customTracker.StopTracker();
}
return View(basicDetailsModel);
}
例3:CustomTrackerのUsingステートメントで、コードをインストルメント化
public ActionResult BasicDetails(int id = 0)
{
AdminBL adminBL = new AdminBL();
using(CustomTracker customTracker = new CustomTracker(base.GetType(),new ApiParameters() { MethodName = "BasicDetails", ComponentName = "DETAILS" }))
{
// コードのインストルメント化。この関数から、FetchAllEmplpyeesとSQL呼び出しを実行
using(CustomTracker fetchAllEmpTracker = new CustomTracker(base.GetType(),new ApiParameters() { MethodName = "FetchAllEmployees", ComponentName = "DETAILS_DB" }))
{
var empList = FetchAllEmployees();
}
ASPSite.BL.MYSQLReference.BasicDetails basicDetails = objadmin.getBasicDetails(id);
EmpApp.Models.BasicDetails basic = getBasicDetailsModel(basicDetails);
}
return View(basicDetailsModel);
}
例4:TraceErrorで例外をトレース
public ActionResult BasicDetails(int id = 0)
{
try
{
AdminBL adminBL = new AdminBL();
var empList = FetchAllEmployees();
ASPSite.BL.MYSQLReference.BasicDetails basicDetails = objadmin.getBasicDetails(id);
EmpApp.Models.BasicDetails basic = getBasicDetailsModel(basicDetails);
}
catch (Exception ex)
{
// 当該トランザクションの例外をトレース
DotNetAgent.Api.CustomTracker.TraceError(ex);
}
}
- メソッド名やクラス名をCustomTrackerに与えない場合、現在のメソッド名やクラス名自体を取得しようとします。
- StartTracker() メソッドは、デフォルトで、コンストラクター内で呼び出されます。
- エージェントがインストールされていない場合や、エージェントのサービスが停止している場合は、メソッド実行は何の効果も発揮しません。