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 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:
- Installeer systeemopdrachten om Dev Container uit te voeren in Visual Studio Code.
- 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: >opnieuw bouwen en opnieuw openen in container
- 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.
- Voer >in het opdrachtenpalet van Visual Studio Code .NET in: Oplossing openen.
- Selecteer dotnet-waarneembaarheid/eShopLite/eShopLite.sln.
- Klik in Solution Explorer onder aan het deelvenster EXPLORER met de rechtermuisknop op de eShopLite-oplossing en selecteer vervolgens Nieuw project.
- Selecteer in het dialoogvenster Een sjabloon selecteren om een nieuw .NET-projectdialoogvenster te maken de klassebibliotheek (algemeen, bibliotheek).
- Voer in het veld Naam diagnostische gegevens in.
- Selecteer in de vervolgkeuzelijst Project de optie Standaardmap.
OpenTelemetry-pakketten toevoegen
Voeg nu de OpenTelemetry-pakketten toe aan het nieuwe diagnostische project.
Ga met behulp van het TERMINAL-deelvenster onder aan Visual Studio Code naar de projectmap Diagnostische gegevens:
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 Diagnostische gegevens uit en selecteer vervolgens 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 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 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 Class1.cs bestand 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 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)
Het diagnostische project is nu klaar om te worden gebruikt door de productenservice .
Klik in het deelvenster EXPLORER onder SOLUTION EXPLORER met de rechtermuisknop op het project Producten en selecteer Vervolgens Projectverwijzing toevoegen.
Selecteer Diagnostische gegevens.
Vouw in het deelvenster EXPLORER de map Producten uit en selecteer vervolgens 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 TERMINAL-deelvenster 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 TERMINAL-deelvenster naar de hoofdmap van de map dotnet-waarneembaarheid :
cd .. dotnet publish /p:PublishProfile=DefaultContainer
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.
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 .
Als u deze oefening lokaal uitvoert in Visual Studio Code, gaat u op een nieuw browsertabblad naar de app op
http://localhost:32000
.Selecteer Producten in de navigatiebalk in de app.
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 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.