文章目錄
[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 台灣 授權條款 釋出。