Føj observability til et cloudbaseret program
Nu, hvor du forstår vigtigheden af observability, kan du se, hvordan du kan inkludere det i dit oprindelige program i cloudmiljøet. Du gør dette trin ved at føje OpenTelemetry til din app.
Føj OpenTelemetry til din app
.NET har et omfattende økosystem med indbyggede observability-værktøjer, der producerer logføring, målepunkter og sporingsdata. Du kan bruge disse værktøjer til at føje observability til dit oprindelige program i cloudmiljøet. Disse biblioteker er:
-
Logføring:
Microsoft.Extensions.Logging.ILogger -
målepunkter:
System.Diagnostics.Metrics.Meter -
sporing:
System.Diagnostics.ActivityogSystem.Diagnostics.ActivitySource
OpenTelemetry bruger al den foregående telemetri, men først skal din cloudbaserede app tilføje Understøttelse af OpenTelemetry via NuGet-pakker. Disse pakker kan kategoriseres i tre grupper:
| Kategori | Pakke | Beskrivelse |
|---|---|---|
| API-til core | OpenTelemetry- | Det primære bibliotek, der leverer den centrale OpenTelemetry-funktionalitet. |
| API-til core | OpenTelemetry.Extensions.Hosting | Indeholder udvidelsesmetoder til automatisk start og stop af OpenTelemetry-sporing i ASP.NET Core-værter. |
| instrumentering | OpenTelemetry.Instrumentation.AspNetCore | Instrumentering til ASP.NET Core-programmer. Denne pakke indsamler et stort antal målepunkter om din app, uden at du behøver at skrive kode. |
| eksportør | OpenTelemetry.Exporter.Console | Eksportør til konsollen gør det muligt for appen at skrive telemetri til konsollen. |
Mange flere instrumenterings- og eksporteksportørpakker er tilgængelige, som kan inkluderes i din oprindelige app i cloudmiljøet. Du kan finde flere oplysninger under .NET-observabilitet med OpenTelemetry. Afhængigt af hvilken type app du bygger, kan du tilføje de pakker, der er mest relevante for dig.
I dette modul fokuseres der på brug af OpenTelemetry med eShopLite cloudbaseret app. Denne app er bygget med .NET Core og Blazor WebAssembly, så det betyder, at alle kodeeksempler er baseret på at drage fordel af afhængighedsinjektion.
Du kan vælge at inkludere alle de OpenTelemetry pakker til både Products og Store-tjenester i microservices-appen. Men i en app i den virkelige verden har du mange flere tjenester. Tilføjelse af alle disse pakker til hver enkelt indebærer unødvendig duplikering. En bedre tilgang er at føje et nyt diagnosticeringsprojekt til din løsning, som enhver mikrotjeneste kan referere til, der skal overholdes.
Her er nogle eksempelkode, der opretter en metode AddObservability, som en mikrotjeneste kan kalde for at bruge 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();
}
}
Metoden returnerer en IServiceCollection klasse, der kan føjes som en tjeneste til en ASP.NET Core-WebApplicationBuilder.
Denne handling opretter derefter en variabel var otelBuilder = services.AddOpenTelemetry() til lagring af OpenTelemetry Builder. Koden kan derefter føje målepunkter og sporinger til otelBuilder.
Denne konfiguration tilføjer f.eks. instrumentering for:
- ASP.NET Core
- C# Køretid
- HttpCLient
- Kestrel-webserver
Disse målepunkter vises i konsollen. Metoden .AddConsoleExporter() føjer eksportøren til generatoren.
Det føjer også sporing til konsollen for:
- ASP.NET Core
- HttpClient
- SQL-klient
Den sidste linje returnerer klassen IServiceCollection.
Når diagnosticeringsprojektet er fuldført, er det lige så enkelt som at føje en reference til projektet og en enkelt kodelinje til tjenesten. Hvis du f.eks. vil medtage OpenTelemetry i tjenesten Products, skal du tilføje projektreferencen i din Product.csproj-fil:
<ProjectReference Include="..\Diagnostics\Diagnostics.csproj" />
Føj derefter følgende linje til Program.cs-filen under erklæringen fra builder:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddObservability("Products", builder.Configuration);
Lad os føje denne kode til Products-tjenesterne i appen eShopLite.