使用 OpenTelemetry.AutoInstrumentation NuGet 包

在以下场景中使用 NuGet 包

  1. 简化部署。例如,运行单个应用程序的容器。
  2. 支持 自包含 应用程序的检测。
  3. 通过 NuGet 包促进开发人员进行自动检测实验。
  4. 解决应用程序使用的依赖项与自动检测之间的版本冲突。

限制

虽然 NuGet 包是部署自动检测的一种便捷方式,但并非在所有情况下都适用。不使用 NuGet 包最常见的原因包括以下几点:

  1. 无法将包添加到应用程序项目。例如,应用程序来自无法添加该包的第三方。
  2. 当需要在同一台机器上检测多个应用程序时,可以减少磁盘使用量或虚拟机大小。在这种情况下,可以为运行在该计算机上的所有 .NET 应用程序使用单个部署。
  3. 无法迁移到 SDK 风格项目的旧应用程序。

使用 NuGet 包

要使用 OpenTelemetry .NET 自动检测应用程序,请将 OpenTelemetry.AutoInstrumentation 包添加到你的项目中。

dotnet add [<PROJECT>] package OpenTelemetry.AutoInstrumentation

如果应用程序引用了可进行检测的包,但需要其他包才能使检测生效,则生成会失败,并提示你添加缺少的检测库或跳过相应包的检测。

~packages/opentelemetry.autoinstrumentation.buildtasks/1.6.0/build/OpenTelemetry.AutoInstrumentation.BuildTasks.targets(29,5): error : OpenTelemetry.AutoInstrumentation: add a reference to the instrumentation package 'MongoDB.Driver.Core.Extensions.DiagnosticSources' version 1.4.0 or add 'MongoDB.Driver.Core' to the property 'SkippedInstrumentations' to suppress this error.

要解决此错误,请添加推荐的检测库,或通过将其添加到 SkippedInstrumentation 属性来跳过列出包的检测,例如:

<PropertyGroup>
   <SkippedInstrumentations>MongoDB.Driver.Core;StackExchange.Redis</SkippedInstrumentations>
</PropertyGroup>

还可以通过 CLI 直接指定同一属性,请注意,分隔符 ; 需要正确转义为 ‘%3B’。

dotnet build -p:SkippedInstrumentations=StackExchange.Redis%3BMongoDB.Driver.Core

要将适当的原生运行时组件分发给你的 .NET 应用程序,请指定 运行时标识符 (RID),以便使用 dotnet builddotnet publish 来生成应用程序。这可能需要选择分发 自包含应用程序或框架依赖应用程序。两种类型都与自动检测兼容。

使用生成输出文件夹中的脚本来启动并激活自动检测的应用程序。

  • 在 Windows 上,使用 instrument.cmd <application_executable>
  • 在 Linux 或 Unix 上,使用 instrument.sh <application_executable>

如果使用 dotnet CLI 启动应用程序,请在脚本之后添加 dotnet

  • 在 Windows 上,使用 instrument.cmd dotnet <application>
  • 在 Linux 和 Unix 上,使用 instrument.sh dotnet <application>

该脚本会将你提供的所有命令行参数传递给应用程序。