Oefening: telemetrie uitbreiden in .NET 8
De huidige eShopLite app gebruikt de standaardtelemetrie van OpenTelemetry. U kunt de telemetrie uitbreiden door aangepaste metrische gegevens en aangepaste kenmerken toe te voegen aan de telemetriegegevens. Met deze mogelijkheid kunt u meer context toevoegen aan de telemetriegegevens en krachtigere query's maken in Application Insights.
In deze oefening voegt u nieuwe metrische gegevens toe aan apps en ziet u hoe u deze kunt weergeven in uw waarneembaarheidsapps.
Een aangepaste meetwaarde maken
U wilt meer inzicht hebben in hoe een voorraad in de loop van de tijd verandert, zodat u een aangepaste metrische waarde maakt.
Klik in Visual Studio Code in het deelvenster EXPLORER met de rechtermuisknop op de map Producten en selecteer Vervolgens Nieuw bestand.
Voer in het veld Bestandsnaam ProductsMetrics.cs in.
Vervang de code in de teksteditor door dit voorbeeld:
using System; using System.Diagnostics.Metrics; public class ProductsMetrics { private readonly Counter<int> _serviceCalls; private readonly Counter<int> _stockChange; public ProductsMetrics(IMeterFactory meterFactory) { var meter = meterFactory.Create("eShopLite.Products"); _stockChange = meter.CreateCounter<int>("eshoplite.products.stock_change", unit: "{stock}", description: "Amount of stock being changed through the product service."); } public void StockChange(int quantity) { _stockChange.Add(quantity); } }
Met de voorgaande code wordt een nieuwe metriek gemaakt met de naam
eshoplite.products.stock_change
. Met deze metrische waarde wordt de hoeveelheid voorraad bijgehouden die wordt gewijzigd via de productservice.Selecteer Ctrl+S om het bestand op te slaan.
Selecteer Program.cs in het deelvenster EXPLORER in de map Producten.
Vervang de
AddObservability
code door deze code:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
Met deze code wordt de
ProductsMetrics
klasse toegevoegd aan de container voor afhankelijkheidsinjectie.Selecteer Ctrl+S om het bestand op te slaan.
Vouw in het deelvenster EXPLORER in de map Producten de map Eindpunt uit en selecteer vervolgens ProductEndpoints.cs.
Vervang het bestaande eindpunt voor voorraadupdate
MapPut
door deze code:stock.MapPut("/{id}", async (int id, int stockAmount, ProductDataContext db, ProductsMetrics metrics) => { // Increment the stock change metric. metrics.StockChange(stockAmount); var affected = await db.Product .Where(model => model.Id == id) .ExecuteUpdateAsync(setters => setters .SetProperty(m => m.Stock, stockAmount) ); return affected == 1 ? Results.Ok() : Results.NotFound(); })
U gebruikt afhankelijkheidsinjectie om de
ProductsMetrics
klasse toe te voegen aan het eindpunt. Vervolgens roept u de methode aan om deStockChange
metrische waarde te verhogen met het nieuwe voorraadbedrag.Selecteer Ctrl+S om het bestand op te slaan.
De metrische waarde toevoegen aan OpenTelemetry
U voegt nu de metrische waarde toe aan OpenTelemetry, zodat deze kan worden geƫxporteerd naar uw hulpprogramma's voor waarneembaarheid.
Selecteer DiagnosticServiceCollectionExtensions in het deelvenster EXPLORER in de map Diagnostische gegevens.
Wijzig de
AddObservability
methode om een nieuwe parameter te accepteren:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)
Voeg onder de regel prometheus-exporteur deze code toe:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }
Selecteer Ctrl+S om het bestand op te slaan.
De nieuwe metrische waarde weergeven in Prometheus
Ga in het TERMINAL-deelvenster onderaan naar de map dotnet-waarneembaarheid/eShopLite.
cd ..
Werk de appscontainers bij.
dotnet publish /p:PublishProfile=DefaultContainer
Ga naar de map dotnet-waarneembaarheid en start de app met Docker:
cd .. docker compose up
Open de eShopLite app in een browser op
http://localhost:32000
.Ga naar de pagina Producten en wijzig het voorraadbedrag op verschillende producten.
Open het Prometheus-dashboard op
http://localhost:9090
.Voer in het zoekvak de
eshoplite_products_stock_change_total
metrische waarde in en selecteer vervolgens Uitvoeren.U ziet deze in een tabel.
Selecteer het tabblad Grafiek . U ziet dat de voorraadhoeveelheid in de loop van de tijd verandert.
Druk in het TERMINAL-deelvenster op Ctrl+C om de app te stoppen.