0

0

什么是 OpenTelemetry,如何集成到 .NET 应用中?

煙雲

煙雲

发布时间:2025-10-13 13:21:01

|

1024人浏览过

|

来源于php中文网

原创

OpenTelemetry在.NET中通过集成SDK实现追踪、指标和日志的统一采集,使用NuGet包如OpenTelemetry.Extensions.Hosting和Instrumentation组件,在Program.cs中配置ASP.NET Core和HttpClient的自动监控,并通过OTLP导出数据;结合Jaeger等后端可查看调用链,需确保服务名设置正确且网络通畅。

什么是 opentelemetry,如何集成到 .net 应用中?

OpenTelemetry 是一个开源的观测性框架,用于统一采集应用的追踪(Tracing)、指标(Metrics)和日志(Logs)。它帮助开发者监控分布式系统中的请求流程,定位性能瓶颈,并了解服务间的调用关系。在 .NET 应用中集成 OpenTelemetry,可以轻松实现对 HTTP 请求、数据库调用、依赖服务等操作的自动遥测数据收集。

安装必要的 NuGet 包

要在 .NET 应用中启用 OpenTelemetry,需要引入相关 SDK 和扩展包。以下是最常用的几个包:

  • OpenTelemetry:核心库
  • OpenTelemetry.Extensions.Hosting:与 ASP.NET Core 集成
  • OpenTelemetry.Instrumentation.AspNetCore:自动收集 ASP.NET Core 请求信息
  • OpenTelemetry.Instrumentation.Http:跟踪 HttpClient 调用
  • OpenTelemetry.Exporter.Otlp:将数据导出到 OTLP 支持的后端(如 Jaeger、Prometheus、Tempo 等)

通过命令行或 Visual Studio 安装这些包:

dotnet add package OpenTelemetry.Extensions.Hosting dotnet add package OpenTelemetry.Instrumentation.AspNetCore dotnet add package OpenTelemetry.Instrumentation.Http dotnet add package OpenTelemetry.Exporter.Otlp

配置 OpenTelemetry 在 Program.cs 中

在 .NET 6+ 的 Minimal API 模型中,可以在 Program.cs 中配置 OpenTelemetry。以下是一个典型配置示例:

var builder = WebApplication.CreateBuilder(args); // 添加 OpenTelemetry 服务 builder.Services.AddOpenTelemetry() .WithTracing(tracing => tracing .AddAspNetCoreInstrumentation() // 监控 ASP.NET Core 请求 .AddHttpClientInstrumentation() // 监控 HttpClient 调用 .AddOtlpExporter()); // 导出到 OTLP 接收器 var app = builder.Build(); app.MapGet("/", () => "Hello World!"); app.Run();

这段代码启用了对 Web 请求和外部 HTTP 调用的自动追踪,并通过 OTLP 协议将追踪数据发送出去,默认会发往本地运行的 OpenTelemetry Collector 或兼容后端(如 http://localhost:4317)。

自定义追踪与添加上下文标签

除了自动收集,你还可以手动创建跨度(Span)来记录特定逻辑块的执行情况:

using var activity = MyActivitySource.StartActivity("BusinessOperation"); activity?.SetTag("user.id", "123"); // 执行业务逻辑

要使用自定义 Activity,需先定义 ActivitySource:

PageOn
PageOn

AI驱动的PPT演示文稿创作工具

下载
public static class MyActivitySource { public static readonly ActivitySource Instance = new ActivitySource("MyApp"); }

别忘了在项目中引用 System.Diagnostics.DiagnosticSource

查看追踪数据

要看到收集的数据,你需要一个后端观测平台。常见选择包括:

  • Jaeger:启动 Jaeger All-in-One 容器接收 OTLP 数据
  • Zipkin:支持 Zipkin 格式导出(可替换 OtlpExporter 为 ZipkinExporter)
  • OpenTelemetry Collector:作为中间代理,转发数据到多种后端

例如,使用 Docker 启动 Jaeger:

docker run -d --name jaeger \ -e COLLECTOR_OTLP_ENABLED=true \ -p 16686:16686 \ -p 4317:4317 \ jaegertracing/all-in-one

然后访问 http://localhost:16686 查看追踪界面。

基本上就这些。OpenTelemetry 在 .NET 中集成简单,自动化程度高,配合现代可观测性工具链能大幅提升问题排查效率。不复杂但容易忽略的是确保服务名称正确设置和网络可达性。

相关专题

更多
什么是分布式
什么是分布式

分布式是一种计算和数据处理的方式,将计算任务或数据分散到多个计算机或节点中进行处理。本专题为大家提供分布式相关的文章、下载、课程内容,供大家免费下载体验。

326

2023.08.11

分布式和微服务的区别
分布式和微服务的区别

分布式和微服务的区别在定义和概念、设计思想、粒度和复杂性、服务边界和自治性、技术栈和部署方式等。本专题为大家提供分布式和微服务相关的文章、下载、课程内容,供大家免费下载体验。

233

2023.10.07

class在c语言中的意思
class在c语言中的意思

在C语言中,"class" 是一个关键字,用于定义一个类。想了解更多class的相关内容,可以阅读本专题下面的文章。

465

2024.01.03

python中class的含义
python中class的含义

本专题整合了python中class的相关内容,阅读专题下面的文章了解更多详细内容。

13

2025.12.06

k8s和docker区别
k8s和docker区别

k8s和docker区别有抽象层次不同、管理范围不同、功能不同、应用程序生命周期管理不同、缩放能力不同、高可用性等等区别。本专题为大家提供k8s和docker区别相关的各种文章、以及下载和课程。

252

2023.07.24

docker进入容器的方法有哪些
docker进入容器的方法有哪些

docker进入容器的方法:1. Docker exec;2. Docker attach;3. Docker run --interactive --tty;4. Docker ps -a;5. 使用 Docker Compose。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

495

2024.04.08

docker容器无法访问外部网络怎么办
docker容器无法访问外部网络怎么办

docker 容器无法访问外部网络的原因和解决方法:配置 nat 端口映射以将容器端口映射到主机端口。根据主机兼容性选择正确的网络驱动(如 host 或 overlay)。允许容器端口通过主机的防火墙。配置容器的正确 dns 服务器。选择正确的容器网络模式。排除主机网络问题,如防火墙或连接问题。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

400

2024.04.08

docker镜像有什么用
docker镜像有什么用

docker 镜像是预构建的软件组件,用途广泛,包括:应用程序部署:简化部署,提高移植性。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

438

2024.04.08

Java编译相关教程合集
Java编译相关教程合集

本专题整合了Java编译相关教程,阅读专题下面的文章了解更多详细内容。

5

2026.01.21

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
光速学会docker容器
光速学会docker容器

共33课时 | 1.9万人学习

Docker 17 中文开发手册
Docker 17 中文开发手册

共0课时 | 0人学习

极客学院Docker视频教程
极客学院Docker视频教程

共33课时 | 17.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号