Übung – Erweitern der Telemetrie in .NET 8

Abgeschlossen

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.

  1. Klicken Sie im EXPLORER-Bereich mit der rechten Maustaste auf den Ordner "Produkte ", und wählen Sie dann "Neue Datei" aus.

  2. Geben Sie im Feld "Dateiname " ProductsMetrics.cs ein.

  3. 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.

  4. Wählen Sie STRG+S aus, um die Datei zu speichern.

  5. Wählen Sie im Explorer-Bereich im Ordner "Produkte " Program.cs aus.

  6. Ersetzen Sie den AddObservability Code durch diesen Code:

    builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]);
    
    // Register the metrics service.
    builder.Services.AddSingleton<ProductsMetrics>();
    

    Dieser Code fügt die ProductsMetrics Klasse dem Container zum Einfügen von Abhängigkeiten hinzu.

  7. Wählen Sie STRG+S aus, um die Datei zu speichern.

  8. Erweitern Sie im Explorer-Bereich im Ordner "Produkte " den Endpunktordner , und wählen Sie dann ProductEndpoints.cs aus.

  9. Ersetzen Sie den vorhandenen Aktienaktualisierungsendpunkt MapPut 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 die StockChange Methode auf, um die Metrik mit dem neuen Aktienbetrag zu erhöhen.

  10. 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.

  1. Wählen Sie im Explorer-Bereich im Ordner "Diagnose " die Option "DiagnosticServiceCollectionExtensions" aus.

  2. Ä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)
    
  3. 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);
      }
    }
    
  4. Wählen Sie STRG+S aus, um die Datei zu speichern.

Anzeigen der neuen Metrik in Prometheus

  1. Wechseln Sie im TERMINAL-Bereich unten zum Ordner dotnet-observability/eShopLite .

    cd ..
    
  2. Aktualisieren Sie die App-Container.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Wechseln Sie zum Ordner "dotnet-observability ", und starten Sie die App mit Docker:

    cd ..
    docker compose up
    
  4. Öffnen Sie die eShopLite App in einem Browser unter http://localhost:32000.

  5. Wechseln Sie zur Seite " Produkte ", und ändern Sie die Lagermenge auf mehreren Produkten.

  6. Öffnen Sie das Prometheus-Dashboard unter http://localhost:9090.

  7. Geben Sie im Suchfeld dieeshoplite_products_stock_change_total Metrik ein, und wählen Sie dann "Ausführen" aus.

    Dies sollte in einer Tabelle aufgeführt werden.

  8. Wählen Sie die Registerkarte "Graph" aus. Die Aktienmenge sollte sich im Laufe der Zeit ändern.

    Screenshot, auf dem Prometheus die neue benutzerdefinierte Metrik in einem Diagramm zeigt.

  9. Drücken Sie im TERMINALbereichSTRG+C , um die App zu beenden.