Føj observability til et cloudbaseret program

Fuldført

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.Activity og System.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.

Et diagram, der viser de forskellige OpenTelemetry-komponenter i appen.

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.