遗留系统的可观测性救星:opentelemetry-dotnet-contrib 的 ASP.NET、OWIN 与 WCF 传统埋点三部曲
遗留系统的可观测性救星opentelemetry-dotnet-contrib 的 ASP.NET、OWIN 与 WCF 传统埋点三部曲【免费下载链接】opentelemetry-dotnet-contribThis repository contains set of components extending functionality of the OpenTelemetry .NET SDK. Instrumentation libraries, exporters, and other components can find their home here.项目地址: https://gitcode.com/gh_mirrors/op/opentelemetry-dotnet-contrib还在维护跑在 IIS 上的老网站、OWINKatana服务或 WCF 服务却苦于接不上现代可观测性opentelemetry-dotnet-contrib 是 OpenTelemetry .NET SDK 的官方扩展仓库汇集了指纹埋点库、导出器与其他扩展组件。本文带你快速掌握其中的传统埋点三部曲——面向 ASP.NET、OWIN 与 WCF 的三大埋点组件让遗留系统的请求链路、耗时与异常一目了然。为什么遗留系统需要传统埋点很多企业的核心业务仍运行在经典技术栈上IIS 承载的 ASP.NET Web 应用、OWIN 自托管服务、以及 WCF 服务总线。这些框架没有内置 ActivitySource通用探针往往够不着。opentelemetry-dotnet-contrib 通过为每个老框架定制专用埋点库来解决这个问题——它们以 HttpModule、OWIN 中间件、WCF 行为扩展等老框架原生姿势切入请求管道把入站请求自动转换为分布式追踪Trace与指标Metrics再交给统一的 OpenTelemetry SDK 导出到后端。你的技术栈对应的埋点组件IIS ASP.NETWebForms / WebAPIOpenTelemetry.Instrumentation.AspNetOWIN / Katana 自托管OpenTelemetry.Instrumentation.OwinWCF 客户端 / 服务端OpenTelemetry.Instrumentation.Wcf三部曲总览一分钟看懂三大组件组件稳定性接入方式文档入口ASP.NET 埋点✅ 稳定版StableWeb.config 注册 HttpModule 启动时启用src/OpenTelemetry.Instrumentation.AspNet/README.mdOWIN 埋点 Beta管道最前注册中间件 启动时启用src/OpenTelemetry.Instrumentation.Owin/README.mdWCF 埋点 Beta配置文件行为 / 代码行为 / 特性标注三种方式src/OpenTelemetry.Instrumentation.Wcf/README.md三个组件都遵循同一个思路骨架负责在请求管道中发出诊断事件启用扩展方法负责把事件转换成 Activity 与指标。第一幕ASP.NET 埋点——给 IIS 老应用装上眼睛 最快上手三步完成 ASP.NET 埋点配置Step 1安装包。通过 NuGet 安装OpenTelemetry.Instrumentation.AspNet它会隐式依赖负责真正埋点的 HttpModule 包system.webServer modules add nameTelemetryHttpModule typeOpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule, OpenTelemetry.Instrumentation.AspNet.TelemetryHttpModule preConditionintegratedMode,managedHandler / /modules /system.webServer 若使用 packages.config 方式引用web.config变换通常会自动完成这段注册详见 web.config.install.xdt。Step 2启动时启用埋点。在Global.asax.cs的Application_Start中用扩展方法.AddAspNetInstrumentation()注册埋点并挂上导出器如 OTLP。该方法定义在 AspNetInstrumentationTracerProviderBuilderExtensions.cs官方示例可直接参考 Global.asax.cs。Step 3同样一行开启指标。对MeterProviderBuilder调用相同的.AddAspNetInstrumentation()即可采集请求耗时指标指标不依赖追踪独立生效。进阶过滤、富集与异常记录Filter 过滤通过AspNetTraceInstrumentationOptions.Filter只采集指定请求如仅 GET。官方建议优先用基于url.path的采样器Sampler做过滤开销更低。Enrich 富集EnrichWithHttpRequest/EnrichWithHttpResponse/EnrichWithException三个回调可访问原始请求、响应与异常对象给 Span 追加自定义标签。RecordException打开后会把异常作为 ActivityEvent 记录自动将 Span 状态置为 Error。埋点核心逻辑位于 TelemetryHttpModule.cs它通过OnRequestStartedCallback、OnRequestStoppedCallback、OnExceptionCallback三个回调驱动整个生命周期。第二幕OWIN 埋点——中间件管道里的隐形探针 ️OWINKatana是自托管场景的经典选择其埋点完全基于中间件实现。一键接入UseOpenTelemetry AddOwinInstrumentation接入分两步且顺序很关键——中间件必须注册在其他所有中间件之前这样才能从请求进门的那一刻就开始计时appBuilder.UseOpenTelemetry(); // 注册诊断事件中间件放在管道最前 using var provider Sdk.CreateTracerProviderBuilder() .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(Owin-Example)) .AddOwinInstrumentation() .AddConsoleExporter() .Build();完整可运行示例见 Program.cs中间件扩展方法UseOpenTelemetry定义在 AppBuilderExtensions.cs。你会自动获得哪些 Span 属性OWIN 埋点默认写入低基数的标准 HTTP 属性http.request.method、http.response.status_code、server.address、url.path、user_agent.original等。贴心的是查询串值默认会被脱敏为Redacted?key1value1→?key1Redacted如需关闭可设置环境变量OTEL_DOTNET_EXPERIMENTAL_OWIN_DISABLE_URL_QUERY_REDACTION为true。 小技巧OWIN 不暴露路由模板Span 名默认是HTTP GET/HTTP POST。在路由解析后把Activity.Current.DisplayName改为路由模板就能得到更直观的名字——官方示例中的ActivityDisplayNameRouteEnrichingHandler演示了标准做法。第三幕WCF 埋点——服务总线的分布式追踪 ⚡WCF 埋点是三部曲中覆盖面最广的它同时支持客户端与服务端、SOAP 与 JSON 负载、HTTP/HTTPS 与 Net.TCP 传输含加密与流式模式。第一步TracerProvider 一行启用using var provider Sdk.CreateTracerProviderBuilder() .AddWcfInstrumentation() .Build();三种挂载方式按需选择方式适用对象说明配置文件行为扩展.NET Framework 客户端/服务端在App.config/Web.config中挂telemetryExtension可精确到端点或整个服务代码添加 Behavior.NET Core / .NET 客户端client.Endpoint.EndpointBehaviors.Add(new TelemetryEndpointBehavior())特性标注[TelemetryContractBehavior]服务契约接口一处标注客户端与服务端同时生效最省事特性实现在 TelemetryContractBehaviorAttribute.cs各方式完整 XML/代码示例可在 src/OpenTelemetry.Instrumentation.Wcf/README.md 找到可运行的客户端/服务端样例见 examples/wcf。别忘了服务端限制WCF 的服务端埋点仅在 .NET Framework 上可用.NET Core/.NET 只提供客户端库。同时RecordException选项可在服务端与客户端记录异常事件并配合Enrich回调访问原始Message追加自定义标签。埋点之后你能看到什么数据三个组件的指标口径统一均遵循 HTTP 指标语义约定指标名类型单位含义http.server.request.duration直方图Histogram秒HTTP 服务端请求耗时追踪侧则获得标准 HTTP/RPC Span自动完成链路上下文传播ASP.NET 默认启用 W3C Trace Context Baggage跨系统串联调用链。上手前必知的 4 个注意事项 ⚠️组件状态ASP.NET 为稳定版OWIN 与 WCF 为 Beta 版WCF 的 RPC 语义约定仍在演进升级前留意破坏性变更。程序集版本冲突给 .NET Framework 项目加包后Visual Studio 可能报版本冲突警告按提示在Web.config的runtime节添加 bindingRedirect 即可。过滤优先用采样器对 ASP.NET 埋点推荐用检查url.path的 Sampler 而非Filter可减少被过滤请求的子 Span 开销。中间件顺序OWIN 场景中UseOpenTelemetry()必须最先注册否则计时会漏掉前置中间件的耗时。结语让老系统也拥有现代可观测性 opentelemetry-dotnet-contrib 的这套传统埋点三部曲证明遗留系统不需要推倒重来只需按框架原生姿势挂上对应的 HttpModule、中间件或 WCF 行为就能把 ASP.NET、OWIN、WCF 的请求数据汇入 OpenTelemetry 统一体系。配合仓库中的 OTLP 等导出器老系统的分布式追踪与指标看板指日可待。【免费下载链接】opentelemetry-dotnet-contribThis repository contains set of components extending functionality of the OpenTelemetry .NET SDK. Instrumentation libraries, exporters, and other components can find their home here.项目地址: https://gitcode.com/gh_mirrors/op/opentelemetry-dotnet-contrib创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

