文章目錄
[Jaeger] 使用 OpenTelemetry 來追蹤 ASP.NET Core
前幾天看到微軟官方部落格 OpenTelemetry .NET reaches v1.0 公開了 OpenTelemetry .NET v1.0 版,之前在研究 OpenTracing 也有考慮過 OpenTelemetry 畢竟大一統的規格未來性跟前景應該都比較好,但當時相關套件在 .NET 環境中還相當欠缺;既然看到官方公開宣告了,想必已達可用水準,立馬來測試看看吧
如果想與使用 OpenTracing 做比較可以參考之前筆記 使用 Jaeger 追蹤 ASP.NET Core 呼叫
基本環境說明
- macOS Big Sur 11.2.3
- docker desktop 3.2.2 (61853) - jaegertracing/all-in-one:1.22
 
- .NET Core SDK 5.0.103 - ASP.NET Core 預設專案範本
 
- NuGet packages - OpenTelemetry.Extensions.Hosting 1.0.0-rc3
- OpenTelemetry.Instrumentation.AspNetCore 1.0.0-rc3
- OpenTelemetry.Exporter.Jaeger 1.1.0-beta1
 
設定方式
- 建立 Jaeger 環境 - docker run -d --name jaeger \ -e COLLECTOR_ZIPKIN_HOST_PORT=:9411 \ -p 5775:5775/udp \ -p 6831:6831/udp \ -p 6832:6832/udp \ -p 5778:5778 \ -p 16686:16686 \ -p 14268:14268 \ -p 14250:14250 \ -p 9411:9411 \ jaegertracing/all-in-one:1.22
- 安裝 NuGet 套件 - OpenTelemetry.Extensions.Hosting 1.0.0-rc3
- OpenTelemetry.Instrumentation.AspNetCore 1.0.0-rc3
- OpenTelemetry.Exporter.Jaeger 1.1.0-beta1
 
- 新增 config - { "Jaeger": { "ServiceName": "jaeger-test", "AgentHost": "localhost", "AgentPort": 6831 } }
- 註冊 Jaeger - Startup.cs 的 - ConfigureServices方法- services.AddOpenTelemetryTracing((builder) => builder .SetResourceBuilder(ResourceBuilder.CreateDefault().AddService(this.Configuration.GetValue<string>("Jaeger:ServiceName"))) .AddAspNetCoreInstrumentation() .AddJaegerExporter()); services.Configure<JaegerExporterOptions>(this.Configuration.GetSection("Jaeger"));
- 實際效果   
心得
整體設定流程與 OpenTracing 類似,但整合度較高 (註冊時有較完整的 extention method),使用上算便利
但看得出相關專案應該還是調整中,不少相對應的 NuGet 套件需要使用 beta 版本才能安裝使用
完整程式碼可以參考:yowko/aspdotnet-core-opentelemetry
參考資訊
文章作者 Yowko Tsai
上次更新 2021-04-03
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
 Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。
