Ćwiczenie — rozszerzanie telemetrii na platformie .NET 8
Bieżąca eShopLite aplikacja używa domyślnej telemetrii udostępnianej przez bibliotekę OpenTelemetry. Dane telemetryczne można rozszerzyć, dodając metryki niestandardowe i atrybuty niestandardowe do danych telemetrycznych. Ta funkcja umożliwia dodanie większego kontekstu do danych telemetrycznych i utworzenie bardziej zaawansowanych zapytań w usłudze Application Szczegółowe informacje.
W tym ćwiczeniu dodasz nowe metryki do aplikacji i zobaczysz, jak wyświetlać je w aplikacjach do obserwacji.
Utwórz nową metrykę niestandardową
Chcesz mieć większy wgląd w zmianę zapasów w czasie, aby utworzyć niestandardową metrykę.
W programie Visual Studio Code w okienku EKSPLORATOR kliknij prawym przyciskiem myszy folder Products , a następnie wybierz pozycję Nowy plik.
W polu Nazwa pliku wprowadź ProductsMetrics.cs.
W edytorze tekstów zastąp kod następującym przykładem:
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); } }
Powyższy kod tworzy nową metrykę o nazwie
eshoplite.products.stock_change
. Ta metryka śledzi ilość zapasów zmienianych przez usługę produktu.Naciśnij klawisze Ctrl+S, aby zapisać plik.
W okienku EKSPLORATOR w folderze Products wybierz pozycję Program.cs.
Zastąp
AddObservability
kod następującym kodem:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
Ten kod dodaje klasę
ProductsMetrics
do kontenera wstrzykiwania zależności.Naciśnij klawisze Ctrl+S, aby zapisać plik.
W okienku EKSPLORATOR w folderze Products rozwiń folder Endpoint, a następnie wybierz pozycję ProductEndpoints.cs.
Zastąp istniejący punkt końcowy aktualizacji
MapPut
zapasów następującym kodem: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(); })
Wstrzykiwanie zależności służy do dodawania
ProductsMetrics
klasy do punktu końcowego. Następnie wywołujesz metodęStockChange
w celu przyrostowania metryki przy użyciu nowej kwoty zapasów.Naciśnij klawisze Ctrl+S, aby zapisać plik.
Dodawanie metryki do elementu OpenTelemetry
Teraz dodasz metryki do usługi OpenTelemetry, aby można ją było wyeksportować do narzędzi do obserwacji.
W okienku EKSPLORATOR w folderze Diagnostyka wybierz pozycję DiagnosticServiceCollectionExtensions.
Zmień metodę tak, aby akceptowała
AddObservability
nowy parametr:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)
Poniżej linii eksportera Prometheus dodaj następujący kod:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }
Naciśnij klawisze Ctrl+S, aby zapisać plik.
Wyświetlanie nowej metryki w rozwiązaniu Prometheus
W okienku TERMINAL w dolnej części przejdź do folderu dotnet-observability/eShopLite.
cd ..
Aktualizowanie kontenerów aplikacji.
dotnet publish /p:PublishProfile=DefaultContainer
Przejdź do folderu dotnet-observability i uruchom aplikację za pomocą platformy Docker:
cd .. docker compose up
Otwórz aplikację eShopLite w przeglądarce pod adresem
http://localhost:32000
.Przejdź do strony Produkty i zmień kwotę zapasów na kilku produktach.
Otwórz pulpit nawigacyjny rozwiązania Prometheus pod adresem
http://localhost:9090
.W polu wyszukiwania wprowadź metrykę
eshoplite_products_stock_change_total
, a następnie wybierz pozycję Wykonaj.Powinna zostać wyświetlona w tabeli.
Wybierz kartę Graf . Powinna zostać wyświetlona zmiana ilości akcji w czasie.
W okienku TERMINAL naciśnij klawisze Ctrl+C , aby zatrzymać aplikację.