使用 OpenTelemetry.AutoInstrumentation NuGet 包
在以下场景中使用 NuGet 包
- 简化部署。例如,运行单个应用程序的容器。
- 支持
自包含应用程序的检测。 - 通过 NuGet 包促进开发人员进行自动检测实验。
- 解决应用程序使用的依赖项与自动检测之间的版本冲突。
限制
虽然 NuGet 包是部署自动检测的一种便捷方式,但并非在所有情况下都适用。不使用 NuGet 包最常见的原因包括以下几点:
- 无法将包添加到应用程序项目。例如,应用程序来自无法添加该包的第三方。
- 当需要在同一台机器上检测多个应用程序时,可以减少磁盘使用量或虚拟机大小。在这种情况下,可以为运行在该计算机上的所有 .NET 应用程序使用单个部署。
- 无法迁移到 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 build 或 dotnet 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>
该脚本会将你提供的所有命令行参数传递给应用程序。