Oefening: OpenTelemetry toevoegen aan een cloudeigen toepassing

Voltooid

In deze oefening voegt u een nieuw diagnostisch project toe aan uw eShopLite oplossing. U ziet hoe u de NuGet-pakketten van OpenTelemetry toevoegt en vervolgens waarneembaarheid toevoegt aan de Products-service.

Open de ontwikkelomgeving en maak de Azure-resources

U kunt ervoor kiezen om een GitHub-coderuimte te gebruiken die als host fungeert voor de oefening of om de oefening lokaal uit te voeren in Visual Studio Code.

Als u een coderuimte wilt gebruiken, maakt u een vooraf geconfigureerde GitHub-coderuimte met dit codespacecreatiesjabloon.

Deze stap duurt enkele minuten terwijl GitHub de codespace maakt en configureert. Nadat het proces is voltooid, ziet u de codebestanden voor de oefening. De code die voor de rest van deze module wordt gebruikt, bevindt zich in de map /dotnet-observability.

Als u Visual Studio Code-wilt gebruiken, kloont u de https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative opslagplaats naar uw lokale computer. Dan:

  1. Installeer de nodige systeemvereisten om Dev Container in Visual Studio Code uit te voeren.
  2. Zorg ervoor dat Docker wordt uitgevoerd.
  3. Open in een nieuw Visual Studio Code-venster de map van de gekloonde opslagplaats
  4. Druk op Ctrl+Shift+P om het opdrachtenpalet te openen.
  5. Zoeken: >Dev-containers: herbouwen en opnieuw openen in container
  6. Selecteer eShopLite - dotnet-observability uit de vervolgkeuzelijst. Visual Studio Code maakt uw ontwikkelcontainer lokaal.

Een diagnostisch project toevoegen aan de oplossing

De eerste stap voor het toevoegen van waarneembaarheid aan de eShopLite-app is het introduceren van een nieuw diagnostisch project voor de oplossing. Dit project bevat alle OpenTelemetry-pakketten en -configuraties die u gaat gebruiken om waarneembaarheid aan de app toe te voegen.

  1. Voer in het opdrachtenpalet van Visual Studio Code .NET: >Open Solutionin.
  2. Selecteer dotnet-waarneembaarheid/eShopLite/eShopLite.sln.
  3. Klik in de Solution Exploreronder aan het deelvenster EXPLORER met de rechtermuisknop op de eShopLite-oplossing en selecteer vervolgens Nieuw project.
  4. In het dialoogvenster Selecteer een sjabloon om een nieuw .NET-project te maken, selecteer Klassebibliotheek (Algemeen, Bibliotheek).
  5. Voer in het veld NaamDiagnostische gegevensin.
  6. In de Project wordt aangemaakt in vervolgkeuzelijst, selecteert u standaardmap.

OpenTelemetry-pakketten toevoegen

Voeg nu de OpenTelemetry-pakketten toe aan het nieuwe diagnostische project.

  1. Als u het deelvenster TERMINAL onderaan in Visual Studio Code gebruikt, navigeert u naar de projectmap Diagnostics:

    cd dotnet-observability/eShopLite/Diagnostics
    
  2. Voer deze dotnet add opdrachten uit:

    dotnet add package OpenTelemetry.Exporter.Console
    dotnet add package OpenTelemetry.Extensions.Hosting
    dotnet add package OpenTelemetry.Instrumentation.AspNetCore
    dotnet add package OpenTelemetry.Instrumentation.EventCounters --prerelease
    dotnet add package OpenTelemetry.Instrumentation.Runtime
    dotnet add package OpenTelemetry.Instrumentation.SqlClient --prerelease
    dotnet add package OpenTelemetry.Instrumentation.Http
    
  3. Vouw in het deelvenster EXPLORER de map Diagnostics uit en selecteer Diagnostics.csproj.

  4. Wijzig de Project Sdk bovenaan in:

    <Project Sdk="Microsoft.NET.Sdk.Web">
    

    Met de voorgaande code kunt u de IConfiguration-klasse in uw code gebruiken.

  5. Voeg in de <PropertyGroup>het uitvoertype toe:

    <OutputType>Library</OutputType>
    

    De voorgaande code zorgt ervoor dat het project wordt gebouwd als een bibliotheek. Anders verwacht de compiler een Program.cs-bestand met een main methode.

