配置和设置
配置方法
您可以通过以下方式应用或编辑配置设置,其中环境变量优先于 App.config 或 Web.config 文件。
环境变量
环境变量是配置设置的主要方式。
App.config或Web.config文件对于运行在 .NET Framework 上的应用程序,您可以使用 Web 配置文件 (
web.config) 或应用程序配置文件 (app.config) 来配置OTEL_*设置。⚠️ 只有以
OTEL_开头的设置才能通过App.config或Web.config进行设置。但是,以下设置不受支持:OTEL_DOTNET_AUTO_HOMEOTEL_DOTNET_AUTO_EXCLUDE_PROCESSESOTEL_DOTNET_AUTO_FAIL_FAST_ENABLEDOTEL_DOTNET_AUTO_[TRACES|METRICS|LOGS]_INSTRUMENTATION_ENABLEDOTEL_DOTNET_AUTO_[TRACES|METRICS|LOGS]_{INSTRUMENTATION_ID}_INSTRUMENTATION_ENABLEDOTEL_DOTNET_AUTO_LOG_DIRECTORYOTEL_LOG_LEVELOTEL_DOTNET_AUTO_NETFX_REDIRECT_ENABLEDOTEL_DOTNET_AUTO_SQLCLIENT_NETFX_ILREWRITE_ENABLED
带有
OTEL_SERVICE_NAME设置的示例<configuration> <appSettings> <add key="OTEL_SERVICE_NAME" value="my-service-name" /> </appSettings> </configuration>服务名称自动检测
如果没有显式配置服务名称,系统将为您生成一个。这在某些情况下可能很有用。
- 如果应用程序托管在 IIS 中的 .NET Framework 上,则服务名称为
SiteName\VirtualPath,例如:MySite\MyApp - 如果不是这种情况,它将使用应用程序 入口程序集的名称。
- 如果应用程序托管在 IIS 中的 .NET Framework 上,则服务名称为
默认情况下,我们建议使用环境变量进行配置。但是,如果给定设置支持它,则
- 对于 ASP.NET 应用程序(.NET Framework),使用
Web.config进行配置; - 对于 Windows 服务(.NET Framework),使用
App.config进行配置。
全局设置
| 环境变量 | 描述 | 默认值 | 状态 |
|---|---|---|---|
OTEL_DOTNET_AUTO_HOME | 安装位置。 | 实验性的 | |
OTEL_DOTNET_AUTO_EXCLUDE_PROCESSES | Profiler 无法检测的可执行文件名称。支持多个以逗号分隔的值,例如: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 启动的应用程序的进程名称为 dotnet 或 dotnet.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_ENABLED。 | true | 实验性的 |
以下资源检测器包含在内,并且默认启用
| ID | 描述 | 文档 | 状态 |
|---|---|---|---|
AZUREAPPSERVICE | Azure App Service 检测器 | Azure 资源检测器文档 | 实验性的 |
CONTAINER | 容器检测器 | 容器资源检测器文档 .NET Framework 不支持 | 实验性的 |
HOST | 主机检测器 | 主机资源检测器文档 | 实验性的 |
OPERATINGSYSTEM | 操作系统检测器 | 操作系统资源检测器文档 | 实验性的 |
PROCESS | 进程检测器 | 进程资源检测器文档 | 实验性的 |
PROCESSRUNTIME | 进程运行时检测器 | 进程运行时资源检测器文档 | 实验性的 |
传播器
传播器允许应用程序共享上下文。有关更多详细信息,请参阅 OpenTelemetry 规范。
| 环境变量 | 描述 | 默认值 |
|---|---|---|
OTEL_PROPAGATORS | 逗号分隔的传播器列表。支持的选项:tracecontext、baggage、b3multi、b3。有关更多详细信息,请参阅 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]:对于 traceidratio 和 parentbased_traceidratio 采样器:采样概率,一个介于 [0..1] 范围内的数字,例如“0.25”。默认值为 1.0。
导出器
导出器输出遥测数据。
| 环境变量 | 描述 | 默认值 | 状态 |
|---|---|---|---|
OTEL_TRACES_EXPORTER | 逗号分隔的导出器列表。支持的选项:otlp、zipkin、console、none。 | otlp | 稳定 |
OTEL_METRICS_EXPORTER | 逗号分隔的导出器列表。支持的选项:otlp、prometheus、console、none。 | otlp | 稳定 |
OTEL_LOGS_EXPORTER | 逗号分隔的导出器列表。支持的选项:otlp、console、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:https://:4318,grpc:https://:4317 | 稳定 |
OTEL_EXPORTER_OTLP_TRACES_ENDPOINT | 等同于 OTEL_EXPORTER_OTLP_ENDPOINT,但仅适用于追踪。 | http/protobuf:https://:4318/v1/traces,grpc:https://:4317 | 稳定 |
OTEL_EXPORTER_OTLP_METRICS_ENDPOINT | 等同于 OTEL_EXPORTER_OTLP_ENDPOINT,但仅适用于指标。 | http/protobuf:https://:4318/v1/metrics,grpc:https://:4317 | 稳定 |
OTEL_EXPORTER_OTLP_LOGS_ENDPOINT | 等同于 OTEL_EXPORTER_OTLP_ENDPOINT,但仅适用于日志。 | http/protobuf:https://:4318/v1/logs,grpc:https://:4317 | 稳定 |
OTEL_EXPORTER_OTLP_PROTOCOL | OTLP 导出器传输协议。支持的值为 grpc、http/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才能使用grpcOTLP 导出器协议。例如,通过将<PackageReference Include="Grpc.Net.Client" Version="2.65.0" />添加到.csproj文件。 - 在 .NET Framework 上,不支持
grpcOTLP 导出器协议。
[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 导出器用于内部开发循环。生产环境可以使用 OTLP 导出器与 OpenTelemetry Collector 结合使用,该 Collector 具有 otlp receiver 和 prometheus exporter。
要启用 Prometheus 导出器,请将 OTEL_METRICS_EXPORTER 环境变量设置为 prometheus。
导出器在 https://:9464/metrics 上公开指标 HTTP 端点,并缓存响应 300 毫秒。
请参阅 Prometheus Exporter HttpListener 文档 以了解更多信息。
Zipkin
状态:稳定
要启用 Zipkin 导出器,请将 OTEL_TRACES_EXPORTER 环境变量设置为 zipkin。
要使用环境变量自定义 Zipkin 导出器,请参阅 Zipkin 导出器文档。重要的环境变量包括:
| 环境变量 | 描述 | 默认值 | 状态 |
|---|---|---|---|
OTEL_EXPORTER_ZIPKIN_ENDPOINT | Zipkin URL | https://: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 事件时是否刷新遥测数据。当您怀疑遇到丢失的遥测数据问题并同时遇到未处理的异常时,请设置为 true。 | false | 实验性的 |
OTEL_DOTNET_AUTO_METRICS_ADDITIONAL_SOURCES | 在启动时添加到 Meter 的其他 System.Diagnostics.Metrics.Meter 名称的逗号分隔列表。使用它来捕获手动创建的指标。 | 实验性的 | |
OTEL_DOTNET_AUTO_PLUGINS | OTel 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_PROFILING | CORECLR_ENABLE_PROFILING | 启用 Profiler。 | 1 | 实验性的 |
COR_PROFILER | CORECLR_PROFILER | Profiler 的 CLSID。 | {918728DD-259F-4A6A-AC2B-B85E1B658318} | 实验性的 |
COR_PROFILER_PATH | CORECLR_PROFILER_PATH | Profiler 的路径。 | 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_32 | CORECLR_PROFILER_PATH_32 | 32 位 Profiler 的路径。特定位数的路径优先于通用路径。 | Windows 为 $INSTALL_DIR/win-x86/OpenTelemetry.AutoInstrumentation.Native.dll | 实验性的 |
COR_PROFILER_PATH_64 | CORECLR_PROFILER_PATH_64 | 64 位 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_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 | 实验性的 |
如果使用了 .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_LEVEL | SDK 日志级别。(支持的值:none、error、warn、info、debug) | info | 稳定 |
OTEL_DOTNET_AUTO_LOGGER | AutoInstrumentation diagnostic logs sink。(支持的值:none、file、console) | file | 实验性的 |
OTEL_DOTNET_AUTO_LOG_FILE_SIZE | 由 Auto Instrumentation 创建的单个日志文件的最大大小(以字节为单位)。 | 10 485 760 (10 MB) | 实验性的 |