配置和设置

配置方法

可以通过以下方式应用或编辑配置设置,其中环境变量优先于 App.configWeb.config 文件:

  1. 环境变量

    环境变量是配置设置的主要方式。

  2. App.configWeb.config 文件

    对于运行在 .NET Framework 上的应用程序,可以使用 Web 配置文件 (web.config) 或应用程序配置文件 (app.config) 来配置 OTEL_* 设置。

    ⚠️ 仅以 OTEL_ 开头的设置可以使用 App.configWeb.config 进行设置。但是,不支持以下设置:

  • OTEL_DOTNET_AUTO_HOME
  • OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES
  • OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED
  • OTEL_DOTNET_AUTO_[TRACES|METRICS|LOGS]_INSTRUMENTATIONS_ENABLED
  • OTEL_DOTNET_AUTO_[TRACES|METRICS|LOGS]_{INSTRUMENTATION_ID}_INSTRUMENTATION_ENABLED
  • OTEL_DOTNET_AUTO_LOG_DIRECTORY
  • OTEL_LOG_LEVEL
  • OTEL_DOTNET_AUTO_NETFX_REDIRECT_ENABLED

OTEL_SERVICE_NAME 设置示例:

<configuration>
<appSettings>
    <add key="OTEL_SERVICE_NAME" value="my-service-name" />
</appSettings>
</configuration>
  1. 服务名称的自动检测

    如果未显式配置服务名称,则会自动生成一个服务名称。这在某些情况下很有帮助。

  • 如果应用程序在 .NET Framework 上托管于 IIS,则服务名称为 SiteName\VirtualPath,例如 MySite\MyApp
  • 如果不是这种情况,则使用应用程序的名称作为服务名称。 entry Assembly

默认情况下,我们建议使用环境变量进行配置。然而,如果给定的设置支持,则:

  • 使用 Web.config 配置 ASP.NET 应用程序(.NET Framework),
  • 使用 App.config 配置 Windows 服务(.NET Framework)。

全局设置

