.NET Core编辑

快速入门编辑

在 .NET Core 上,代理可以在 IHostBuilder 上注册。这适用于 ASP.NET Core 和依赖于 IHostBuilder 的其他 .NET Core 应用程序,例如 后台任务。在这种情况下,您需要引用 Elastic.Apm.NetCoreAll 包。

using Elastic.Apm.NetCoreAll;

namespace MyApplication
{
  public class Program
  {
    public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
            .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
            .UseAllElasticApm();

    public static void Main(string[] args) => CreateHostBuilder(args).Build().Run();
  }
}

使用 UseAllElasticApm(),代理及其所有组件将被启用。在 ASP.NET Core 上,它将自动捕获传入请求、通过支持技术进行的数据库调用、传出的 HTTP 请求等等。

手动检测编辑

UseAllElasticApm 将向依赖注入系统添加一个 ITracer,它可以在您的代码中使用,以使用 公共 API 手动检测您的应用程序。

using Elastic.Apm.Api;

namespace WebApplication.Controllers
{
    public class HomeController : Controller
    {
        private readonly ITracer _tracer;

        //ITracer injected through Dependency Injection
        public HomeController(ITracer tracer) => _tracer = tracer;

        public IActionResult Index()
        {
            //use ITracer
            var span = _tracer.CurrentTransaction?.StartSpan("MySampleSpan", "Sample");
            try
            {
                //your code here
            }
            catch (Exception e)
            {
                span?.CaptureException(e);
                throw;
            }
            finally
            {
                span?.End();
            }
            return View();
        }
    }
}

与这个 ASP.NET Core 控制器类似,您可以对 IHostedService 实现使用相同的方法。

检测模块编辑

Elastic.Apm.NetCoreAll 包引用了可以自动配置的每个代理组件。这通常不是问题,但如果您想保持依赖项最小化,则可以改为引用 Elastic.Apm.Extensions.Hosting 包并使用 UseElasticApm 方法,而不是 UseAllElasticApm。使用此设置,您可以控制代理将监听的内容。

以下示例仅启用传出的 HTTP 监控(因此,例如,数据库或 Elasticsearch 调用不会自动捕获)

public static IHostBuilder CreateHostBuilder(string[] args) =>
    Host.CreateDefaultBuilder(args)
        .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); })
        .UseElasticApm(new HttpDiagnosticsSubscriber());

.NET Core 和 .NET 5+ 上的零代码更改设置 ( [1.7] 在 1.7 中添加。 )编辑

如果您不能或不想在您的应用程序中引用 NuGet 包,则可以使用启动钩子功能在启动时注入代理,如果您的应用程序在 .NET Core 3.0 或 .NET 5 或更高版本上运行。

要配置启动钩子

  1. 从 .NET APM 代理 GitHub 存储库的 发行版 页面下载 ElasticApmAgent_<version>.zip 文件。您可以在 Assets 下找到该文件。
  2. 将 zip 文件解压缩到一个文件夹中。
  3. DOTNET_STARTUP_HOOKS 环境变量设置为指向解压缩文件夹中的 ElasticApmAgentStartupHook.dll 文件

    set DOTNET_STARTUP_HOOKS=<path-to-agent>\ElasticApmAgentStartupHook.dll 

    <path-to-agent> 是步骤 2 中解压缩的目录。

  4. DOTNET_STARTUP_HOOKS 环境变量可见的上下文中启动您的 .NET Core 应用程序。

使用此设置,代理将在启动期间注入到应用程序中,并且它将启动每个自动检测功能。在 ASP.NET Core(包括 gRPC)上,传入请求将自动捕获。

代理配置可以通过启动钩子功能通过环境变量进行控制。