訓練
模組
使用 OpenTelemetry 在 .NET 雲端原生應用程式中實作可觀察性 - Training
瞭解可觀察性,以及如何在雲端原生應用程式中實作。 使用 OpenTelemetry 套件來輸出記錄、計量和追蹤數據,並分析 Application Insights 和第三方應用程式中的數據。
執行應用程式時,您想要知道應用程式執行程度,並在潛在問題變得更大之前偵測到這些問題。 若要這樣做,您可以發出遙測資料 (例如來自應用程式的記錄或計量),然後監視並分析該資料。
分散式系統內容中的可檢視性是監視並分析每個元件狀態相關遙測資料的能力,以便能夠觀察效能中的變更,以及診斷這些變更為何發生的原因。 不同於偵錯,這是侵入性的動作,而且可能會影響應用程式的作業,因此可檢視性旨在主要作業執行時呈現透明狀態,而且對效能的影響小到足以持續使用。
可檢視性通常是使用下列項目的組合來完成:
一起,記錄、計量和分散式追蹤有時稱為 可觀察性的三大要素。
每個支柱可能包含來自下列項目的遙測資料:
HttpClient
的程式庫。有幾種不同的方式可在 .NET 應用程式中實現可檢視性:
OpenTelemetry (OTel) 是一種跨平台開放式標準,用於收集和發出遙測資料。 OpenTelemetry 包括:
使用 OTel 可讓您使用廣泛不同的 APM 系統,包括開放原始碼系統,例如 Prometheus 和 Grafana、Azure 監視器 - Azure 中的 Microsoft APM 產品,或與 OpenTelemetry 合作的許多 APM 廠商所提供的 APM 產品。
大部分語言和平台都有 OpenTelemetry 實作,包括 .NET。
.NET OpenTelemetry 實作與其他平台稍有不同,因為 .NET 會在架構中提供記錄、計量和活動 API。 這表示 OTel 不需要提供 API 供程式庫作者使用。 .NET OTel 實作會使用這些平台 API 進行檢測:
OTel 開始發揮作用之處在於其會從這些 API 和其他來源收集遙測資料 (透過檢測程式庫),然後將這些資料們匯出至應用程式效能監視 (APM) 系統以進行儲存和分析。 OTel 做為業界標準帶來的好處是通用的收集機制、遙測資料的通用結構描述和語意,以及 APM 如何與 OTel 整合的 API。 使用 OTel 表示應用程式不需要使用 APM 特定的 API 或資料結構;其會針對 OTel 標準運作。 APM 可以實作 APM 特定的匯出工具元件或使用 OTLP,這是新的有線標準,用於將遙測資料匯出至 APM 系統。
.NET 中的 OpenTelemetry 會實作為一系列的 NuGet 套件,形成數個類別:
下表描述主要套件。
封裝名稱 | 描述 |
---|---|
OpenTelemetry | 提供核心 OTEL 功能的主要程式庫 |
OpenTelemetry.Instrumentation.AspNetCore | 針對 ASP.NET Core 和 Kestrel 的檢測 |
OpenTelemetry.Instrumentation.GrpcNetClient | 供 gRPC 用戶端用於追蹤輸出 gRPC 呼叫的檢測 |
OpenTelemetry.Instrumentation.Http | 供 HttpClient 和 HttpWebRequest 追蹤輸出 HTTP 呼叫的檢測 |
OpenTelemetry.Instrumentation.SqlClient | SqlClient 用來追蹤資料庫作業的檢測 |
OpenTelemetry.Exporter.Console | 主控台的匯出工具,通常用來診斷正在匯出的遙測資料 |
OpenTelemetry.Exporter.OpenTelemetryProtocol | 使用 OTLP 通訊協定的匯出工具 |
OpenTelemetry.Exporter.Prometheus.AspNetCore | 使用 ASP.NET Core 端點實作 Prometheus 的匯出工具 |
OpenTelemetry.Exporter.Zipkin | 用於 Zipkin 追蹤的匯出工具 |
本主題會繼續進行幾個在 .NET 中使用 OpenTelemetry 的範例逐步解說:
.NET Aspire 是 .NET 的一組延伸模組,可讓您輕鬆地建立及使用分散式應用程式。 使用 .NET Aspire 的優點之一,就是使用適用於 .NET 的 OpenTelemetry 連結庫來內建遙測。 .NET Aspire 的預設專案範本包含專案,其中一 ServiceDefaults
部分是安裝和設定 OTel。 服務預設專案是由 .NET Aspire 解決方案中的每個服務所參考和初始化。
服務預設值專案範本包含 OTel SDK、ASP.NET、HttpClient 和 Runtime Instrumentation 套件,以及檔案中設定的專案 Extensions.cs
。 若要匯出遙測 .NET Aspire,預設會包含OTLP匯出工具,以便使用Aspire儀錶板提供遙測視覺效果。
Aspire 儀錶板的設計目的是將遙測觀察帶入本機偵錯週期,這可讓開發人員不僅確保應用程式正在產生遙測,而且使用該遙測在本機診斷這些應用程式。 能夠觀察服務之間的呼叫,在偵錯階段與生產環境一樣有用。 當您從 Visual Studio 或dotnet run
AppHost
專案 F5 AppHost
專案時,會自動啟動 .NET Aspire 儀錶板。
如需 .NET Aspire 的詳細資訊,請參閱:
設定 ASP.NET 專案的 OTel 最簡單的方式可能是使用 Aspire Service Defaults 專案,即使不使用其他 .NET Aspire 專案,例如 AppHost 來進行協調流程。 服務預設值專案可透過Visual Studio或 dotnet new
作為專案範本。 它會設定 OTel 並設定 OTLP 匯出工具。 然後 ,您可以使用 OTel 環境變數 來設定 OTLP 端點以傳送遙測至 ,並提供應用程式的資源屬性。
在 .NET Aspire 外部使用 ServiceDefault 的步驟 如下:
dotnet new aspire-servicedefaults --output ServiceDefaults
var builder = WebApplication.CreateBuilder(args);
builder.ConfigureOpenTelemetry();
var app = builder.Build();
app.MapGet("/", () => "Hello World!");
app.Run();
如有需要,服務預設值可以透過 AddServiceDefaults()
或特定函式來設定下列額外功能:
/health
和 /alive
端點進行健康情況檢查訓練
模組
使用 OpenTelemetry 在 .NET 雲端原生應用程式中實作可觀察性 - Training
瞭解可觀察性,以及如何在雲端原生應用程式中實作。 使用 OpenTelemetry 套件來輸出記錄、計量和追蹤數據,並分析 Application Insights 和第三方應用程式中的數據。