ASP.NET
要为 ASP.NET (完整 .NET Framework) 启用自动插桩,您需要安装 Elastic.Apm.AspNetFullFramework
包,在您的 web.config
文件中添加对该包的引用,然后编译并部署您的应用程序。
确保您可以访问应用程序源代码并安装
Elastic.Apm.AspNetFullFramework
包。通过添加
ElasticApmModule
IIS 模块,在您的应用程序的web.config
文件中引用Elastic.Apm.AspNetFullFramework
<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <modules> <add name="ElasticApmModule" type="Elastic.Apm.AspNetFullFramework.ElasticApmModule, Elastic.Apm.AspNetFullFramework" /> </modules> </system.webServer> </configuration>
注意有两种可用的配置源。要了解更多信息,请参阅 ASP.NET 上的配置。
默认情况下,代理会为所有 HTTP 请求创建事务,包括静态内容:.html 页面、图片等。
要仅为包含动态内容的 HTTP 请求(如
.aspx
页面)创建事务,请将managedHandler
preCondition 添加到您的web.config
文件中<?xml version="1.0" encoding="utf-8"?> <configuration> <system.webServer> <modules> <add name="ElasticApmModule" type="Elastic.Apm.AspNetFullFramework.ElasticApmModule, Elastic.Apm.AspNetFullFramework" preCondition="managedHandler" /> </modules> </system.webServer> </configuration>
注意要了解有关添加模块的更多信息,请参阅 Microsoft 文档。
注意
我们的 IIS 模块要求
- IIS 7 或更高版本
- 应用程序池的管道模式必须设置为集成模式(IIS 7 及更高版本的默认设置)
- 部署的 .NET 应用程序不得在怪异模式(quirks mode)下运行。这会将
LegacyAspNetSynchronizationContext
设为异步上下文处理程序,当异步代码引入线程切换时,可能导致HttpContext.Items
无法正确恢复。
重新编译并部署您的应用程序。
ElasticApmModule
在首次初始化时实例化 APM 代理。然而,在某些场景下,您可能希望控制代理的实例化,例如在应用程序启动时配置过滤器。为此,
ElasticApmModule
提供了一个CreateAgentComponents()
方法,该方法返回配置用于 ASP.NET Full Framework 的代理组件,然后可以使用这些组件来实例化代理。例如,您可以在应用程序启动时为代理添加事务过滤器
public class MvcApplication : HttpApplication { protected void Application_Start() { // other application startup e.g. RouteConfig, etc. // set up agent with components var agentComponents = ElasticApmModule.CreateAgentComponents(); Agent.Setup(agentComponents); // add transaction filter Agent.AddFilter((ITransaction t) => { t.SetLabel("foo", "bar"); return t; }); } }
现在,
ElasticApmModule
在初始化时将使用已实例化的 APM 代理实例。