Aspire Dashboard — 本地 OTel 後端

什麼是 Aspire Dashboard

Aspire Dashboard 是 .NET Aspire 生態系的一個獨立 UI 工具,用於視覺化 OpenTelemetry 資料(Traces、Logs、Metrics)。雖然源自 .NET 生態,但它接收標準 OTLP 協定,任何語言的應用程式都可以把遙測資料送進來。

選擇原因

  • 零安裝:一行 docker run,即可啟動完整 UI
  • 輕量:比完整 Jaeger + 儲存後端的 stack 簡單很多
  • UI 完整:Traces waterfall、Log viewer、關聯查詢一應俱全
  • 接受 OTLP:標準協定,不綁定語言或框架

docker-compose 設定

1
2
3
4
5
6
7
8
9
10
services:
aspire:
image: mcr.microsoft.com/dotnet/aspire-dashboard:latest
container_name: my-aspire
environment:
DOTNET_DASHBOARD_UNSECURED_ALLOW_ANONYMOUS: "true"
DOTNET_DASHBOARD_OTLP_HTTP_ENDPOINT_URL: "http://+:18890"
ports:
- "18888:18888" # Web UI
- "4318:18890" # OTLP HTTP/1.1 endpoint

啟動後:


⚠️ 關鍵坑:HTTP/1.1 vs gRPC Port

Aspire Dashboard 預設開兩個 OTLP port:

Port(容器內) 協定 說明
18889 gRPC(HTTP/2) 預設 OTLP/gRPC
18890 HTTP/1.1 OTLP/HTTP

Go 的 otlploghttp / otlptracehttp 使用 HTTP/1.1,不是 gRPC。
因此必須把容器的 18890(HTTP/1.1)對應到主機的 4318,而不是 18889(gRPC)。

錯誤設定(送到 gRPC port)→ 連線失敗或無資料:

1
2
ports:
- "4318:18889" # ❌ 錯:18889 是 gRPC,Go exporter 用 HTTP/1.1

正確設定:

1
2
3
4
environment:
DOTNET_DASHBOARD_OTLP_HTTP_ENDPOINT_URL: "http://+:18890" # 啟用 HTTP/1.1
ports:
- "4318:18890" # ✅ 對:18890 是 HTTP/1.1

應用程式設定

環境變數指定 OTLP 端點(ADK / OTel SDK 都會讀取):

1
OTEL_EXPORTER_OTLP_ENDPOINT=http://localhost:4318

或在程式碼中指定:

1
2
3
4
5
// Go with otlptracehttp
exporter, _ := otlptracehttp.New(ctx,
otlptracehttp.WithEndpoint("localhost:4318"),
otlptracehttp.WithInsecure(),
)