手动配置 .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。
-
修改自定义插桩文件后,需要回收对应的应用程序池 才能使更改生效。
