You need to enable JavaScript to run this app.
文档中心
应用性能监控全链路版

应用性能监控全链路版

复制全文
下载 pdf
接入指南
通过 OpenTelemetry 接入 .NET 应用
复制全文
下载 pdf
通过 OpenTelemetry 接入 .NET 应用
.Net应用在不同场景下有不同的接入方式,本文介绍通过OpenTelemetry进行.Net应用的接入操作,接入后可以实现自动收集Trace信息、自动生成Metric指标、以及调用链检索、日志检索等功能。​
OpenTelemetry是CNCF的一个可观测性项目,旨在提供可观测性领域的标准化方案,解决观测数据的数据模型、采集、处理、导出等的标准化问题,提供与三方vendor无关的服务。​
如果您的应用已经接入了OpenTelemetry的SDK,APMPlus服务端可以接收OpenTelemetry上报的数据。接入APMPlus后,您将获得RED指标生成能力、Trace多维检索、单链路检索、拓扑生成等多项能力。​
说明​
如果您需要隔离生产和测试数据,请参见将生产和测试数据隔离。​
使用限制​
  • OpenTelemetry Metrics转换为Prometheus Metrics时,存在一定限制:​
  • 不支持聚合方式为delta的数据。请不要修改SDK侧的默认聚合配置,保证SDK侧数据的聚合方式为cumulative。​
  • 工作区拥有独立的数据上报凭证,如需使用工作区进行数据管理和数据隔离,请确保 apmplus-opentelemetry-collector 组件已经升级至 v3.1.0 及以上版本。​
数据上报​
方式一:直接上报至 APMPlus 服务端​
可观测数据直接上报至 APMPlus 服务端,支持用户通过 grpc、http/protobuf 等方式进行数据上报。​
方式二:Otel Collector 转发【推荐】​
APMPlusOpenTelemetryCollector是APMPlus基于OpenTelemetryCollector二次开发的数据采集器。您可以在集群中安装 Opentelemetry Collector 做数据转发,有两种安装方式:​
  • 通过 VKE 集群组件中心,白屏安装 apmplus-opentelemetry-collector 组件。此外,推荐同时安装 apmplus-server-agent 组件,可以实现主机、进程维度的指标数据采集。​
  • ​Image​​
  • 通过服务接入页面提供的脚本手动安装。​
数据接入​
方式一:自动埋点​
  • 版本限制​
  • .NET SDK 6+​
  • .NET Framework暂不支持自动埋点​
  • 支持的框架​
  1. 使用ASP.NET Core编写Web应用。​
  1. 创建Demo应用。​
​
mkdir dotnet-simple-demo​
cd dotnet-simple-demo​
dotnet new web​
​
  1. 将Properties/launchSettings.json文件中的内容替换成以下配置。​
​
{​
"$schema": "http://json.schemastore.org/launchsettings.json",​
"profiles": {​
"http": {​
"commandName": "Project",​
"dotnetRunMessages": true,​
"launchBrowser": true,​
"applicationUrl": "http://localhost:8080",​
"environmentVariables": {​
"ASPNETCORE_ENVIRONMENT": "Development"​
}​
}​
}​
}​
​
  1. 构建应用。​
​
dotnet build​
​
  1. 为应用配置自动埋点。​
  1. Unix-shell​
  1. 下载并执行OpenTelemetry .NET自动埋点安装脚本。​
​
curl -L -O https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/otel-dotnet-auto-install.sh​
​
./otel-dotnet-auto-install.sh​
​
  1. 设置环境变量并运行OpenTelemetry .NET自动埋点脚本。​
​
export OTEL_TRACES_EXPORTER=otlp \​
OTEL_METRICS_EXPORTER=otlp \​
OTEL_LOGS_EXPORTER=otlp \​
OTEL_SERVICE_NAME=<service_name> \​
OTEL_EXPORTER_OTLP_PROTOCOL=<protocol> \​
OTEL_EXPORTER_OTLP_ENDPOINT=<apmplus_endpoint> \​
OTEL_EXPORTER_OTLP_HEADERS="x-byteapm-appkey=<app_key>"​
. $HOME/.otel-dotnet-auto/instrument.sh​
​
说明​
  • <service_name> 填写服务名,将展现在APMPlus的服务列表里。​
  • <protocol> 建议填写 grpc。​
  • <apmplus_endpoint> 按地域(上海、北京...)和接入网络类型(公网、私网)不同,填写地址不同,详情至 apmplus 服务接入页面获取具体的 endpoint。​
  1. PowerShell​
  1. 下载并执行OpenTelemetry .NET自动埋点安装脚本。​
​
$module_url = "https://github.com/open-telemetry/opentelemetry-dotnet-instrumentation/releases/latest/download/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​
Install-OpenTelemetryCore​
​
  1. 设置环境变量并运行OpenTelemetry .NET自动埋点脚本。​
