Oefening: telemetrie uitbreiden in .NET 8
De huidige eShopLite-app maakt gebruik van 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 metrische waarde 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 BestandsnaamProductsMetrics.csin.
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.csin 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 Products de map Endpoint uit en selecteer ProductEndpoints.cs.
Vervang het bestaande API-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 methodeStockChange
aan om de 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.
In het deelvenster EXPLORER, open de map Diagnostics en selecteer DiagnosticServiceCollectionExtensions.
Wijzig de methode
AddObservability
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 deelvenster TERMINAL onderaan naar de map dotnet-observability/eShopLite.
cd ..
Werk de appscontainers bij.
dotnet publish /p:PublishProfile=DefaultContainer
Ga naar de map dotnet-observability 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 metrische
eshoplite_products_stock_change_total
in en selecteer vervolgens uitvoeren.U zou het in een tabel moeten zien staan.
Selecteer het tabblad Graph. U ziet dat de voorraadhoeveelheid in de loop van de tijd verandert.
Druk in het deelvenster TERMINAL op Ctrl+C- om de app te stoppen.