ARTICLE DETAIL

资讯详情

深耕网站视觉设计与运营推广的一线实战洞察。

遗留系统的可观测性救星:opentelemetry-dotnet-contrib 的 ASP.NET、OWIN 与 WCF 传统埋点三部曲

遗留系统的可观测性救星: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),仅供参考
返回列表