OpenTelemetry .NET
在使用 OTEL 发送 Trace 到 DataKit 之前,请先确定您已经配置好了采集器。
版本支持¶
| .NET 版本 | 相关 Instrumentation release | Release notes / 官方兼容性说明 | 可推断支持 |
|---|---|---|---|
| .NET 10 | v1.13.0 | “Support for .NET 10” | 明确加入 .NET 10 支持 (GitHub) |
| .NET 9 | v1.13.0 | “Fixed rule engine check for .NET 9 to reflect longer support for STS channel” | .NET 9 已在 rule engine 支持判断中 (GitHub) |
| .NET 8 | v1.2.0 | “Add support for .NET 8” | 明确加入 .NET 8 支持 (GitHub) |
| .NET 7 | v0.6.0-beta.2、v1.0.1、v1.4.0 | v0.6.0-beta.2: “Updated the shared store to correctly support framework roll-forward from net6.0 to net7.0”v1.0.1: “Fixed Rule checking System.Diagnostics.DiagnosticSource version for net7.0 failing on correct configuration”v1.4.0: “Fix ASP.NET Core traces instrumentation for .NET7” |
有多处 .NET 7 相关适配/修复记录;可判断曾支持 .NET 7 场景,且 v1.4.0 明确修复 ASP.NET Core traces instrumentation for .NET7 (GitHub) (GitHub) |
| .NET Framework 4.6.2+ | 通用兼容性说明 | “The minimal supported version of .NET Framework is 4.6.2.” |
支持 .NET Framework 4.6.2 及以上版本;低于 4.6.2 不支持 (GitHub) |
安装¶
$module_url = "https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/download/v1.2.0/OpenTelemetry.DotNet.Auto.psm1"
$download_path = Join-Path $env:temp "OpenTelemetry.DotNet.Auto.psm1"
Invoke-WebRequest -Uri $module_url -OutFile $download_path -UseBasicParsing
Import-Module $download_path -Force
Install-OpenTelemetryCore
配置参数¶
支持多种方式配置参数
全局环境变量配置¶
请用 管理员 PowerShell 执行:
[Environment]::SetEnvironmentVariable("OTEL_SERVICE_NAME", "yishaweb2", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_TRACES_EXPORTER", "otlp", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_METRICS_EXPORTER", "none", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_LOGS_EXPORTER", "none", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_EXPORTER_OTLP_PROTOCOL", "http/protobuf", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_LOG_LEVEL", "debug", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_DOTNET_AUTO_LOGGER", "file", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_DOTNET_AUTO_LOG_DIRECTORY", "C:\ProgramData\OpenTelemetry .NET AutoInstrumentation\logs", "Machine")
[Environment]::SetEnvironmentVariable("OTEL_EXPORTER_OTLP_ENDPOINT", "http://127.0.0.1:9529/otel", "Machine")
执行后,查看是否写入成功:
$names = @(
"OTEL_SERVICE_NAME",
"OTEL_TRACES_EXPORTER",
"OTEL_METRICS_EXPORTER",
"OTEL_LOGS_EXPORTER",
"OTEL_EXPORTER_OTLP_PROTOCOL",
"OTEL_LOG_LEVEL",
"OTEL_DOTNET_AUTO_LOGGER",
"OTEL_DOTNET_AUTO_LOG_DIRECTORY",
"OTEL_EXPORTER_OTLP_ENDPOINT"
)
foreach ($name in $names) {
"{0} = {1}" -f $name, [Environment]::GetEnvironmentVariable($name, "Machine")
}
如果是 IIS 应用,需要重启应用池或 IIS 后才会读取新的全局变量:
或者:
IIS 直接配置¶
powershell
notepad C:\Windows\System32\inetsrv\config\applicationHost.config
在对应的网站节点下添加,这种方式适合对部分站点采集链路配置。
xml
<add name="ys" />
<add name="yishaweb2">
<environmentVariables>
<add name="OTEL_SERVICE_NAME" value="yishaweb2" />
<add name="OTEL_TRACES_EXPORTER" value="otlp" />
<add name="OTEL_METRICS_EXPORTER" value="none" />
<add name="OTEL_LOGS_EXPORTER" value="none" />
<add name="OTEL_EXPORTER_OTLP_PROTOCOL" value="http/protobuf" />
<add name="OTEL_LOG_LEVEL" value="debug" />
<add name="OTEL_DOTNET_AUTO_LOGGER" value="file" />
<add name="OTEL_DOTNET_AUTO_LOG_DIRECTORY" value="C:\ProgramData\OpenTelemetry .NET AutoInstrumentation\logs" />
<add name="OTEL_EXPORTER_OTLP_ENDPOINT" value="http://127.0.0.1:9529/otel" />
</environmentVariables>
</add>
注意:如果 applicationHost.config / AppPool 里也配置了同名环境变量,应用池级别的变量通常会覆盖 Machine 级变量。如果你想统一用全局配置,需要删除或修改 AppPool 里的同名 OTEL_* 配置。