Voeg de code toe om OpenTelemetry te gebruiken

Nu de OpenTelemetry-pakketten zijn toegevoegd, introduceert u nu de code om deze te gebruiken.

  1. Klik in het deelvenster EXPLORER met de rechtermuisknop op het bestand Class1.cs en selecteer Naam wijzigen.

  2. Wijzig de naam van het bestand in DiagnosticServiceCollectionExtensions.cs.

  3. Vervang de code in het bestand door de volgende code:

    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;
      }
    }
    
  4. Voer in het deelvenster TERMINAL deze opdracht uit om het project te bouwen:

    dotnet build
    

    De uitvoer moet er ongeveer uitzien als in dit voorbeeld:

    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
  5. Het Diagnostics project is nu klaar om te worden gebruikt door de Products-service.

  6. Klik in het deelvenster EXPLORER onder SOLUTION EXPLORER-met de rechtermuisknop op het project Producten en selecteer vervolgens Projectverwijzing toevoegen.

  7. Selecteer Diagnostiek.

  8. Vouw in het deelvenster EXPLORER de map Producten uit en selecteer Program.cs.

  9. Voeg onder de codeopmerking // Add observability code hereeen aanroep toe aan de diagnostische methode:

    builder.Services.AddObservability("Products", builder.Configuration);
    
  10. Ga in het deelvenster TERMINAL naar de map Producten:

    cd ../Products
    
  11. Voer deze opdracht uit om het project te bouwen:

    dotnet build
    

    De uitvoer moet er ongeveer uitzien als in dit voorbeeld:

    Build succeeded.
        0 Warning(s)
        0 Error(s)
    

Docker-instellingen bijwerken en de app uitvoeren

  1. Ga in het deelvenster TERMINAL naar de root van de dotnet-observability folder:

    cd ..
    dotnet publish /p:PublishProfile=DefaultContainer
    
  2. Voer deze Docker-opdrachten uit:

    cd /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/
    docker compose up 
    

    De back-endcontainers (Products-service) en front-endcontainers (Store-service) moeten worden gebouwd. Vervolgens wordt de app gestart.

  3. Als u deze oefening uitvoert in een coderuimte, selecteert u het tabblad POORTEN onder aan het Visual Studio Code-venster. Selecteer de Openen in browser koppeling naast de Front End-service.

  4. Als u deze oefening lokaal uitvoert in Visual Studio Code, gaat u op een nieuw browsertabblad naar de app op http://localhost:32000.

  5. Selecteer in de app Producten in de navigatiebalk.

    Een schermopname van de pagina Producten in de eShopLite-app. Op de pagina ziet u een lijst met producten met een naam, beschrijving en prijs en een knop om het aandeel bij te werken.

  6. Selecteer Voorraad bijwerken voor een aantal van de producten. Wijzig vervolgens in het dialoogvenster de aandelenwaarde en selecteer bijwerken.

  7. Selecteer het tabblad TERMINAL en blader door de berichten. Houd er rekening mee dat er berichten van OpenTelemetry zijn, zoals:

    backend-1   | Export ec.Microsoft-AspNetCore-Server-Kestrel.connection-queue-length, Meter: OpenTelemetry.Instrumentation.EventCounters/1.5.1.1
    backend-1   | (2023-11-09T19:55:14.8933518Z, 2023-11-09T20:04:44.8596671Z] http.request.method: PUT http.response.status_code: 200 http.route: /api/Stock/{id} network.protocol.name: http network.protocol.version: 1.1 url.scheme: http Histogram      
    backend-1   | Value: Sum: 0.05144170000000001 Count: 4 Min: 0.0039736 Max: 0.0359739
    
  8. Druk op Ctrl+C- om de app te stoppen.

U hebt met succes OpenTelemetry toegevoegd aan de Products-service. In de volgende les ziet u hoe u de telemetriegegevens beter kunt gebruiken door deze te bekijken op hulpprogramma's zoals Prometheus en Grafana.