Cvičení – rozšíření telemetrie v .NET 8
Aktuální eShopLite aplikace používá výchozí telemetrii, kterou poskytuje OpenTelemetry. Telemetrii můžete rozšířit přidáním vlastních metrik a vlastních atributů do dat telemetrie. Tato funkce umožňuje přidat do telemetrických dat další kontext a vytvářet výkonnější dotazy v Přehledy aplikace.
V tomto cvičení přidáte do aplikací nové metriky a zjistíte, jak je zobrazit v aplikacích pozorovatelnosti.
Vytvořené vlastní metriky
Chcete mít lepší přehled o tom, jak se akcie mění v průběhu času, takže vytvoříte vlastní metriku.
V editoru Visual Studio Code klikněte v podokně PRŮZKUMNÍK pravým tlačítkem myši na složku Products (Produkty ) a pak vyberte New File (Nový soubor).
Do pole Název souboru zadejte ProductsMetrics.cs.
V textovém editoru nahraďte kód tímto příkladem:
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); } }
Předchozí kód vytvoří novou metriku s názvem
eshoplite.products.stock_change
. Tato metrika sleduje množství akcií, které se mění prostřednictvím služby produktu.Stisknutím Ctrl+S soubor uložte.
V podokně PRŮZKUMNÍK ve složce Produkty vyberte Program.cs.
AddObservability
Nahraďte kód tímto kódem:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
Tento kód přidá
ProductsMetrics
třídu do kontejneru injektáže závislostí.Stisknutím Ctrl+S soubor uložte.
V podokně PRŮZKUMNÍK ve složce Produkty rozbalte složku Koncový bod a pak vyberte ProductEndpoints.cs.
Nahraďte stávající koncový bod aktualizace
MapPut
zásob tímto kódem: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(); })
Pomocí injektáže závislostí přidáte
ProductsMetrics
třídu do koncového bodu. Pak voláte metoduStockChange
pro zvýšení metriky o novou částku akcií.Stisknutím Ctrl+S soubor uložte.
Přidání metriky do OpenTelemetry
Teď přidáte metriku do OpenTelemetry, aby ji bylo možné exportovat do nástrojů pozorovatelnosti.
V podokně PRŮZKUMNÍK ve složce Diagnostika vyberte DiagnosticServiceCollectionExtensions.
Změňte metodu
AddObservability
tak, aby přijímala nový parametr:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)
Pod řádek vývozce prometheus přidejte tento kód:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }
Stisknutím Ctrl+S soubor uložte.
Zobrazení nové metriky v systému Prometheus
V podokně TERMINAL v dolní části přejděte do složky dotnet-observability/eShopLite.
cd ..
Aktualizujte kontejnery aplikací.
dotnet publish /p:PublishProfile=DefaultContainer
Přejděte do složky dotnet-observability a spusťte aplikaci pomocí Dockeru:
cd .. docker compose up
eShopLite Otevřete aplikaci v prohlížeči na adrese
http://localhost:32000
.Přejděte na stránku Produkty a změňte množství akcií na několika produktech.
Otevřete řídicí panel Prometheus na adrese
http://localhost:9090
.Do vyhledávacího pole zadejte metriku
eshoplite_products_stock_change_total
a pak vyberte Spustit.Měla by se zobrazit v tabulce.
Vyberte kartu Graf. Měla by se zobrazit změna množství akcií v průběhu času.
V podokně TERMINÁL aplikaci zastavíte stisknutím kláves Ctrl+C.