配置和设置
配置方法
可以通过以下方式应用或编辑配置设置,其中环境变量优先于 App.config
或 Web.config
文件:
-
环境变量
环境变量是配置设置的主要方式。
-
App.config
或Web.config
文件对于运行在 .NET Framework 上的应用程序,可以使用 Web 配置文件 (
web.config
) 或应用程序配置文件 (app.config
) 来配置OTEL_*
设置。⚠️ 仅以
OTEL_
开头的设置可以使用App.config
或Web.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>
-
服务名称的自动检测
如果未显式配置服务名称,则会自动生成一个服务名称。这在某些情况下很有帮助。
- 如果应用程序在 .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 日志级别。(支持的值:none ,error ,warn ,info ,debug ) |
info |
稳定 |
[1] 如果 OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED
设置为 true
,则由 OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES
排除的进程将失败,而不是继续运行。[2] 注意通过 dotnet MyApp.dll
启动的应用程序的进程名称为 dotnet
或 dotnet.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 日志级别。(支持的值:none ,error ,warn ,info ,debug ) |
info |
稳定 |
[1] 如果 OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED
设置为 true
,则由 OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES
排除的进程将失败,而不是继续运行。[2] 注意通过 dotnet MyApp.dll
启动的应用程序的进程名称为 dotnet
或 dotnet.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 |
逗号分隔的传播器列表。支持的选项有:tracecontext ,baggage ,b3multi ,b3 。请参阅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] 对于 traceidratio
和 parentbased_traceidratio
采样器:采样概率,范围为 [0..1] 的数字,例如 “0.25”。默认值为 1.0。
导出器
导出器输出遥测数据。
环境变量 | 描述 | 默认值 | 状态 |
---|---|---|---|
OTEL_TRACES_EXPORTER |
要使用的跟踪导出器。该值可以是以下之一:zipkin ,otlp ,none 。 |
otlp |
稳定 |
OTEL_METRICS_EXPORTER |
要使用的指标导出器。该值可以是以下之一:otlp ,prometheus ,none 。 |
otlp |
稳定 |
OTEL_LOGS_EXPORTER |
要使用的日志导出器。该值可以是以下之一:otlp ,none 。 |
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 导出器传输协议。支持的值为 grpc ,http/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 导出器用于内部开发循环,不适用于生产环境。生产环境可以使用 OTLP 导出器与配备
OpenTelemetry Collector
的组合,拥有
otlp
receiver
和
prometheus
exporter。
要启用 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_DEPS
和 DOTNET_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 日志级别。可选值:none 、error 、warn 、info 、debug |
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 |
实验性 |