环境变量 描述 默认值 状态
OTEL_DOTNET_AUTO_HOME 安装位置 实验性
OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES 无法进行探查的可执行文件的名称。支持多个逗号分隔的值,例如:ReservedProcess.exe,powershell.exe。如果未设置,则默认情况下,探查器将附加到所有进程中。 [1][2] 实验性
OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED 启用当无法执行自动探查时进程失败的可能性。它设计用于调试目的。不应在生产环境中使用。[1] false 实验性
OTEL_LOG_LEVEL SDK 日志级别。(支持的值:noneerrorwarninfodebug info 稳定

[1] 如果 OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED 设置为 true,则由 OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES 排除的进程将失败,而不是继续运行。[2] 注意通过 dotnet MyApp.dll 启动的应用程序的进程名称为 dotnetdotnet.exe

默认情况下,我们建议使用环境变量进行配置。然而,如果给定的设置支持,则:

  • 使用 Web.config 配置 ASP.NET 应用程序(.NET Framework),
  • 使用 App.config 配置 Windows 服务(.NET Framework)。

全局设置

环境变量 描述 默认值 状态
OTEL_DOTNET_AUTO_HOME 安装位置。 实验性
OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES 无法进行探查的可执行文件的名称。支持多个逗号分隔的值,例如:ReservedProcess.exe,powershell.exe。如果未设置,则默认情况下,探查器将附加到所有进程中。 [1][2] 实验性
OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED 启用当无法执行自动探查时进程失败的可能性。它设计用于调试目的。不应在生产环境中使用。[1] false 实验性
OTEL_LOG_LEVEL SDK 日志级别。(支持的值:noneerrorwarninfodebug info 稳定

[1] 如果 OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED 设置为 true,则由 OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES 排除的进程将失败,而不是继续运行。[2] 注意通过 dotnet MyApp.dll 启动的应用程序的进程名称为 dotnetdotnet.exe

资源

资源是产生遥测的不可变表示形式。有关详细信息,请参阅资源语义约定

资源属性

环境变量 描述 默认值 状态
OTEL_RESOURCE_ATTRIBUTES 用作资源属性的键值对。有关详细信息,请参阅资源 SDK 请参阅资源语义约定中的详细信息。 稳定

资源检测器

环境变量 描述 默认值 状态
OTEL_DOTNET_AUTO_RESOURCE_DETECTOR_ENABLED 启用所有资源检测器。 true 实验性
OTEL_DOTNET_AUTO_{0}_RESOURCE_DETECTOR_ENABLED 启用特定资源检测器的配置模式,其中 {0} 是要启用的资源检测器的大写 ID。会覆盖 OTEL_DOTNET_AUTO_RESOURCE_DETECTOR_ENABLED true 实验性

以下资源检测器是默认情况下包含并启用的:

ID 描述 文档 状态
CONTAINER 容器检测器 容器资源检测器文档 实验性
AZUREAPPSERVICE Azure App 服务检测器 Azure 资源检测器文档 实验性

传播器

传播器允许应用程序共享上下文。请参阅OpenTelemetry 规范了解详细信息。

环境变量 描述 默认值
OTEL_PROPAGATORS 逗号分隔的传播器列表。支持的选项有:tracecontextbaggageb3multib3。请参阅OpenTelemetry 规范了解详细信息。 tracecontext,baggage

采样器

采样器允许您通过选择要收集和导出的跟踪来控制 OpenTelemetry 仪表引入的潜在噪音和开销。请参阅 OpenTelemetry 规范 了解详细信息。

环境变量 描述 默认值 状态
OTEL_TRACES_SAMPLER 用于跟踪的采样器 [1] parentbased_always_on 稳定
OTEL_TRACES_SAMPLER_ARG 用作采样器参数的字符串 稳定

[1] 支持的值有:

  • always_on
  • always_off
  • traceidratio
  • parentbased_always_on
  • parentbased_always_off
  • parentbased_traceidratio

[2] 对于 traceidratioparentbased_traceidratio 采样器:采样概率,范围为 [0..1] 的数字,例如 “0.25”。默认值为 1.0。

导出器

导出器输出遥测数据。

环境变量 描述 默认值 状态
OTEL_TRACES_EXPORTER 要使用的跟踪导出器。该值可以是以下之一:zipkinotlpnone otlp 稳定
OTEL_METRICS_EXPORTER 要使用的指标导出器。该值可以是以下之一:otlpprometheusnone otlp 稳定
OTEL_LOGS_EXPORTER 要使用的日志导出器。该值可以是以下之一:otlpnone otlp 稳定

跟踪导出器

环境变量 描述 默认值 状态
OTEL_BSP_SCHEDULE_DELAY 两个连续导出之间的延迟间隔(以毫秒为单位)。 5000 稳定
OTEL_BSP_EXPORT_TIMEOUT 导出数据的最大允许时间(以毫秒为单位)。 30000 稳定
OTEL_BSP_MAX_QUEUE_SIZE 最大队列大小。 2048 稳定
OTEL_BSP_MAX_EXPORT_BATCH_SIZE 最大批处理大小。必须小于或等于 OTEL_BSP_MAX_QUEUE_SIZE 512 稳定

指标导出器

环境变量 描述 默认值 状态
OTEL_METRIC_EXPORT_INTERVAL 两个导出尝试开始时间之间的时间间隔(以毫秒为单位)。 对于 OTLP 导出器为 60000,对于控制台导出器为 10000 稳定
OTEL_METRIC_EXPORT_TIMEOUT 导出数据的最大允许时间(以毫秒为单位)。 对于 OTLP 导出器为 30000,对于控制台导出器为无 稳定

日志导出器

环境变量 描述 默认值 状态
OTEL_DOTNET_AUTO_LOGS_INCLUDE_FORMATTED_MESSAGE 是否设置格式化的日志消息。 false 实验性

OTLP

状态: 稳定

要启用 OTLP 导出器,请将 OTEL_TRACES_EXPORTER/OTEL_METRICS_EXPORTER/OTEL_LOGS_EXPORTER 环境变量设置为 otlp

要使用环境变量自定义 OTLP 导出器,请参阅 OTLP 导出器文档。 重要的环境变量包括:

环境变量 描述 默认值 状态
OTEL_EXPORTER_OTLP_ENDPOINT OTLP 导出器的目标端点。请参阅OpenTelemetry 规范获取详细信息。 对于 http/protobuf 协议,默认值为 http://localhost:4318,对于 grpc 协议,默认值为 http://localhost:4317 稳定
OTEL_EXPORTER_OTLP_PROTOCOL OTLP 导出器传输协议。支持的值为 grpchttp/protobuf。 [1] http/protobuf 稳定
OTEL_EXPORTER_OTLP_TIMEOUT 后端处理每个批次的最大等待时间(以毫秒为单位)。 10000 稳定
OTEL_EXPORTER_OTLP_HEADERS 每个导出请求发送的其他 HTTP 标头的逗号分隔列表,例如:Authorization=secret,X-Key=Value 稳定
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT 允许的属性值的最大长度。 稳定
OTEL_ATTRIBUTE_COUNT_LIMIT 允许的跨度属性计数的最大值。 128 稳定
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT 允许的属性值的最大长度。不适用于指标 稳定
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT 允许的跨度属性计数的最大值。不适用于指标 128 稳定
OTEL_SPAN_EVENT_COUNT_LIMIT 允许的跨度事件计数的最大值。 128 稳定
OTEL_SPAN_LINK_COUNT_LIMIT 允许的跨度链接计数的最大值。 128 稳定
OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT 允许每个跨度事件的属性计数的最大值。 128 稳定
OTEL_LINK_ATTRIBUTE_COUNT_LIMIT 允许每个跨度链接的属性计数的最大值。 128 稳定

[1] 关于 OTEL_EXPORTER_OTLP_PROTOCOL 可能需要考虑的问题:

  • .NET 自动仪表默认为 http/protobuf,这与 .NET SDK 默认值 grpc 不同。
  • 在 .NET 6 及更高版本中,应用程序必须引用 Grpc.Net.Client 才能使用 grpc OTLP 导出器协议。例如,通过将 <PackageReference Include="Grpc.Net.Client" Version="2.43.0" /> 添加到 .csproj 文件。
  • 在 .NET Framework 上,不支持 grpc OTLP 导出器协议。

Prometheus

状态: 实验性

要启用 Prometheus 导出器,请将 OTEL_METRICS_EXPORTER 环境变量设置为 prometheus

导出器在 http://localhost:9464/metrics 上公开指标 HTTP 端点,并将响应缓存 300 毫秒。

有关更多信息,请参阅 Prometheus Exporter HttpListener 文档

Zipkin

状态: 稳定

要启用 Zipkin 导出器,请将 OTEL_TRACES_EXPORTER 环境变量设置为 zipkin

要使用环境变量自定义 Zipkin 导出器,请参阅 Zipkin Exporter 文档。 重要的环境变量包括:

环境变量 描述 默认值 状态
OTEL_EXPORTER_ZIPKIN_ENDPOINT Zipkin URL http://localhost:9411/api/v2/spans 稳定

附加设置

环境变量 描述 默认值 状态
OTEL_DOTNET_AUTO_TRACES_ENABLED 启用跟踪功能。 true 实验性
OTEL_DOTNET_AUTO_OPENTRACING_ENABLED 启用 OpenTracing 链路追踪器。 false 实验性
OTEL_DOTNET_AUTO_LOGS_ENABLED 启用日志功能。 true 实验性
OTEL_DOTNET_AUTO_METRICS_ENABLED 启用指标功能。 true 实验性
OTEL_DOTNET_AUTO_NETFX_REDIRECT_ENABLED 启用 .NET Framework 上自动工具包使用的程序集的自动重定向功能。 true 实验性
OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_SOURCES 以逗号分隔的 System.Diagnostics.ActivitySource 名称的附加列表,将在启动时添加到跟踪器中。可用于捕获手动进行的指标跟踪。 实验性
OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_LEGACY_SOURCES 以逗号分隔的附加旧版源名称列表,将在启动时添加到跟踪器中。用于捕获未使用 System.Diagnostics.ActivitySource API 创建的 System.Diagnostics.Activity 对象。 实验性
OTEL_DOTNET_AUTO_FLUSH_ON_UNHANDLEDEXCEPTION 控制当引发 AppDomain.UnhandledException 事件时是否刷新遥测数据。当怀疑遗漏遥测数据且也遇到未处理异常问题时设置为 true false 实验性
OTEL_DOTNET_AUTO_METRICS_ADDITIONAL_SOURCES 逗号分隔的 System.Diagnostics.Metrics.Meter 名称的附加列表,将在启动时添加到计量器中。用于捕获手动进行的指标跟踪。 实验性
OTEL_DOTNET_AUTO_PLUGINS 具有 程序集限定名 的 OTel SDK 工具包的仪表插件类型的以冒号分隔的列表。注意:此列表必须使用冒号分隔,因为类型名称可能包含逗号。 查看有关如何编写插件的更多信息,请参阅 plugins.md 实验性

RuleEngine

RuleEngine 是一项功能,用于验证 OpenTelemetry 的 API、SDK、工具包和导出器程序集是否存在不支持的情况,以确保 OpenTelemetry 自动工具包的稳定性,避免崩溃。该功能适用于 .NET 6 及更高版本。

只在首次运行应用程序时、部署更改或自动工具包程序库升级时启用 RuleEngine。一旦验证完成,在应用程序重新启动时无需重新验证规则。

环境变量 描述 默认值 状态
OTEL_DOTNET_AUTO_RULE_ENGINE_ENABLED 启用 RuleEngine。 true 实验性

.NET CLR Profiler

CLR 使用以下环境变量来设置配置分析器。有关更多信息,请参阅 .NET Runtime Profiler Loading

.NET Framework 环境变量 .NET 环境变量 描述 必需值 状态
COR_ENABLE_PROFILING CORECLR_ENABLE_PROFILING 启用分析器。 1 实验性
COR_PROFILER CORECLR_PROFILER 分析器的 CLSID。 {918728DD-259F-4A6A-AC2B-B85E1B658318} 实验性
COR_PROFILER_PATH CORECLR_PROFILER_PATH 分析器的路径。 对于 Linux glibc,用 $INSTALL_DIR/linux-x64/OpenTelemetry.AutoInstrumentation.Native.so;对于 Linux musl,用 $INSTALL_DIR/linux-musl-x64/OpenTelemetry.AutoInstrumentation.Native.so;对于 macOS,用 $INSTALL_DIR/osx-x64/OpenTelemetry.AutoInstrumentation.Native.dylib 实验性
COR_PROFILER_PATH_32 CORECLR_PROFILER_PATH_32 32 位分析器的路径。 对于 Windows,用 $INSTALL_DIR/win-x86/OpenTelemetry.AutoInstrumentation.Native.dll 实验性
COR_PROFILER_PATH_64 CORECLR_PROFILER_PATH_64 64 位分析器的路径。 对于 Windows,用 $INSTALL_DIR/win-x64/OpenTelemetry.AutoInstrumentation.Native.dll 实验性

将 OpenTelemetry .NET 自动工具包设置为 .NET CLR Profiler 对 .NET Framework 是必需的。

在 .NET 上,.NET CLR Profiler 仅用于字节码工具包。如果只需要源代码工具包,可以取消设置或删除以下环境变量:

COR_ENABLE_PROFILING
COR_PROFILER
COR_PROFILER_PATH_32
COR_PROFILER_PATH_64
CORECLR_ENABLE_PROFILING
CORECLR_PROFILER
CORECLR_PROFILER_PATH
CORECLR_PROFILER_PATH_32
CORECLR_PROFILER_PATH_64

.NET Runtime

在 .NET 上,需要设置 DOTNET_STARTUP_HOOKS 环境变量。

DOTNET_ADDITIONAL_DEPSDOTNET_SHARED_STORE 环境变量用于解决 .NET 中的程序集版本冲突。

环境变量 必需值 状态
DOTNET_STARTUP_HOOKS $INSTALL_DIR/net/OpenTelemetry.AutoInstrumentation.StartupHook.dll 实验性
DOTNET_ADDITIONAL_DEPS $INSTALL_DIR/AdditionalDeps 实验性
DOTNET_SHARED_STORE $INSTALL_DIR/store 实验性

内部日志

内部日志的默认目录路径如下:

  • Windows:%ProgramData%\OpenTelemetry .NET AutoInstrumentation\logs
  • Linux:/var/log/opentelemetry/dotnet
  • macOS:/var/log/opentelemetry/dotnet

如果无法创建默认日志目录,则仪表使用当前用户的临时文件夹路径。

环境变量 描述 默认值 状态
OTEL_DOTNET_AUTO_LOG_DIRECTORY .NET 跟踪器日志目录。 请参考上述对默认路径的说明 实验性
OTEL_LOG_LEVEL SDK 日志级别。可选值:noneerrorwarninfodebug info 稳定版
OTEL_DOTNET_AUTO_TRACES_CONSOLE_EXPORTER_ENABLED 是否启用跟踪器控制台导出器。 false 实验性
OTEL_DOTNET_AUTO_METRICS_CONSOLE_EXPORTER_ENABLED 是否启用计量器控制台导出器。 false 实验性
OTEL_DOTNET_AUTO_LOGS_CONSOLE_EXPORTER_ENABLED 是否启用日志控制台导出器。 false 实验性
OTEL_DOTNET_AUTO_LOGS_INCLUDE_FORMATTED_MESSAGE 是否格式化日志状态。 false 实验性
最后修改 December 13, 2023: improve glossary translation (46f8201b)