Ćwiczenie — dodawanie biblioteki OpenTelemetry do aplikacji natywnej dla chmury
W tym ćwiczeniu dodasz nowy projekt diagnostyczny do rozwiązania eShopLite. Zobaczysz, jak uwzględnić pakiety NuGet OpenTelemetry, a następnie dodać funkcje obserwowalności 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 kodowej, utwórz wstępnie skonfigurowaną przestrzeń kodową GitHub przy użyciu tego szablonu tworzenia przestrzeni kodowej .
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 repozytorium https://github.com/MicrosoftDocs/mslearn-dotnet-cloudnative na komputer lokalny. Wtedy:
- Zainstaluj wszelkie wymagania systemowe, aby uruchomić Dev Container w programie Visual Studio Code.
- Upewnij się, że platforma Docker jest uruchomiona.
- W nowym oknie programu Visual Studio Code otwórz folder sklonowanego repozytorium
- Naciśnij Ctrl+Shift+P, aby otworzyć paletę poleceń.
- Wyszukiwanie: >Dev Containers: ponowne kompilowanie i ponowne otwieranie w kontenerze
- Wybierz pozycję eShopLite — dotnet-observability z listy rozwijanej. Program Visual Studio Code tworzy kontener programistyczny lokalnie.
Dodawanie projektu diagnostycznego do rozwiązania
Pierwszym krokiem do dodania obserwowalności do aplikacji eShopLite jest wprowadzenie nowego projektu diagnostycznego w ramach rozwiązania. Ten projekt zawiera wszystkie pakiety i konfiguracje OpenTelemetry, których będziesz używać do dodawania obserwowalności do aplikacji.
- W palecie poleceń programu Visual Studio Code wprowadź >.NET: Otwórz rozwiązanie.
- Wybierz dotnet-observability/eShopLite/eShopLite.sln.
- W Eksploratorze rozwiązań w dolnej części okienka EKPLORATORA kliknij prawym przyciskiem myszy rozwiązanie eShopLite, a następnie wybierz pozycję Nowy projekt.
- W oknie dialogowym 'Wybierz szablon, aby utworzyć nowy projekt .NET', wybierz pozycję Class Library (Common, Library).
- W polu Nazwa wprowadź „Diagnostics”.
- W menu rozwijanym , w sekcji Project, wybierz Domyślny katalog.
Dodawanie pakietów OpenTelemetry
Teraz dodaj pakiety OpenTelemetry do nowego projektu diagnostycznego.
Korzystając z okienka terminalu w dolnej części programu Visual Studio Code, przejdź do folderu projektu Diagnostyka:
cd dotnet-observability/eShopLite/Diagnostics
Uruchom następujące polecenia
dotnet add
: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
Na okienku EXPLORER rozwiń folder Diagnostics, a następnie wybierz Diagnostics.csproj.
Zmień
Project Sdk
u góry na:<Project Sdk="Microsoft.NET.Sdk.Web">
Powyższy kod umożliwia użycie klasy
IConfiguration
w kodzie.W
<PropertyGroup>
dodaj typ danych wyjściowych:<OutputType>Library</OutputType>
Powyższy kod gwarantuje, że projekt zostanie zbudowany w formie biblioteki. W przeciwnym razie kompilator oczekuje pliku
Program.cs
z metodąmain
.
Dodaj kod do użycia OpenTelemetry
Po dodaniu pakietów OpenTelemetry można teraz wprowadzić kod umożliwiający ich użycie.
Na panelu eksploratora kliknij prawym przyciskiem myszy plik Class1.cs, a następnie wybierz Zmień nazwę.
Zmień nazwę pliku na DiagnosticServiceCollectionExtensions.cs.
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; } }
W okienku terminalu 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)
Projekt Diagnostics jest teraz gotowy do użycia przez usługę Products.
W okienku EXPLORER, w obszarze EKSPLORATOR ROZWIĄZAŃ, kliknij prawym przyciskiem myszy na projekt Products, a następnie wybierz Dodaj odwołanie do projektu.
Wybierz pozycję Diagnostics.
W okienku eksploratora rozwiń folder Products, a następnie wybierz pozycję Program.cs.
W obszarze komentarza kodu
// Add observability code here
dodaj wywołanie metody Diagnostyka:builder.Services.AddObservability("Products", builder.Configuration);
W okienku TERMINAL przejdź do folderu Products.
cd ../Products
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
W okienku TERMINAL przejdź do katalogu głównego dotnet-observability.
cd .. dotnet publish /p:PublishProfile=DefaultContainer
Uruchom następujące polecenia platformy Docker:
cd /workspaces/mslearn-dotnet-cloudnative/dotnet-observability/ docker compose up
Kontenery zaplecza (usługiProducts) i frontonu (Store Service) powinny być kompilne. Następnie aplikacja zostanie uruchomiona.
Jeśli wykonujesz to ćwiczenie w przestrzeni kodu, wybierz kartę PORTS w dolnej części okna programu Visual Studio Code. Wybierz link Otwórz w przeglądarce obok usługi Front End.
Jeśli wykonujesz to ćwiczenie lokalnie w programie Visual Studio Code, na nowej karcie przeglądarki przejdź do aplikacji pod adresem
http://localhost:32000
.W aplikacji wybierz pozycję Products na pasku nawigacyjnym.
Wybierz pozycję Update Stock dla niektórych produktów. Następnie w oknie dialogowym zmień wartość akcji i wybierz pozycję Update.
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
Naciśnij 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.