Ć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ć 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:
- Zainstaluj wszystkie wymagania systemowe, aby uruchomić kontener deweloperski 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 klawisze Ctrl+Shift+P, aby otworzyć paletę poleceń.
- Wyszukiwanie: Tworzenie kontenerów: >ponowne kompilowanie i ponowne otwieranie w kontenerze
- 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ę.
- W palecie poleceń programu Visual Studio Code wprowadź ciąg >.NET: Otwórz rozwiązanie.
- Wybierz pozycję dotnet-observability/eShopLite/eShopLite.sln.
- W Eksplorator rozwiązań w dolnej części okienka EKSPLORATOR kliknij prawym przyciskiem myszy rozwiązanie eShopLite, a następnie wybierz pozycję Nowy projekt.
- W oknie dialogowym Wybieranie szablonu w celu utworzenia nowego projektu .NET wybierz pozycję Biblioteka klas (Wspólna, Biblioteka).
- W polu Nazwa wprowadź wartość Diagnostyka.
- Na liście rozwijanej Projekt zostanie utworzony , wybierz pozycję Katalog domyślny.
Dodawanie pakietów OpenTelemetry
Teraz dodaj pakiety OpenTelemetry do nowego projektu diagnostycznego.
Korzystając z okienka TERMINAL w dolnej części programu Visual Studio Code, przejdź do folderu projektu Diagnostyka :
cd dotnet-observability/eShopLite/Diagnostics
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
W okienku EKSPLORATOR rozwiń folder Diagnostyka, a następnie wybierz pozycję Diagnostics.csproj.
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.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 zmain
metodą .
Dodawanie kodu do używania metody OpenTelemetry
Po dodaniu pakietów OpenTelemetry można teraz wprowadzić kod umożliwiający ich użycie.
W okienku EKSPLORATOR kliknij prawym przyciskiem myszy plik Class1.cs , a następnie wybierz polecenie 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 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)
Projekt Diagnostyka jest teraz gotowy do użycia przez usługę Products.
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.
Wybierz pozycję Diagnostyka.
W okienku EKSPLORATOR rozwiń folder Products, a następnie wybierz pozycję Program.cs.
W obszarze komentarza
// Add observability code here
kodu 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 folderu 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ługi produktów ) i frontonu (usługi sklepu ) powinny być kompilne. Następnie aplikacja zostanie uruchomiona.
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.
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ę Produkty na pasku nawigacyjnym.
Wybierz pozycję Aktualizuj czas dla kilku produktów. Następnie w oknie dialogowym zmień wartość akcji i wybierz pozycję Aktualizuj.
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 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.