配置和设置

配置方法

您可以通过以下方式应用或编辑配置设置,其中环境变量优先于 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]_INSTRUMENTATION_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_DOTNET_AUTO_SQLCLIENT_NETFX_ILREWRITE_ENABLED

    带有 OTEL_SERVICE_NAME 设置的示例

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

    如果没有显式配置服务名称,系统将为您生成一个。这在某些情况下可能很有用。

    • 如果应用程序托管在 IIS 中的 .NET Framework 上,则服务名称为 SiteName\VirtualPath,例如:MySite\MyApp
    • 如果不是这种情况,它将使用应用程序 入口程序集的名称。

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

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

全局设置

环境变量描述默认值状态
OTEL_DOTNET_AUTO_HOME安装位置。实验性的
OTEL_DOTNET_AUTO_EXCLUDE_PROCESSESProfiler 无法检测的可执行文件名称。支持多个以逗号分隔的值,例如:ReservedProcess.exe,powershell.exe。如果未设置,Profiler 默认会附加到所有进程。[1][2]实验性的
OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED启用自动检测无法执行的可能性。它旨在用于调试目的。不应在生产环境中使用。[1]false实验性的

[1] 如果 OTEL_DOTNET_AUTO_FAIL_FAST_ENABLED 设置为 true,则由 OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES 排除的进程将失败,而不是静默继续。

[2] 请注意,通过 dotnet MyApp.dll 启动的应用程序的进程名称为 dotnetdotnet.exe

资源

资源是产生遥测数据的实体的不可变表示。有关更多详细信息,请参阅 资源语义约定

资源属性

环境变量描述默认值状态
OTEL_RESOURCE_ATTRIBUTES将用作资源属性的键值对。有关更多详细信息,请参阅 资源 SDK有关详细信息,请参阅 资源语义约定稳定
OTEL_SERVICE_NAME设置 service.name 资源属性的值。如果 OTEL_RESOURCE_ATTRIBUTES 中提供了 service.name,则 OTEL_SERVICE_NAME 的值具有优先权。请参阅配置方法部分下的 服务名称自动检测稳定

资源探测器

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

以下资源检测器包含在内,并且默认启用

ID描述文档状态
AZUREAPPSERVICEAzure App Service 检测器Azure 资源检测器文档实验性的
CONTAINER容器检测器容器资源检测器文档 .NET Framework 不支持实验性的
HOST主机检测器主机资源检测器文档实验性的
OPERATINGSYSTEM操作系统检测器操作系统资源检测器文档实验性的
PROCESS进程检测器进程资源检测器文档实验性的
PROCESSRUNTIME进程运行时检测器进程运行时资源检测器文档实验性的

传播器

传播器允许应用程序共享上下文。有关更多详细信息,请参阅 OpenTelemetry 规范

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

采样器

采样器允许您通过选择要收集和导出的追踪来控制 OpenTelemetry 仪器可能引入的噪声和开销。有关更多详细信息,请参阅 OpenTelemetry 规范

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

