文章目錄
將 ASP.NET 的 Trace 整合至 Grafana Tempo
之前筆記 使用 Docker Compose 啟動 Grafana Tempo 紀錄到如何透過 docker compose 快速建立 Grafana Tempo 測試環境,今天來看看如何將 ASP.NET 的 Trace 整合至 Grafana Tempo
過去 trace 相關筆記如下:
- OpenTracing
- OpenTelemetry
基本環境說明
- macOS Sonoma 14.1.1 (Apple M2 Pro)
- OrbStack Version 1.1.0 (16370)
- container images
- grafana/tempo:r124-c00e7ef
- grafana/grafana:10.2.2
- prom/prometheus:v2.48.0
- Grafana Tempo 環境建立請參考之前筆記 使用 Docker Compose 啟動 Grafana Tempo
- .NET SDK 8.0.100
NuGet Library
這邊 NuGet Library 的原則是有正式版就用正式版,像是
OpenTelemetry.Instrumentation.AspNetCore
跟OpenTelemetry.Instrumentation.Http
沒有發行過正式版就改用 beta 版本- OpenTelemetry.Exporter.Console 1.6.0
- OpenTelemetry.Exporter.OpenTelemetryProtocol 1.6.0
- OpenTelemetry.Extensions.Hosting 1.6.0
- OpenTelemetry.Instrumentation.AspNetCore 1.6.0-beta.3
- OpenTelemetry.Instrumentation.Http 1.6.0-beta.3
設定方式
情境說明:
- OtlpClient (Web Api 專案) 中的
/getweatherforecast
endpoint,加上 activity (span) - 使用 OtlpClient 本身的
GetWeatherAsync
method,加上 activity 並加入 tag - 呼叫 OtlpServer (Web Api 專案) 的
/weatherforecast
endpoint
安裝 NuGet Library
OpenTelemetry.Exporter.Console 1.6.0
這個主要是用來在 console 上顯示 trace 資訊,方便除錯
OpenTelemetry.Exporter.OpenTelemetryProtocol 1.6.0
OpenTelemetry.Extensions.Hosting 1.6.0
OpenTelemetry.Instrumentation.AspNetCore 1.6.0-beta.3
OpenTelemetry.Instrumentation.Http 1.6.0-beta.3
OtlpServer:Program.cs
OtlpClient:Program.cs
tracing.AddSource(sSource.Name ); 很重要,是為後續的 acitvity (span) 設定 parent source,如果沒有這行,後續的 activity 都長不出來
心得
實際效果
Home –> Explore
Outline 選
Tempo
& Query tpye 選Search
列出 trace 內容
點選
Trace ID
後,可以展開該 trace id 下的 activity (span)
OpenTelemetry 的 Github 上有 .NET 的範例:Github:open-telemetry/opentelemetry-dotnet 但寫法上與 Microsoft 官網:Microsoft Learn:.NET observability with OpenTelemetry 不同,可以多參考看不同寫法
完整程式碼請參考:Github:yowko/OtlpWebApi
參考資料
- 使用 Docker Compose 啟動 Grafana Tempo
- .NET Core 上使用 Jaeger 追蹤 gRPC 呼叫
- 使用 Jaeger 追蹤 ASP.NET Core 呼叫
- 使用 Jaeger 追蹤 ASP.NET Core 中的 class 呼叫
- [Jaeger] 使用 OpenTelemetry 來追蹤 ASP.NET Core
- [Zipkin] 使用 OpenTelemetry 來追蹤 ASP.NET Core
- [Jaeger] 使用 OpenTelemetry 來追蹤 ASP.NET Core 上的 gRPC 呼叫
- [Zipkin] 使用 OpenTelemetry 來追蹤 ASP.NET Core 上的 gRPC 呼叫
- Github:open-telemetry/opentelemetry-dotnet
- Microsoft Learn:.NET observability with OpenTelemetry
- Microsoft Learn:Adding distributed tracing instrumentation
- Microsoft Learn:.NET distributed tracing concepts
- Github:yowko/OtlpWebApi
文章作者 Yowko Tsai
上次更新 2023-11-29
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。