手动配置 .NET 代理自定义检测
APM Insight .NET 代理自动检测 .NET 框架相关的方法并收集指标。自定义检测 有助于在不更改应用程序代码的情况下查看您自己的框架性能。
它允许您跟踪在事务跟踪中捕获和显示的您自己的应用程序方法。当您怀疑执行时间更多地被您自己的应用程序方法占用时,识别与性能相关的问题将很有帮助。
如果您的应用程序有一个包含大代码块的方法或者它有一些外部调用,自定义检测可以帮助您确定性能问题的根本原因。
优点
-
查看您自己的框架或 Web 应用程序性能。
-
为了对方法指标/性能进行分组,我们可以为多个方法命名相同的组件。
-
Example :
-
Method1 : SampleComponent
-
Method2 : SampleComponent
-
Method3 : SampleComponent
-
如果 SampleComponent 在整个应用程序中占用 25% 的时间,则意味着为该组件定义的三个方法消耗了 25% 的整体性能。
-
-
-
跟踪应用程序中使用的任何第三方框架的性能 。
配置自定义检测
APM Insight 定义的配置文件中的数据为 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 O ld C LR O bject ) 。
注意: 提供 *代替 ClassName 或 MethodName,将跟踪程序集类中的所有方法。我们需要在 apminsight.conf 文件中添加 enable.wildcardmatch=true 来实现这一点。
自定义示例
在下面的代码示例中,我们使用了具有控制器类 SalaryController 的员工 DLL,其中包含三个方法。
命名空间 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。
-
我们需要 在修改自定义instrumentation文件后回收对应的应用程序池才能生效。