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 Application Insights.
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 podokně PRŮZKUMNÍK klikněte 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í zásob, které se mění prostřednictvím produktové služby.Vyberte Stisknutím kláves Ctrl+S soubor uložte.
V podokně EXPLORER ve složce Products vyberte Program.cs.
Nahraďte kód
AddObservabilitytímto kódem:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();Tento kód přidá třídu
ProductsMetricsdo kontejneru injektáže závislostí.Vyberte Stisknutím kláves 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 zásob
MapPuttí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(); })Injektáž závislostí slouží k přidání třídy
ProductsMetricsdo koncového bodu. Následně voláte metoduStockChange, která zvýší metriku o nové množství zásob.Vyberte Stisknutím kláves 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ě EXPLORER ve složce Diagnostika vyberte DiagnosticServiceCollectionExtensions.
Změňte metodu
AddObservabilitytak, aby přijímala nový parametr:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)Pod řádek exportéru 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); } }Vyberte Stisknutím kláves Ctrl+S soubor uložte.
Zobrazení nové metriky v systému Prometheus
V dolní části podokna TERMINAL přejděte do složky dotnet-observability/eShopLite.
cd ..Aktualizujte kontejnery aplikací.
dotnet publish /p:PublishProfile=DefaultContainerPřejděte do složky dotnet-observability a spusťte aplikaci pomocí Dockeru:
cd .. docker compose upOtevřete aplikaci eShopLite v prohlížeči v
http://localhost:32000.Přejděte na stránku Produkty a změňte množství zásob u několika produktů.
Otevřete řídicí panel Prometheus na
http://localhost:9090.Do vyhledávacího pole zadejte metriku
eshoplite_products_stock_change_totala pak vyberte Spustit.Mělo by se zobrazit v tabulce.
Vyberte kartu Graph. Měla by se zobrazit změna množství akcií v průběhu času.
V podokně TERMINÁL stisknutím klávesy Ctrl+C aplikaci zastavte.