[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逗号分隔的导出器列表。支持的选项:otlpzipkinconsolenoneotlp稳定
OTEL_METRICS_EXPORTER逗号分隔的导出器列表。支持的选项:otlpprometheusconsolenoneotlp稳定
OTEL_LOGS_EXPORTER逗号分隔的导出器列表。支持的选项:otlpconsolenoneotlp稳定

追踪导出器

环境变量描述默认值状态
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_SIZE512稳定

指标导出器

环境变量描述默认值状态
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_ENDPOINTOTLP 导出器的目标端点。有关更多详细信息,请参阅 OpenTelemetry 规范http/protobufhttps://:4318grpchttps://:4317稳定
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT等同于 OTEL_EXPORTER_OTLP_ENDPOINT,但仅适用于追踪。http/protobufhttps://:4318/v1/tracesgrpchttps://:4317稳定
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT等同于 OTEL_EXPORTER_OTLP_ENDPOINT,但仅适用于指标。http/protobufhttps://:4318/v1/metricsgrpchttps://:4317稳定
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT等同于 OTEL_EXPORTER_OTLP_ENDPOINT,但仅适用于日志。http/protobufhttps://:4318/v1/logsgrpchttps://:4317稳定
OTEL_EXPORTER_OTLP_PROTOCOLOTLP 导出器传输协议。支持的值为 grpchttp/protobuf。[1]http/protobuf稳定
OTEL_EXPORTER_OTLP_TRACES_PROTOCOL等同于 OTEL_EXPORTER_OTLP_PROTOCOL,但仅适用于追踪。http/protobuf稳定
OTEL_EXPORTER_OTLP_METRICS_PROTOCOL等同于 OTEL_EXPORTER_OTLP_PROTOCOL,但仅适用于指标。http/protobuf稳定
OTEL_EXPORTER_OTLP_LOGS_PROTOCOL等同于 OTEL_EXPORTER_OTLP_PROTOCOL,但仅适用于日志。http/protobuf稳定
OTEL_EXPORTER_OTLP_TIMEOUT后端处理每个批次的最高等待时间(以毫秒为单位)。10000 (10 秒)稳定
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT等同于 OTEL_EXPORTER_OTLP_TIMEOUT,但仅适用于追踪。10000 (10 秒)稳定
OTEL_EXPORTER_OTLP_METRICS_TIMEOUT等同于 OTEL_EXPORTER_OTLP_TIMEOUT,但仅适用于指标。10000 (10 秒)稳定
OTEL_EXPORTER_OTLP_LOGS_TIMEOUT等同于 OTEL_EXPORTER_OTLP_TIMEOUT,但仅适用于日志。10000 (10 秒)稳定
OTEL_EXPORTER_OTLP_HEADERS逗号分隔的附加 HTTP 标头列表,每次导出时发送,例如:Authorization=secret,X-Key=Value稳定
OTEL_EXPORTER_OTLP_TRACES_HEADERS等同于 OTEL_EXPORTER_OTLP_HEADERS,但仅适用于追踪。稳定
OTEL_EXPORTER_OTLP_METRICS_HEADERS等同于 OTEL_EXPORTER_OTLP_HEADERS,但仅适用于指标。稳定
OTEL_EXPORTER_OTLP_LOGS_HEADERS等同于 OTEL_EXPORTER_OTLP_HEADERS,但仅适用于日志。稳定
OTEL_ATTRIBUTE_VALUE_LENGTH_LIMIT允许的最大属性值大小。稳定
OTEL_ATTRIBUTE_COUNT_LIMIT允许的最大 span 属性计数。128稳定
OTEL_SPAN_ATTRIBUTE_VALUE_LENGTH_LIMIT允许的最大属性值大小。 不适用于指标。.稳定
OTEL_SPAN_ATTRIBUTE_COUNT_LIMIT允许的最大 span 属性计数。 不适用于指标。.128稳定
OTEL_SPAN_EVENT_COUNT_LIMIT允许的最大 span 事件计数。128稳定
OTEL_SPAN_LINK_COUNT_LIMIT允许的最大 span 链接计数。128稳定
OTEL_EVENT_ATTRIBUTE_COUNT_LIMIT每个 span 事件允许的最大属性计数。128稳定
OTEL_LINK_ATTRIBUTE_COUNT_LIMIT每个 span 链接允许的最大属性计数。128稳定
OTEL_LOGRECORD_ATTRIBUTE_VALUE_LENGTH_LIMIT允许的最大日志记录属性值大小。稳定
OTEL_LOGRECORD_ATTRIBUTE_COUNT_LIMIT允许的最大日志记录属性计数。128稳定
OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE基于仪器种类的聚合临时性。 [2]cumulative稳定

[1]:关于 OTEL_EXPORTER_OTLP_PROTOCOL 的注意事项

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

[2]OTEL_EXPORTER_OTLP_METRICS_TEMPORALITY_PREFERENCE 的可识别值(不区分大小写)是:

  • Cumulative:为所有仪器种类选择累积聚合临时性。
  • Delta:为 Counter、Asynchronous Counter 和 Histogram 仪器种类选择 Delta 聚合临时性,为 UpDownCounter 和 Asynchronous UpDownCounter 仪器种类选择 Cumulative 聚合。
  • LowMemory:此配置对 Synchronous Counter 和 Histogram 使用 Delta 聚合临时性,对 Synchronous UpDownCounter、Asynchronous Counter 和 Asynchronous UpDownCounter 仪器种类使用 Cumulative 聚合临时性。
    • ⚠️ 此值来自 规范,但不受支持。

Prometheus

状态实验性的

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

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

请参阅 Prometheus Exporter HttpListener 文档 以了解更多信息。

Zipkin

状态稳定

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

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

环境变量描述默认值状态
OTEL_EXPORTER_ZIPKIN_ENDPOINTZipkin URLhttps://:9411/api/v2/spans稳定

附加设置

环境变量描述默认值状态
OTEL_DOTNET_AUTO_TRACES_ENABLED启用追踪。true实验性的
OTEL_DOTNET_AUTO_OPENTRACING_ENABLED启用 OpenTracing Tracer。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在启动时添加到 Tracer 的其他 System.Diagnostics.ActivitySource 名称的逗号分隔列表。使用它来捕获手动插装的 span。实验性的
OTEL_DOTNET_AUTO_TRACES_ADDITIONAL_LEGACY_SOURCES在启动时添加到 Tracer 的其他旧版源名称的逗号分隔列表。使用它来捕获未通过 System.Diagnostics.ActivitySource API 创建的 System.Diagnostics.Activity 对象。实验性的
OTEL_DOTNET_AUTO_FLUSH_ON_UNHANDLEDEXCEPTION控制在引发 AppDomain.UnhandledException 事件时是否刷新遥测数据。当您怀疑遇到丢失的遥测数据问题并同时遇到未处理的异常时,请设置为 truefalse实验性的
OTEL_DOTNET_AUTO_METRICS_ADDITIONAL_SOURCES在启动时添加到 Meter 的其他 System.Diagnostics.Metrics.Meter 名称的逗号分隔列表。使用它来捕获手动创建的指标。实验性的
OTEL_DOTNET_AUTO_PLUGINSOTel SDK 仪器插件类型的冒号分隔列表,使用 程序集限定名称指定。注意:此列表必须用冒号分隔,因为类型名称可能包含逗号。 有关如何编写插件的更多信息,请参阅 plugins.md实验性的

RuleEngine

RuleEngine 是一项功能,用于验证 OpenTelemetry API、SDK、仪器和导出器程序集是否存在不受支持的场景,通过回退而不是崩溃来确保 OpenTelemetry 自动仪器的稳定性。它适用于 .NET 8 及更高版本。

仅在应用程序首次运行时、部署更改或升级自动仪器库时启用 RuleEngine。验证后,无需在应用程序重新启动时重新验证规则。

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

.NET CLR Profiler

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

.NET Framework 环境变量.NET 环境变量描述必需值状态
COR_ENABLE_PROFILINGCORECLR_ENABLE_PROFILING启用 Profiler。1实验性的
COR_PROFILERCORECLR_PROFILERProfiler 的 CLSID。{918728DD-259F-4A6A-AC2B-B85E1B658318}实验性的
COR_PROFILER_PATHCORECLR_PROFILER_PATHProfiler 的路径。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-arm64/OpenTelemetry.AutoInstrumentation.Native.dylib实验性的
COR_PROFILER_PATH_32CORECLR_PROFILER_PATH_3232 位 Profiler 的路径。特定位数的路径优先于通用路径。Windows 为 $INSTALL_DIR/win-x86/OpenTelemetry.AutoInstrumentation.Native.dll实验性的
COR_PROFILER_PATH_64CORECLR_PROFILER_PATH_6464 位 Profiler 的路径。特定位数的路径优先于通用路径。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 上,如果未使用 .NET CLR Profiler,则必须设置 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实验性的

如果使用了 .NET CLR Profiler 且未设置 DOTNET_STARTUP_HOOKS 环境变量,则 Profiler 会在相对于 OpenTelemetry.AutoInstrumentation.Native.dll 文件位置的适当目录中查找 OpenTelemetry.AutoInstrumentation.StartupHook.dll。文件夹结构可以匹配 ZIP 存档结构或 NuGet 包结构(平台相关或独立)。如果找不到启动挂钩程序集,则会中止 Profiler 加载。

内部日志

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

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

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

环境变量描述默认值状态
OTEL_DOTNET_AUTO_LOG_DIRECTORY.NET Tracer 日志的目录。有关默认路径,请参阅前面的注释。实验性的
OTEL_LOG_LEVELSDK 日志级别。(支持的值:noneerrorwarninfodebuginfo稳定
OTEL_DOTNET_AUTO_LOGGERAutoInstrumentation diagnostic logs sink。(支持的值:nonefileconsolefile实验性的
OTEL_DOTNET_AUTO_LOG_FILE_SIZE由 Auto Instrumentation 创建的单个日志文件的最大大小(以字节为单位)。10 485 760 (10 MB)实验性的