
遺留系統的可觀測性救星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),僅供參考