Ö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.
I Visual Studio Code högerklickar du på mappen Produkter i explorer-fönstret och väljer 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 trycka på Ctrl+S.
I explorer-fönstret går du till mappen Produkter och väljer Program.cs.
AddObservability
Ersätt 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
ProductsMetrics
klassen i containern för beroendeinmatning.Spara filen genom att trycka på Ctrl+S.
I explorer-fönstret i mappen Produkter expanderar du mappen Slutpunkt och väljer sedan ProductEndpoints.cs.
Ersätt den befintliga slutpunkten för lageruppdateringen
MapPut
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
ProductsMetrics
till klassen i slutpunkten. Sedan anroparStockChange
du metoden för att öka måttet med den nya lagermängden.Spara filen genom att trycka på 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 explorer-fönstret går du till mappen Diagnostik och väljer DiagnosticServiceCollectionExtensions.
Ändra metoden så att den
AddObservability
accepterar 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 trycka på Ctrl+S.
Visa det nya måttet i Prometheus
Gå till mappen dotnet-observability/eShopLite i terminalfönstret längst ned.
cd ..
Uppdatera appcontainrarna.
dotnet publish /p:PublishProfile=DefaultContainer
Gå till mappen dotnet-observability och starta appen med Docker:
cd .. docker compose up
eShopLite Öppna appen i en webbläsare på
http://localhost:32000
.Gå till sidan Produkter och ändra lagerbeloppet på flera produkter.
Öppna Prometheus-instrumentpanelen på
http://localhost:9090
.I sökrutan anger du måttet
eshoplite_products_stock_change_total
och väljer sedan Kör.Du bör se den i en tabell.
Välj fliken Diagram . Du bör se att aktiebeloppet ändras över tid.
I fönstret TERMINAL trycker du på Ctrl+C för att stoppa appen.