ヘルプ APM APMインサイト(.NETエージェント版) APMインサイト(.NETエージェント)、カスタム インストルメント、マニュアル設定

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の再起動は不要です。

  • 修正したカスタム インストルメントのファイルを有効にするには、対応するアプリケーション プールをリサイクル必要があります。

トップ