相关新闻

Java文件删除失败全解析:从文件句柄到跨平台差异的解决方案

Java文件删除失败全解析:从文件句柄到跨平台差异的解决方案

1. 问题初探:为什么file.delete()会“失灵”?在Java开发中,尤其是处理文件上传、临时文件清理、日志轮转等场景时,我们经常会调用File对象的delete()方法来删除一个文件。代码写出来往往就一行:new File(“/path/to/fi…

2026/8/25 8:38:50 阅读更多 →
awesome-thesis进阶搜索技巧大全:Google Dorks与同义词搜索如何帮你快速挖到稀缺科研资料

awesome-thesis进阶搜索技巧大全:Google Dorks与同义词搜索如何帮你快速挖到稀缺科研资料

awesome-thesis进阶搜索技巧大全:Google Dorks与同义词搜索如何帮你快速挖到稀缺科研资料 【免费下载链接】awesome-thesis A curated list of practical tips and tricks to help you achieve an awesome CS master thesis [WIP] - contributions are welcome 项…

2026/8/25 8:38:50 阅读更多 →
Java调用Windows API实战:JNA原理与系统级开发指南

Java调用Windows API实战:JNA原理与系统级开发指南

1. 为什么 Java 程序员需要亲手敲开 Windows 系统的大门? Java 的“一次编写,到处运行”是教科书里的金句,但现实里,你总得和 Windows 打交道——不是为了写个跨平台 GUI,而是要干点真正“接地气”的事:比…

2026/8/26 10:50:41 阅读更多 →

最新新闻

Mathtype公式批量修改全攻略:从原理到实践,彻底解决排版难题

Mathtype公式批量修改全攻略:从原理到实践,彻底解决排版难题

1. 引言:从一次痛苦的论文排版经历说起如果你也曾经在深夜,面对一篇几十页、包含上百个公式的学术论文或技术报告,因为导师或期刊要求“所有公式统一为10.5磅”,而不得不一个个手动点开Mathtype公式、进入“大小”菜单、选择“定义…

2026/8/26 11:17:55 阅读更多 →
CSP-J 2022《上升点列》题解:动态规划在二维序列问题中的应用

CSP-J 2022《上升点列》题解:动态规划在二维序列问题中的应用

1. 问题引入:当“点”不再孤单,如何用算法编织最长“链”?如果你在洛谷上刷过一些动态规划(DP)的题目,可能会觉得很多题目的模型都似曾相识:背包问题、最长上升子序列、区间DP……但CSP-J 2022的…

2026/8/26 11:17:55 阅读更多 →
Python文件存储图书馆系统:从CSV到数据一致性实战

Python文件存储图书馆系统:从CSV到数据一致性实战

1. 项目概述:为什么一个用文件存数据的图书馆系统,反而更值得认真做? “Python实现图书馆借阅管理系统——文件存储”,光看标题,很多人第一反应是:“这不就是课设水平?用SQLite或者MySQL不是更专…

2026/8/26 11:17:55 阅读更多 →
Three.js实战:从零构建3D西瓜模型,掌握WebGL核心开发流程

Three.js实战:从零构建3D西瓜模型,掌握WebGL核心开发流程

1. 项目概述:在浏览器里种一颗3D西瓜 最近在捣鼓Three.js,总想着用它做点有意思的、能让人会心一笑的东西。正好天气热了,脑子里就蹦出个念头:能不能在浏览器里,用代码“种”出一颗看起来就清凉解渴的西瓜?…

2026/8/26 11:17:55 阅读更多 →
vlcms手游联运平台源码部署与二次开发实战指南

vlcms手游联运平台源码部署与二次开发实战指南

简介:在游戏分发与联运业务中,一套成熟的开源PHP源码能大幅降低平台搭建门槛。vlcms(溪谷软件)作为国内中小团队常用的手游联运系统,基于ThinkPHP框架构建,完整覆盖游戏展示、用户注册、充值订单、推广分销…

2026/8/26 11:16:50 阅读更多 →
软件测试环境搭建与流程规范:从零构建稳定高效的测试基石

软件测试环境搭建与流程规范:从零构建稳定高效的测试基石

1. 项目概述:为什么环境搭建是测试的基石干了十几年软件测试,我越来越觉得,测试环境搭建这事儿,就像盖房子前打地基。地基没打牢,房子盖得再漂亮,一阵风就倒了。很多新手,甚至一些工作了几年的同…

2026/8/26 11:16:50 阅读更多 →

日新闻

Python random 模块常用函数详解:从入门到实战

Python random 模块常用函数详解:从入门到实战

目录 1. 引言2. 准备工作3. 基础随机函数4. 序列相关函数5. 随机种子与复现6. 实战案例7. 注意事项8. 常见问题与排查9. 总结 1. 引言 摘要: 本文系统介绍 Python 标准库 random 模块中最常用的随机数生成函数。内容涵盖基础随机函数(random()、unifor…

2026/8/26 0:00:40 阅读更多 →
《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》读书笔记--第三章Databases and Database Files(2)

《Microsoft Sql server 2008 Internals》索引目录: 《Microsoft Sql server 2008 Internals》读书笔记--目录索引 在上篇文章中,主要介绍了创建数据库的基本语法和FileGroup的初步知识。需要注意的是: 关于FileGroup 如果你的系统是用Raid设备直接存…

2026/8/26 1:18:18 阅读更多 →
政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体怎么建?三种模式、三步路径与四个误区

政务AI智能体已经从概念试点阶段,转入了政务服务的常态化落地应用;在实际使用过程中,它能自主理解办事需求、辅助完成填报申报、开展材料预审,并联动多个系统协同作业,真正嵌入到政务办理的全流程当中。但在落地推进过…

2026/8/26 1:18:18 阅读更多 →

周新闻

[光学原理与应用-521]:对光的错误理解与纠偏

[光学原理与应用-521]:对光的错误理解与纠偏

首先光是一种能量的载体和形态,宏观上观察到的光是由无数个微观的光量子组成的,每个光子在产生的瞬间,其在真空的空间中以确定不变的速度沿着一个初始的方向一直向前,在微观层面,每个光量子的运动轨迹是以波函数所展现…

2026/8/25 3:38:12 阅读更多 →
SIP通话转接原理与REFER方法实战解析

SIP通话转接原理与REFER方法实战解析

1. 通话转接不是“挂断再拨号”,而是SIP会话的动态重定向你有没有遇到过这样的场景:客服坐席A正在和客户通电话,突然需要把这通对话无缝转给专家坐席B,客户完全感知不到中间的断连——既没听到忙音,也没被要求重新拨号…

2026/8/25 3:38:18 阅读更多 →
Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

Kolla-ansible单节点OpenStack部署实战:从环境准备到排坑指南

1. 为什么选择Kolla-ansible来部署单节点OpenStack?如果你正在寻找一种能把OpenStack从“概念”快速变成“可用的实验环境”的方法,那么Kolla-ansible几乎是当前最主流、最省心的选择。我见过太多人卡在手动编译依赖、配置服务、处理版本冲突的泥潭里&am…

2026/8/25 3:38:23 阅读更多 →

月新闻

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南

免费解锁百度网盘SVIP加速:macOS用户必备的下载提速终极指南 【免费下载链接】BaiduNetdiskPlugin-macOS For macOS.百度网盘 破解SVIP、下载速度限制~ 项目地址: https://gitcode.com/gh_mirrors/ba/BaiduNetdiskPlugin-macOS 还在为百度网盘macOS版的龟速下…

2026/8/26 3:50:20 阅读更多 →
终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换

终极ncmdump指南:3分钟实现网易云NCM音乐解密与格式转换 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 还在为网易云音乐下载的NCM格式文件无法在其他播放器播放而烦恼吗?ncmdump解密工具帮你轻松解决这个困…

2026/8/25 10:31:12 阅读更多 →
HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

HarmonyOS 应用开发《掌上英语》第81篇: 智能体卡片:为英语学习 App 打造桌面级学习助手

AgentCard 智能体卡片:为英语学习 App 打造桌面级学习助手适用平台:HarmonyOS 7.0 (API 26 Beta)一、引言 HarmonyOS 7.0(API 26 Beta)新增了 AgentCard 智能体卡片能力,这是继 HMAF(鸿蒙智能体框架&#x…

2026/8/26 1:24:05 阅读更多 →