使用 OpenTelemetry.AutoInstrumentation NuGet 包

在以下场景中使用 NuGet 包:

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

限制

尽管 NuGet 包是一种方便的部署自动仪表化的方法,但并非在所有情况下都适用。不适用 NuGet 包的最常见原因包括以下情况:

  1. 无法将包添加到应用程序项目中。例如,应用程序来自无法添加包的第三方。
  2. 当在单个机器上安装了多个需要添加仪表化的应用程序时,可以减少磁盘使用量或虚拟机的大小。在这种情况下,您可以为在机器上运行的所有 .NET 应用程序使用单个部署。
  3. 无法将传统应用程序迁移到 SDK 样式项目

使用 NuGet 包

要使用 OpenTelemetry .NET 自动仪表化您的应用程序,请向项目添加 OpenTelemetry.AutoInstrumentation 包:

dotnet add [<PROJECT>] package OpenTelemetry.AutoInstrumentation --prerelease

如果应用程序引用的包可以进行仪表化,但需要其他包才能使仪表化正常工作,则构建将失败,并提示您添加缺少的仪表化包,或跳过相应包的仪表化:

~packages/opentelemetry.autoinstrumentation.buildtasks/1.0.0-rc.1/build/OpenTelemetry.AutoInstrumentation.BuildTasks.targets(29,5): error : OpenTelemetry.AutoInstrumentation: 添加到 'MongoDB.Driver.Core.Extensions.DiagnosticSources' 版本 1.3.0 的仪表化包的引用,或将 'MongoDB.Driver.Core' 添加到 'SkippedInstrumentations' 属性以忽略此错误。

要解决此错误,可以添加建议的仪表化包,或通过将其添加到 SkippedInstrumentation 属性中来跳过所列包的仪表化,例如:

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

相同的属性也可以直接通过 CLI 指定,注意分隔符 ; 需要正确转义为 ‘%3B’:

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

要在 .NET 应用程序中分发适当的本机运行时组件,请使用 dotnet builddotnet publish 命令指定一个 Runtime Identifier (RID) 来构建应用程序。这可能需要在 self-containedframework-dependent 应用程序之间进行选择。这两种类型都与自动仪表化兼容。

使用构建的输出文件夹中的脚本启动启用了自动仪表化的应用程序。

  • 在 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>

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

最后修改 December 10, 2023: translate (a4350d6e)