帮助手册

手动配置 .NET Agent 自定义插桩

APM Insight .NET Agent 会自动对 .NET framework 相关方法进行插桩并收集指标。自定义插桩 可帮助您在不修改应用代码的情况下查看自有框架的性能。

自定义插桩允许您追踪并在事务追踪中显示自有应用的方法。当您怀疑某个应用方法占用了较多执行时间时,这将有助于定位性能问题。

如果您的应用中存在代码块较大的方法或包含外部调用,自定义插桩可帮助您找出性能问题的根本原因。   

优势

  • 查看自有框架或 Web 应用的性能。

  • 对方法指标/性能进行分组时,可以为多个方法指定相同的组件名称

    • 示例: 

      • Method1 : SampleComponent

      • Method2 : SampleComponent

      • Method3 : SampleComponent

      • 如果 SampleComponent 占用整个应用 25% 的时间,则意味着该组件下定义的三个方法合计消耗了 25% 的整体性能。

  • 追踪应用中所用第三方框架的性能。

配置自定义插桩

APM Insight 定义的配置文件数据为 JSON 格式 您可以定义自有 Web 应用中使用的程序集名称、类名称和方法名称,也可以为每个方法指定组件 名称。Agent  会读取配置数据并追踪指定方法的性能。

自定义插桩配置文件 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 位置提供 * ,将追踪程序集类中的所有方法。要实现此功能,需要在 apminsight.conf 文件中添加 enable.wildcardmatch=true

 

自定义插桩示例

 

以下代码示例使用 employee DLL,该 DLL 中包含一个控制器类 SalaryController,其中定义了三个方法

 

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。

  • 修改自定义插桩文件后,需要回收对应的应用程序池 才能使更改生效。


本文档对您有帮助吗?

您愿意帮助我们改进文档吗?请告诉我们哪些方面可以做得更好。


很抱歉本文档未能让您满意。我们希望了解可以从哪些方面改进您的体验。


感谢您抽出时间分享反馈。我们将利用您的反馈来改进在线帮助资源。

短链接已复制!