Oefening: OpenTelemetry toevoegen aan een cloudeigen toepassing
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:
- Installeer de nodige systeemvereisten om Dev Container in Visual Studio Code uit te voeren.
- Zorg ervoor dat Docker wordt uitgevoerd.
- Open in een nieuw Visual Studio Code-venster de map van de gekloonde opslagplaats
- Druk op Ctrl+Shift+P om het opdrachtenpalet te openen.
- Zoeken: >Dev-containers: herbouwen en opnieuw openen in container
- 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.
- Voer in het opdrachtenpalet van Visual Studio Code .NET: >Open Solutionin.
- Selecteer dotnet-waarneembaarheid/eShopLite/eShopLite.sln.
- Klik in de Solution Exploreronder aan het deelvenster EXPLORER met de rechtermuisknop op de eShopLite-oplossing en selecteer vervolgens Nieuw project.
- In het dialoogvenster Selecteer een sjabloon om een nieuw .NET-project te maken, selecteer Klassebibliotheek (Algemeen, Bibliotheek).
- Voer in het veld NaamDiagnostische gegevensin.
- In de Project wordt aangemaakt in vervolgkeuzelijst, selecteert u standaardmap.
OpenTelemetry-pakketten toevoegen
Voeg nu de OpenTelemetry-pakketten toe aan het nieuwe diagnostische project.
Als u het deelvenster TERMINAL onderaan in Visual Studio Code gebruikt, navigeert u naar de projectmap Diagnostics:
cd dotnet-observability/eShopLite/Diagnostics
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
Vouw in het deelvenster EXPLORER de map Diagnostics uit en selecteer Diagnostics.csproj.
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.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 eenmain
methode.
Voeg de code toe om OpenTelemetry te gebruiken
Nu de OpenTelemetry-pakketten zijn toegevoegd, introduceert u nu de code om deze te gebruiken.
Klik in het deelvenster EXPLORER met de rechtermuisknop op het bestand Class1.cs en selecteer Naam wijzigen.
Wijzig de naam van het bestand in DiagnosticServiceCollectionExtensions.cs.
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; } }
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)
Het Diagnostics project is nu klaar om te worden gebruikt door de Products-service.
Klik in het deelvenster EXPLORER onder SOLUTION EXPLORER-met de rechtermuisknop op het project Producten en selecteer vervolgens Projectverwijzing toevoegen.
Selecteer Diagnostiek.
Vouw in het deelvenster EXPLORER de map Producten uit en selecteer Program.cs.
Voeg onder de codeopmerking
// Add observability code here
een aanroep toe aan de diagnostische methode:builder.Services.AddObservability("Products", builder.Configuration);
Ga in het deelvenster TERMINAL naar de map Producten:
cd ../Products
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
Ga in het deelvenster TERMINAL naar de root van de dotnet-observability folder:
cd .. dotnet publish /p:PublishProfile=DefaultContainer
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.
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.
Als u deze oefening lokaal uitvoert in Visual Studio Code, gaat u op een nieuw browsertabblad naar de app op
http://localhost:32000
.Selecteer in de app Producten in de navigatiebalk.
Selecteer Voorraad bijwerken voor een aantal van de producten. Wijzig vervolgens in het dialoogvenster de aandelenwaarde en selecteer bijwerken.
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
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.