Přidat pozorovatelnost do cloudově nativní aplikace
Teď, když rozumíte důležitosti pozorovatelnosti, uvidíte, jak ho můžete zahrnout do nativní cloudové aplikace. Uděláte to tak, že do aplikace přidáte OpenTelemetry.
Přidání OpenTelemetry do aplikace
.NET má bohatý ekosystém integrovaných nástrojů pozorovatelnosti, které vytvářejí protokolování, metriky a trasovací data. Pomocí těchto nástrojů můžete do aplikace nativní pro cloud přidat pozorovatelnost. Tyto knihovny jsou:
-
Protokolování:
Microsoft.Extensions.Logging.ILogger -
Metriky:
System.Diagnostics.Metrics.Meter -
Trasování:
System.Diagnostics.ActivityaSystem.Diagnostics.ActivitySource
OpenTelemetry spotřebovává veškerou předchozí telemetrii, ale první z vašich nativních cloudových aplikací musí prostřednictvím balíčků NuGet přidat podporu OpenTelemetry. Tyto balíčky je možné kategorizovat do tří skupin:
| Kategorie | Balíček | Popis |
|---|---|---|
| Základní rozhraní API | OpenTelemetry | Hlavní knihovna, která poskytuje základní funkce OpenTelemetry. |
| Základní rozhraní API | OpenTelemetry.Extensions.Hosting | Poskytuje rozšiřující metody pro automatické spouštění a zastavování trasování OpenTelemetry v hostitelích ASP.NET Core. |
| Instrumentace | OpenTelemetry.Instrumentation.AspNetCore | Instrumentace pro aplikace ASP.NET Core. Tento balíček shromažďuje velký počet metrik o vaší aplikaci, aniž byste museli psát jakýkoli kód. |
| Vývozce | OpenTelemetry.Exporter.Console | Exportér konzoly umožňuje aplikaci zapisovat telemetrii do konzoly. |
Do vaší cloudové aplikace je k dispozici mnoho dalších balíčků pro instrumentaci a exportéry. Další informace najdete v tématu Pozorovatelnost rozhraní .NET pomocí OpenTelemetry. V závislosti na typu aplikace, kterou vytváříte, můžete přidat balíčky, které jsou pro vás nejdůležitější.
Tento modul se zaměřuje na použití OpenTelemetry s aplikací eShopLite nativní pro cloud. Tato aplikace je sestavená pomocí .NET Core a Blazor WebAssembly, takže všechny příklady kódu jsou založené na využití injektáže závislostí.
V aplikaci mikroslužeb můžete zahrnout všechny OpenTelemetry balíčky do služeb Products i Store . V reálné aplikaci ale máte mnoho dalších služeb. Přidání všech těchto balíčků do každého z nich zahrnuje zbytečné duplikování. Lepší postup je přidat do vašeho řešení nový projekt diagnostiky, na který může odkazovat jakákoli mikroslužba pro sledování.
Tady je příklad kódu, který vytvoří metodu AddObservability, kterou může mikroslužba volat za účelem použití OpenTelemetry:
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();
}
}
Metoda vrátí třídu IServiceCollection, kterou lze přidat jako službu do ASP.NET Core WebApplicationBuilder.
Tato akce pak vytvoří proměnnou var otelBuilder = services.AddOpenTelemetry() pro uložení konfigurátoru OpenTelemetry. Kód pak může přidat metriky a trasování do otelBuilder.
Tato konfigurace například přidává instrumentaci pro:
- ASP.NET Core
- C# Runtime
- HttpClient
- Webový server Kestrel
Tyto metriky se zobrazují v konzole. Metoda .AddConsoleExporter() přidá exportér do builderu.
Přidá také trasování do konzoly pro:
- ASP.NET Core
- HttpClient
- Klient SQL
Poslední řádek vrátí třídu IServiceCollection.
Když je projekt diagnostiky dokončený, stačí přidat odkaz na projekt a jeden řádek kódu do služby. Pokud chcete například zahrnout OpenTelemetry do služby Products , přidejte do souboru odkaz na Product.csproj projekt:
<ProjectReference Include="..\Diagnostics\Diagnostics.csproj" />
Do souboru Program.cs pod deklaraci builderpřidejte následující řádek:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddObservability("Products", builder.Configuration);
Pojďme tento kód přidat do služeb Produktů v aplikaci eShopLite .