Övning – Utöka telemetri i .NET 8
Den aktuella eShopLite appen använder standardtelemetrin som tillhandahålls av OpenTelemetry. Du kan utöka telemetrin genom att lägga till anpassade mått och anpassade attribut till telemetridata. Med den här funktionen kan du lägga till mer kontext till telemetridata och skapa kraftfullare frågor i Application Insights.
I den här övningen lägger du till nya mått i appar och ser hur du visar dem i dina observerbarhetsappar.
Skapa ett anpassat mått
Du vill ha större insyn i hur en aktie ändras över tid, så att du skapar ett anpassat mått.
Högerklicka på mappen Produkteri explorer-fönstret och välj sedan Ny fil.
I fältet Filnamn anger du ProductsMetrics.cs.
I textredigeraren ersätter du koden med det här exemplet:
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); } }Föregående kod skapar ett nytt mått med namnet
eshoplite.products.stock_change. Det här måttet spårar mängden lager som ändras via produkttjänsten.Spara filen genom att välja Ctrl+S.
I fönstret EXPLORER väljer du Program.csi mappen Products .
Ersätt
AddObservability-koden med den här koden:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();Den här koden lägger till klassen
ProductsMetricsi containern för beroendeinmatning.Spara filen genom att välja Ctrl+S.
I explorer-fönstret i mappen Produkter expanderar du mappen Slutpunkt och väljer sedan ProductEndpoints.cs.
Ersätt den befintliga lageruppdaterings-
MapPut-endpointen med den här koden: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(); })Du använder beroendeinmatning för att lägga till klassen
ProductsMetricstill slutpunkten. Sedan anropar du metodenStockChangeför att öka måttet med den nya lagermängden.Spara filen genom att välja Ctrl+S.
Lägg till måttet i OpenTelemetry
Nu lägger du till måttet i OpenTelemetry så att det kan exporteras till dina observerbarhetsverktyg.
I fönstret EXPLORER väljer du DiagnosticServiceCollectionExtensionsi mappen Diagnostics .
Ändra metoden
AddObservabilityför att acceptera en ny parameter:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)Lägg till den här koden under exportraden Prometheus:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }Spara filen genom att välja Ctrl+S.
Visa det nya måttet i Prometheus
I fönstret TERMINAL längst ned går du till mappen dotnet-observability/eShopLite.
cd ..Uppdatera appcontainrarna.
dotnet publish /p:PublishProfile=DefaultContainerGå till mappen dotnet-observability och starta appen med Docker:
cd .. docker compose upÖppna eShopLite-appen i en webbläsare på
http://localhost:32000.Gå till sidan Produkter och ändra lagermängden på flera produkter.
Öppna instrumentpanelen Prometheus på
http://localhost:9090.I sökrutan anger du måttet
eshoplite_products_stock_change_totaloch väljer sedan Kör.Du bör se den listad i en tabell.
Välj fliken Graph. Du bör se att aktiebeloppet ändras över tid.
I fönstret TERMINAL trycker du på Ctrl+C för att stoppa appen.