對雲端原生應用程式新增可檢視性
既然您已了解可檢視性的重要性,您即可了解如何將其包含在雲端原生應用程式中。 將 OpenTelemetry 新增至您的應用程式,即可進行此步驟。
將 OpenTelemetry 新增至您的應用程式
.NET 具有內建可檢視性工具的豐富生態系統,可產生記錄、計量和追蹤資料。 您可以使用這些工具,對雲端原生應用程式新增可檢視性。 這些程式庫包括:
- 記錄:
Microsoft.Extensions.Logging.ILogger
- 計量:
System.Diagnostics.Metrics.Meter
- 追蹤:
System.Diagnostics.Activity
和System.Diagnostics.ActivitySource
OpenTelemetry 會取用上述所有遙測,但首先您的雲端原生應用程式需要透過 NuGet 套件新增 OpenTelemetry 支援。 這些套件可以分類為三個群組:
類別 | Package | 描述 |
---|---|---|
Core API | OpenTelemetry | 提供核心 OpenTelemetry 功能的主要程式庫。 |
Core API | OpenTelemetry.Extensions.Hosting | 提供延伸模組方法,以在 ASP.NET Core 主機中自動啟動和停止 OpenTelemetry 追蹤。 |
檢測 | OpenTelemetry.Instrumentation.AspNetCore | ASP.NET Core 應用程式的檢測設備。 此套件會收集您應用程式的大量計量,您不需要撰寫任何程式碼。 |
Exporter | OpenTelemetry.Exporter.Console | 主控台的匯出工具可讓應用程式將遙測寫入主控台。 |
您的雲端原生應用程式中包括更多可用的檢測設備和匯出工具套件。 如需詳細資訊,請參閱 OpenTelemetry 的 .NET 可檢視性。 依您要建置的應用程式類型而定,您可以新增與您最相關的套件。
本課程模組主要介紹如何將 OpenTelemetry 和 eShopLite 雲端原生應用程式搭配使用。 此應用程式是以 .NET Core 和 Blazor WebAssembly 建置,因此這表示所有程式碼範例都是根據如何利用相依性插入來完成的。
您可以選擇將所有 OpenTelemetry
個套件包括在微服務應用程式的產品和 Microsoft Store 服務中。 不過,在實際的應用程式中,您有更多服務。 將所有這些套件新增至每一個都需要不必要的重複作業。 更好的方法是將新的診斷專案新增至您的解決方案,讓任何微服務都可以參考以進行觀察。
以下是一些範例程式碼,其會建立微服務可以呼叫以使用 OpenTelemetry 的方法 AddObservability
:
using OpenTelemetry.Metrics;
using OpenTelemetry.Resources;
using OpenTelemetry.Trace;
namespace Microsoft.Extensions.DependencyInjection;
public static class DiagnosticServiceCollectionExtensions
{
public static IServiceCollection AddObservability(this IServiceCollection services,
string serviceName,
IConfiguration configuration)
{
// create the resource that references the service name passed in
var resource = ResourceBuilder.CreateDefault().AddService(serviceName: serviceName, serviceVersion: "1.0");
// add the OpenTelemetry services
var otelBuilder = services.AddOpenTelemetry();
otelBuilder
// add the metrics providers
.WithMetrics(metrics =>
{
metrics
.SetResourceBuilder(resource)
.AddRuntimeInstrumentation()
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddEventCountersInstrumentation(c =>
{
c.AddEventSources(
"Microsoft.AspNetCore.Hosting",
"Microsoft-AspNetCore-Server-Kestrel",
"System.Net.Http",
"System.Net.Sockets");
})
.AddMeter("Microsoft.AspNetCore.Hosting", "Microsoft.AspNetCore.Server.Kestrel")
.AddConsoleExporter();
})
// add the tracing providers
.WithTracing(tracing =>
{
tracing.SetResourceBuilder(resource)
.AddAspNetCoreInstrumentation()
.AddHttpClientInstrumentation()
.AddSqlClientInstrumentation();
});
return services;
}
// Add the Prometheus endpoints to your service, this will expose the metrics at http://service/metrics
public static void MapObservability(this IEndpointRouteBuilder routes)
{
routes.MapPrometheusScrapingEndpoint();
}
}
該方法會傳回 IServiceCollection
類別,該類別可新增為 ASP.NET Core WebApplicationBuilder
的服務。
然後此動作會建立變數 var otelBuilder = services.AddOpenTelemetry()
來儲存 OpenTelemetry 建立器。 程式碼接著即可將計量和追蹤新增至 otelBuilder
。
例如,此設定會新增下列項目的檢測設備:
- ASP.NET Core
- C# 執行階段
- HttpCLient
- Kestrel 網頁伺服器
這些計量會在主控台中顯示。 .AddConsoleExporter()
方法會將匯出工具新增至建立器。
其也會將追蹤新增至主控台,以便:
- ASP.NET Core
- HttpClient
- SQL 用戶端
最後一行會傳 IServiceCollection
類別。
完成診斷專案後,只要將參考新增至專案,並將單一程式碼行新增至服務即可。 例如,若要在 [產品] 服務中包括 OpenTelemetry,請在 Product.csproj
檔案中新增專案參考:
<ProjectReference Include="..\Diagnostics\Diagnostics.csproj" />
然後將下列這一行新增至 builder
的宣告下的 Program.cs
檔案:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddObservability("Products", builder.Configuration);
讓我們將此程式碼新增至 [eShopLite] 應用程式中的 [產品] 服務。