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 productenservice .

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 codespace wilt gebruiken, maakt u een vooraf geconfigureerde GitHub-coderuimte met deze sjabloon voor het maken van Codespace.

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. Daarna kunt u het volgende doen:

  1. Installeer systeemopdrachten om Dev Container uit te voeren in Visual Studio Code.
  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: >opnieuw bouwen en opnieuw openen in container
  6. Selecteer eShopLite - dotnet-waarneembaarheid in 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 aan 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 in: Oplossing openen.
  2. Selecteer dotnet-waarneembaarheid/eShopLite/eShopLite.sln.
  3. Klik in Solution Explorer onder aan het deelvenster EXPLORER met de rechtermuisknop op de eShopLite-oplossing en selecteer vervolgens Nieuw project.
  4. Selecteer in het dialoogvenster Een sjabloon selecteren om een nieuw .NET-projectdialoogvenster te maken de klassebibliotheek (algemeen, bibliotheek).
  5. Voer in het veld Naam diagnostische gegevens in.
  6. Selecteer in de vervolgkeuzelijst Project de optie Standaardmap.

OpenTelemetry-pakketten toevoegen

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

  1. Ga met behulp van het TERMINAL-deelvenster onder aan Visual Studio Code naar de projectmap Diagnostische gegevens:

    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 Diagnostische gegevens uit en selecteer vervolgens 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 het <PropertyGroup>uitvoertype het volgende 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 Class1.cs bestand 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 TERMINAL-deelvenster 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 diagnostische project is nu klaar om te worden gebruikt door de productenservice .

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

  7. Selecteer Diagnostische gegevens.

  8. Vouw in het deelvenster EXPLORER de map Producten uit en selecteer vervolgens 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 TERMINAL-deelvenster 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 TERMINAL-deelvenster naar de hoofdmap van de map dotnet-waarneembaarheid :

    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 (Productenservice ) 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 koppeling Openen in de browser 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 Producten in de navigatiebalk in de app.

    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 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.