Ćwiczenie — dodawanie biblioteki OpenTelemetry do aplikacji natywnej dla chmury

Ukończone

W tym ćwiczeniu dodasz nowy projekt diagnostyczny do rozwiązania eShopLite . Zobaczysz, jak uwzględnić pakiety NuGet OpenTelemetry, a następnie dodać możliwość obserwowania do usługi Products .

Otwórz środowisko deweloperskie i utwórz zasoby platformy Azure

Możesz użyć usługi GitHub codespace, która hostuje ćwiczenie lub wykonać ćwiczenie lokalnie w programie Visual Studio Code.

Aby użyć przestrzeni kodu, utwórz wstępnie skonfigurowaną przestrzeń kodu usługi GitHub przy użyciu tego szablonu tworzenia usługi Codespace.

Ten krok trwa kilka minut, gdy usługa GitHub tworzy i konfiguruje przestrzeń kodu. Po zakończeniu procesu zobaczysz pliki kodu dla ćwiczenia. Kod używany w pozostałej części tego modułu znajduje się w katalogu /dotnet-observability .

Aby użyć programu Visual Studio Code, sklonuj https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative repozytorium na komputer lokalny. Następnie:

  1. Zainstaluj wszystkie wymagania systemowe, aby uruchomić kontener deweloperski w programie Visual Studio Code.
  2. Upewnij się, że platforma Docker jest uruchomiona.
  3. W nowym oknie programu Visual Studio Code otwórz folder sklonowanego repozytorium
  4. Naciśnij klawisze Ctrl+Shift+P, aby otworzyć paletę poleceń.
  5. Wyszukiwanie: Tworzenie kontenerów: >ponowne kompilowanie i ponowne otwieranie w kontenerze
  6. Wybierz pozycję eShopLite — dotnet-observability z listy rozwijanej. Program Visual Studio Code tworzy kontener dewelopera lokalnie.

Dodawanie projektu diagnostycznego do rozwiązania

Pierwszym krokiem do dodania wglądu eShopLite do aplikacji jest wprowadzenie nowego projektu diagnostycznego do rozwiązania. Ten projekt zawiera wszystkie pakiety i konfiguracje OpenTelemetry, których będziesz używać do dodawania wglądu w aplikację.

  1. W palecie poleceń programu Visual Studio Code wprowadź ciąg >.NET: Otwórz rozwiązanie.
  2. Wybierz pozycję dotnet-observability/eShopLite/eShopLite.sln.
  3. W Eksplorator rozwiązań w dolnej części okienka EKSPLORATOR kliknij prawym przyciskiem myszy rozwiązanie eShopLite, a następnie wybierz pozycję Nowy projekt.
  4. W oknie dialogowym Wybieranie szablonu w celu utworzenia nowego projektu .NET wybierz pozycję Biblioteka klas (Wspólna, Biblioteka).
  5. W polu Nazwa wprowadź wartość Diagnostyka.
  6. Na liście rozwijanej Projekt zostanie utworzony , wybierz pozycję Katalog domyślny.

Dodawanie pakietów OpenTelemetry

Teraz dodaj pakiety OpenTelemetry do nowego projektu diagnostycznego.

  1. Korzystając z okienka TERMINAL w dolnej części programu Visual Studio Code, przejdź do folderu projektu Diagnostyka :

    cd dotnet-observability/eShopLite/Diagnostics
    
  2. Uruchom następujące dotnet add polecenia:

    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. W okienku EKSPLORATOR rozwiń folder Diagnostyka, a następnie wybierz pozycję Diagnostics.csproj.

  4. Zmień wartość u góry Project Sdk na:

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

    Powyższy kod umożliwia użycie IConfiguration klasy w kodzie.

  5. W pliku <PropertyGroup>dodaj typ danych wyjściowych:

    <OutputType>Library</OutputType>
    

    Powyższy kod gwarantuje, że projekt zostanie skompilujący jako biblioteka. W przeciwnym razie kompilator oczekuje Program.cs pliku z main metodą .

Dodawanie kodu do używania metody OpenTelemetry

Po dodaniu pakietów OpenTelemetry można teraz wprowadzić kod umożliwiający ich użycie.

  1. W okienku EKSPLORATOR kliknij prawym przyciskiem myszy plik Class1.cs , a następnie wybierz polecenie Zmień nazwę.

  2. Zmień nazwę pliku na DiagnosticServiceCollectionExtensions.cs.

  3. Zastąp kod w pliku następującym kodem:

    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. W okienku TERMINAL uruchom następujące polecenie, aby skompilować projekt:

    dotnet build
    

    Powinny zostać wyświetlone dane wyjściowe podobne do tego przykładu:

    Build succeeded.
        0 Warning(s)
        0 Error(s)
    
  5. Projekt Diagnostyka jest teraz gotowy do użycia przez usługę Products.

  6. W okienku EKSPLORATOR ROZWIĄZAŃ w obszarze EKSPLORATOR ROZWIĄZAŃ kliknij prawym przyciskiem myszy projekt Products , a następnie wybierz polecenie Dodaj odwołanie do projektu.

  7. Wybierz pozycję Diagnostyka.

  8. W okienku EKSPLORATOR rozwiń folder Products, a następnie wybierz pozycję Program.cs.

  9. W obszarze komentarza // Add observability code herekodu dodaj wywołanie metody Diagnostyka:

    builder.Services.AddObservability("Products", builder.Configuration);
    
  10. W okienku TERMINAL przejdź do folderu Products:

    cd ../Products
    
  11. Uruchom to polecenie, aby skompilować projekt:

    dotnet build
    

    Powinny zostać wyświetlone dane wyjściowe podobne do tego przykładu:

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

Aktualizowanie ustawień platformy Docker i uruchamianie aplikacji

  1. W okienku TERMINAL przejdź do katalogu głównego folderu dotnet-observability :

    cd ..
    dotnet publish /p:PublishProfile=DefaultContainer
    
  2. Uruchom następujące polecenia platformy Docker:

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

    Kontenery zaplecza (usługi produktów ) i frontonu (usługi sklepu ) powinny być kompilne. Następnie aplikacja zostanie uruchomiona.

  3. Jeśli wykonujesz to ćwiczenie w przestrzeni kodu, wybierz kartę PORTY w dolnej części okna programu Visual Studio Code. Wybierz link Otwórz w przeglądarce obok usługi frontonu.

  4. Jeśli wykonujesz to ćwiczenie lokalnie w programie Visual Studio Code, na nowej karcie przeglądarki przejdź do aplikacji pod adresem http://localhost:32000.

  5. W aplikacji wybierz pozycję Produkty na pasku nawigacyjnym.

    Zrzut ekranu przedstawiający stronę Products (Produkty) w aplikacji eShopLite. Na stronie zostanie wyświetlona lista produktów z nazwą, opisem i ceną oraz przyciskiem umożliwiającym zaktualizowanie zapasów.

  6. Wybierz pozycję Aktualizuj czas dla kilku produktów. Następnie w oknie dialogowym zmień wartość akcji i wybierz pozycję Aktualizuj.

  7. Wybierz kartę TERMINAL i przewiń komunikaty. Zwróć uwagę, że istnieją komunikaty z funkcji OpenTelemetry, takie jak:

    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. Naciśnij klawisze Ctrl+C, aby zatrzymać aplikację.

Pomyślnie dodano usługę OpenTelemetry do usługi Products . W następnej lekcji dowiesz się, jak lepiej wykorzystać dane telemetryczne, wyświetlając je na narzędziach takich jak Prometheus i Grafana.