​
$env:OTEL_TRACES_EXPORTER="otlp"​
$env:OTEL_METRICS_EXPORTER="otlp"​
$env:OTEL_LOGS_EXPORTER="otlp"​
$env:OTEL_EXPORTER_OTLP_PROTOCOL="<protocol>"​
$env:OTEL_EXPORTER_OTLP_ENDPOINT="<apmplus_endpoint>"​
$env:OTEL_EXPORTER_OTLP_HEADERS="x-byteapm-appkey=<app_key>"​
Register-OpenTelemetryForCurrentSession -OTelServiceName "<service_name>"​
​
说明​
  • <service_name> 填写服务名,将展现在APMPlus的服务列表里。​
  • <protocol> 建议填写 grpc。​
  • <apmplus_endpoint> 按地域(上海、北京...)和接入网络类型(公网、私网)不同,填写地址不同,详情至 apmplus 服务接入页面获取具体的 endpoint。​
  • <app_key> 填写服务接入控制台提供的app_key。​
  1. 运行并访问应用。​
  1. 运行应用。 ​
​
dotnet run​
​
  1. 使用以下命令访问应用,生成的调用链会自动上报至APMPlus。​
​
curl localhost:8080/​
​
方法二:半自动埋点​
  • 支持的版本:​
  • .NET ≥ 5.0​
  • .NET Core ≥ 2.0​
  • .NET Framework ≥ 4.6.1​
OpenTelemetry支持自动上传数十种.NET框架Trace的数据,详细的.NET框架列表请参见Supported Libraries。​
  1. 创建ASP.NET Core应用(Web应用)。​
请将<your-project-name>替换为实际的应用名。​
​
mkdir <your-project-name>​
cd <your-project-name>​
dotnet new mvc​
​
  1. 下载观测.NET应用必备的OpenTelemetry依赖。​
​
dotnet add package OpenTelemetry.Exporter.Console # 在控制台导出采集的数据​
dotnet add package OpenTelemetry.Extensions.Hosting​
dotnet add package OpenTelemetry.Exporter.OpenTelemetryProtocol # 以OTLP协议导出​
​
  1. 下载自动埋点依赖。​
下载为ASP.NET Core框架自动埋点的依赖,当应用收到HTTP请求时,会自动生成Span并上报。如需为其他框架自动埋点,请参考Supported Libraries下载对应依赖。​
​
dotnet add package OpenTelemetry.Instrumentation.AspNetCore​
​
  1. 修改<your-project-name>/Program.cs文件中的代码。​
  1. 在源文件开头导入所需包。​
​
using System.Diagnostics;​
using OpenTelemetry.Exporter;​
using OpenTelemetry.Resources;​
using OpenTelemetry.Trace;​
​
  1. 添加OpenTelemetry初始化代码。​
  • 使用gRPC协议上报。​
  • 请将以下代码中的<grpc_endpoint>和<token>替换成前提条件中获取的接入点信息和Token。​
​
// ...​
builder.Services.AddOpenTelemetry()​
.WithTracing(tracerProviderBuilder =>​
tracerProviderBuilder​
.AddSource(DiagnosticsConfig.ActivitySource.Name)​
.SetResourceBuilder(OpenTelemetry.Resources.ResourceBuilder.CreateDefault()​
.AddAttributes(new Dictionary<string, object> {​
{"service.name", "<service_name>"},​
{"host.name",DiagnosticsConfig.HostName}​
}))​
.AddAspNetCoreInstrumentation()​
.AddConsoleExporter() // 在控制台导出Trace数据,可选​
.AddOtlpExporter(opt =>​
{​
// 使用gRPC协议上报​
opt.Endpoint = new Uri("<apmplus_endpoint>");​
opt.Headers = "x-byteapm-appkey=<app_key>";​
opt.Protocol = OtlpExportProtocol.Grpc;​
})​
);​
// ...​
​
说明​
  • <service_name> 填写服务名,将展现在APMPlus的服务列表里。​
  • <apmplus_endpoint> 按地域(上海、北京...)和接入网络类型(公网、私网)不同,填写地址不同,详情至 apmplus 服务接入页面获取具体的 endpoint。​
  • <app_key> 填写服务接入控制台提供的app_key。​
  1. 在终端执行以下命令运行项目。​
​
dotnet run​
​
返回示例:​
在返回信息中获取URL,例如http://localhost:5107。 ​
​
Building...​
info: Microsoft.Hosting.Lifetime[14]​
Now listening on: http://localhost:5107​
info: Microsoft.Hosting.Lifetime[0]​
Application started. Press Ctrl+C to shut down.​
info: Microsoft.Hosting.Lifetime[0]​
Hosting environment: Development​
info: Microsoft.Hosting.Lifetime[0]​
Content root path: /path/to/<your-project-name>​
​
  1. 在浏览器中访问http://localhost:5107,返回以下页面则说明数据已上报至APMPlus。​
​​​
​
最近更新时间:2026.06.09 14:58:55
这个页面对您有帮助吗?
有用
有用
无用
无用