Übung – Erweitern der Telemetrie in .NET 8
Die aktuelle eShopLite App verwendet die standardmäßige Telemetrie, die von OpenTelemetry bereitgestellt wird. Sie können die Telemetrie erweitern, indem Sie den Telemetriedaten benutzerdefinierte Metriken und benutzerdefinierte Attribute hinzufügen. Mit dieser Funktion können Sie den Telemetriedaten mehr Kontext hinzufügen und leistungsfähigere Abfragen in Application Insights erstellen.
In dieser Übung fügen Sie Apps neue Metriken hinzu und sehen, wie sie in Ihren Observability-Apps angezeigt werden.
Erstellen einer benutzerdefinierten Metrik
Sie möchten eine größere Sichtbarkeit darüber haben, wie sich eine Aktie im Laufe der Zeit ändert, sodass Sie eine benutzerdefinierte Metrik erstellen.
Klicken Sie im EXPLORER-Bereich mit der rechten Maustaste auf den Ordner "Produkte ", und wählen Sie dann "Neue Datei" aus.
Geben Sie im Feld "Dateiname " ProductsMetrics.cs ein.
Ersetzen Sie im Text-Editor den Code durch dieses Beispiel:
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 .The preceding code creates a new metric called
eshoplite.products.stock_change. Diese Metrik verfolgt die Menge der Lagerbestände, die durch den Produktservice geändert werden.Wählen Sie STRG+S aus, um die Datei zu speichern.
Wählen Sie im Explorer-Bereich im Ordner "Produkte " Program.cs aus.
Ersetzen Sie den
AddObservabilityCode durch diesen Code:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();Dieser Code fügt die
ProductsMetricsKlasse dem Container zum Einfügen von Abhängigkeiten hinzu.Wählen Sie STRG+S aus, um die Datei zu speichern.
Erweitern Sie im Explorer-Bereich im Ordner "Produkte " den Endpunktordner , und wählen Sie dann ProductEndpoints.cs aus.
Ersetzen Sie den vorhandenen Aktienaktualisierungsendpunkt
MapPutdurch 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
ProductsMetricsKlasse zum Endpunkt hinzuzufügen. Anschließend rufen Sie dieStockChangeMethode auf, um die Metrik mit dem neuen Aktienbetrag zu erhöhen.Wählen Sie STRG+S aus, um die Datei zu speichern.
Hinzufügen der Metrik zu OpenTelemetry
Sie fügen nun die Metrik zu OpenTelemetry hinzu, damit sie in Ihre Observability-Tools exportiert werden kann.
Wählen Sie im Explorer-Bereich im Ordner "Diagnose " die Option "DiagnosticServiceCollectionExtensions" aus.
Ändern Sie die
AddObservabilityMethode 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 diesen Code hinzu:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }Wählen Sie STRG+S aus, um die Datei zu speichern.
Anzeigen der neuen Metrik in Prometheus
Wechseln Sie im TERMINAL-Bereich unten zum Ordner dotnet-observability/eShopLite .
cd ..Aktualisieren Sie die App-Container.
dotnet publish /p:PublishProfile=DefaultContainerWechseln Sie zum Ordner "dotnet-observability ", und starten Sie die App mit Docker:
cd .. docker compose upÖffnen Sie die eShopLite App in einem Browser unter
http://localhost:32000.Wechseln Sie zur Seite " Produkte ", und ändern Sie die Lagermenge auf mehreren Produkten.
Öffnen Sie das Prometheus-Dashboard unter
http://localhost:9090.Geben Sie im Suchfeld die
eshoplite_products_stock_change_totalMetrik ein, und wählen Sie dann "Ausführen" aus.Dies sollte in einer Tabelle aufgeführt werden.
Wählen Sie die Registerkarte "Graph" aus. Die Aktienmenge sollte sich im Laufe der Zeit ändern.
Drücken Sie im TERMINALbereichSTRG+C , um die App zu beenden.
