Übung: Erweitern der Telemetrie in .NET 8
Die aktuelle App eShopLite verwendet die Standardtelemetrie, die von OpenTelemetry bereitgestellt wird. Sie können die Telemetrie erweitern, indem Sie den Telemetriedaten benutzerdefinierte Metriken und Attribute hinzufügen. Diese Fähigkeit ermöglicht es Ihnen, den Telemetriedaten mehr Kontext hinzuzufügen und leistungsfähigere Abfragen in Application Insights erstellen.
In dieser Übung fügen Sie Apps neue Metriken hinzu und erfahren, wie Sie diese in Ihren Einblick-Apps anzeigen können.
Erstellen einer benutzerdefinierten Metrik
Sie möchten einen besseren Überblick darüber haben, wie sich eine Aktie im Laufe der Zeit ändert, also erstellen Sie eine benutzerdefinierte Metrik.
Klicken Sie in Visual Studio Code im Bereich EXPLORER mit der rechten Maustaste auf den Ordner Products und wählen Sie anschließend Neue Datei aus.
Geben Sie im Feld Dateiname den Namen ProductsMetrics.cs ein.
Ersetzen Sie den Code im Text-Editor durch folgenden Beispiel-Code:
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); } }
Der vorangehende Code erstellt eine neue Metrik namens
eshoplite.products.stock_change
. Diese Metrik verfolgt die Menge der durch den Produktservice geänderten Bestände.Drücken Sie STRG+S, um die Datei zu speichern.
Wählen Sie im Bereich EXPLORER im Ordner Products die DateiProgram.cs aus.
Ersetzen Sie den
AddObservability
-Code durch den folgenden Code:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
Dieser Code registriert die
ProductsMetrics
-Klasse beim Abhängigkeitsinjektionscontainer.Drücken Sie STRG+S, um die Datei zu speichern.
Erweitern Sie im Bereich EXPLORER im Ordner Products den Ordner Endpoint und wählen Sie dann ProductEndpoints.cs aus.
Ersetzen Sie den vorhandenen Endpunkt
MapPut
zum Aktualisieren des Lagerbestands durch diesen Code: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(); })
Sie verwenden die Abhängigkeitsinjektion, um die
ProductsMetrics
-Klasse zum Endpunkt hinzuzufügen. Anschließend rufen Sie dieStockChange
-Methode auf, um die Metrik um die neue Lagerbestandsmenge zu erhöhen.Drücken Sie STRG+S, um die Datei zu speichern.
Hinzufügen der Metrik zu OpenTelemetry
Sie fügen nun die Metrik zu OpenTelemetry hinzu, damit sie in Ihre Tools zur Gewinnung von Einblicken exportiert werden kann.
Wählen Sie im Bereich EXPLORER im Ordner Diagnose den Eintrag DiagnosticServiceCollectionExtensions aus.
Ändern Sie die
AddObservability
-Methode so, dass ein neuer Parameter akzeptiert wird:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)
Fügen Sie unter der Prometheus-Exporterzeile folgenden Code hinzu:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }
Drücken Sie STRG+S, um die Datei zu speichern.
Anzeigen der neuen Metrik in Prometheus
Wechseln Sie im Bereich TERMINAL unten zum dotnet-observability/eShopLite-Ordner.
cd ..
Aktualisieren Sie die App-Container.
dotnet publish /p:PublishProfile=DefaultContainer
Wechseln Sie zum dotnet-observability-Ordner, und starten Sie die App mit Docker:
cd .. docker compose up
Öffnen Sie die App eShopLite in einem Browser auf
http://localhost:32000
.Wechseln Sie zur Seite Produkte und ändern Sie den Lagerbestand für mehrere Produkte.
Öffnen Sie das Dashboard Prometheus auf
http://localhost:9090
.Geben Sie in das Suchfeld die Metrik
eshoplite_products_stock_change_total
ein, und wählen Sie dann Ausführen aus.Sie sollte in einer Tabelle aufgeführt werden.
Wählen Sie die Registerkarte Graph aus. Der Lagerbestand sollte sich im Laufe der Zeit ändern.
Drücken Sie im Bereich TERMINALSTRG+C, um die App zu beenden.