文章目錄
將 ASP.NET gRPC 的 Trace 整合至 Grafana Tempo
之前筆記 將 ASP.NET 的 Trace 整合至 Grafana Tempo 紀錄到如何將 ASP.NET 的 Trace 整合至 Grafana Tempo,今天來看看如何將 ASP.NET gRPC 的 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
- OpenTelemetry.Instrumentation.GrpcNetClient 1.6.0-beta.3
- Grpc.AspNetCore 2.59.0
- Grpc.Net.Client 2.59.0
設定方式
情境說明:
- OtlpGrpcClient (Web Api 專案) 中的
/getweatherforecastgrpc
endpoint,加上 activity (span) - 使用 OtlpGrpcClient 本身的
GetWeatherGrpcAsync
method,加上 activity 並加入 tag - 呼叫 OtlpGrpcServer (Grpc Service 專案) 的
Greeter/SayHello
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
OpenTelemetry.Instrumentation.GrpcNetClient 1.6.0-beta.3
僅 OtlpGrpcClient 需要
Grpc.AspNetCore 2.59.0
僅 OtlpGrpcClient 需要
Grpc.Net.Client 2.59.0
僅 OtlpGrpcClient 需要
OtlpGrpcServer:Program.cs
OtlpGrpcClient:Program.cs
心得
實際效果
Home –> Explore
Outline 選
Tempo
& Query tpye 選Search
列出 trace 內容
點選
Trace ID
後,可以展開該 trace id 下的 activity (span)
OtlpGrpcClient 有沒有
tracing.AddHttpClientInstrumentation();
差很多有加入
tracing.AddHttpClientInstrumentation();
的結果沒有加入
tracing.AddHttpClientInstrumentation();
的結果
使用上與 ASP.NET WebApi:將 ASP.NET 的 Trace 整合至 Grafana Tempo 幾乎相同,只是 OtlpGrpcClient 多了一個
GrpcInstrumentation
設定:tracing.AddGrpcClientInstrumentation();
ASP.NET 8 在 macOS 上啟動 gRPC Service 時不用在刻意使用 Http1 與 insecure gRPC 了,之前筆記 在 macOS 上啟動 gRPC Service 時 HTTP/2 的問題 有提到這個問題,現在 ASP.NET 8 終於解決 HTTP/2 的問題了,詳情請看 官方文件 Microsoft Learn:HTTP/2 over TLS (HTTPS) support on macOS in Kestrel
完整程式碼請參考:Github:yowko/otlpgrpc
參考資料
- 使用 Docker Compose 啟動 Grafana Tempo
- 將 ASP.NET 的 Trace 整合至 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 呼叫
- 在 macOS 上啟動 gRPC Service 時 HTTP/2 的問題
- Microsoft Learn:HTTP/2 over TLS (HTTPS) support on macOS in Kestrel
- Github:yowko/otlpgrpc
文章作者 Yowko Tsai
上次更新 2023-12-01
授權合約
本部落格 (Yowko's Notes) 所有的文章內容(包含圖片),任何轉載行為,必須通知並獲本部落格作者 (Yowko Tsai) 的同意始得轉載,且轉載皆須註明出處與作者。
Yowko's Notes 由 Yowko Tsai 製作,以創用CC 姓名標示-非商業性-相同方式分享 3.0 台灣 授權條款 釋出。