ヘルプ APM APMインサイト(.NETエージェント版) APMインサイト(.NETエージェント)、カスタム インストルメント、マニュアル設定
APMインサイト .NET エージェントは、自動的に.NET Framework関連のメソッドをインストルメントし、メトリックを収集します。 . カスタム インストルメント は、独自のフレームワークのパフォーマンスを、アプリケーションのコード変更なしで確認するのに便利です。
独自のアプリケーション メソッドは、取得・トラック可能となり、トランザクション トレースに表示されます。独自のアプリケーション メソッドにより、実行が遅くなっていると疑われる場合、パフォーマンス関連の問題を特定するのに役立ちます。
アプリケーションに、コード量の多いメソッドや、外部コールがある場合、カスタム インストルメントはパフォーマンス低下の根本原因を特定する役に立ちます
メリット
独自のフレームワークやWebアプリケーションのパフォーマンス把握
メソッドのメトリックやパフォーマンスのグループ化による、複数メソッドへの同一コンポーネント名の適用
例 :
メソッド1:SampleComponent
メソッド2:SampleComponent
メソッド3:SampleComponent
SampleComponentの処理に、アプリケーション全体の25%の時間がかかっている場合、このコンポーネント定義の3メソッドが、パフォーマンス全体の25%を消費していることとなります。
アプリケーションで利用されているサードパーティ フレームワークのパフォーマンスを追跡
カスタム インストルメントの設定
設定ファイルのデータは、JSON形式をもちいます。 . Webアプリで使用しているアセンブリ名、クラス名、メソッド名を定義できるほか、メソッドごとのコンポーネント名の指定も可能です。 エージェントは設定データを読み、指定メソッドのパフォーマンスを追跡します。
カスタム インストルメント設定ファイル custom_instrumentation.json は、ProgramData/DotNetAgentのパスにあります。
カスタム インストルメント データの構文,
{
"AssemblyName1 ": {
"NameSpace.ClassName1 ": {
"MethodName1 ": "ComponentName "
},
"NameSpace.ClassName2 ": {
"MethodName1 ": "ComponentName ",
"MethodName2 ": "ComponentName "
}
},
"AssemblyName2 ": {
"NameSpace.ClassName1 ": {
"* ": "ComponentName "
},
"NameSpace.* ": {
"MethodName1 ": "ComponentName ",
"MethodName2 ": "ComponentName "
}
}
}
AssemblyName : DLLの名称
NameSpace.ClassName : 名前空間名を含むクラス名
MethodName : 監視するメソッドの名称
ComponentName : メソッド用のコンポーネント名。指定がなければ、デフォルトでPOCO(Plain Old CLR Object)
メモ: ClassNameやMethodNameの代わりに、*を指定すると、アセンブリのクラスにあるメソッドすべてを追跡します。これを行うには、enable.wildcardmatch=trueと、apminsight.confファイルに指定してください。
カスタム インストルメントのサンプル
次のコード サンプルでは、コントローラークラスを持つDLLを利用します。このSalaryControllerには、3つのメソッドがあります。
namespace Employee.Controllers
{
public class SalaryController : Controller
{
public ActionResult ProcessPayRoll()
{
EmployeeSR.EmpServiceClient empServiceClient = new EmployeeSR.EmpServiceClient();
empServiceClient.ProcessPayroll(Context.EmpId);
return View();
}
public ActionResult GetSalaryAmount(int empId)
{
using(var conn = new SqlConnection(connString))
{
conn.Open();
var cmd = new SqlCommand("select Salary from Employee where id='" + id + "' ", conn);
ViewBag.SalaryAmount = cmd. ExecuteScalar();
conn.Close();
}
return View();
}
public ActionResult GetSalaryPerMonth(string id)
{
int salary = GetSalaryPerYear();
ViewBag.Result = salary / 12;
return View();
}
}
}
クラスのカスタム インストルメント
{
"Employee ": {
"Employee.Controllers.SalaryController ": {
"ProcessPayRoll ": "PAYROLL ",
"GetSalaryAmount ": "FETCH ",
"GetSalaryPerMonth ": "FETCH "
}
}
}
インストルメントしたメソッドは、実行時間とあわせ、トレースタブに表示されます。
メモ:
IISの再起動は不要です。
修正したカスタム インストルメントのファイルを有効にするには、対応するアプリケーション プールをリサイクル必要があります。