Cvičení – rozšíření telemetrie v .NET 8

Dokončeno

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.

  1. 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).

  2. Do pole Název souboru zadejte ProductsMetrics.cs.

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

  4. Vyberte Stisknutím kláves Ctrl+S soubor uložte.

  5. V podokně EXPLORER ve složce Products vyberte Program.cs.

  6. Nahraďte kód AddObservability tí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 ProductsMetrics do kontejneru injektáže závislostí.

  7. Vyberte Stisknutím kláves Ctrl+S soubor uložte.

  8. V podokně PRŮZKUMNÍK ve složce Produkty rozbalte složku Koncový bod a pak vyberte ProductEndpoints.cs.

  9. Nahraďte stávající koncový bod aktualizace zásob MapPut tí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 ProductsMetrics do koncového bodu. Následně voláte metodu StockChange, která zvýší metriku o nové množství zásob.

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

  1. V podokně EXPLORER ve složce Diagnostika vyberte DiagnosticServiceCollectionExtensions.

  2. Změňte metodu AddObservability tak, aby přijímala nový parametr:

    public static IServiceCollection AddObservability(this IServiceCollection services,
        string serviceName,
        IConfiguration configuration,
        string[]? meeterNames = null)
    
  3. 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);
      }
    }
    
  4. Vyberte Stisknutím kláves Ctrl+S soubor uložte.

Zobrazení nové metriky v systému Prometheus

  1. V dolní části podokna TERMINAL přejděte do složky dotnet-observability/eShopLite.

    cd ..
    
  2. Aktualizujte kontejnery aplikací.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Přejděte do složky dotnet-observability a spusťte aplikaci pomocí Dockeru:

    cd ..
    docker compose up
    
  4. Otevřete aplikaci eShopLite v prohlížeči v http://localhost:32000.

  5. Přejděte na stránku Produkty a změňte množství zásob u několika produktů.

  6. Otevřete řídicí panel Prometheus na http://localhost:9090.

  7. Do vyhledávacího pole zadejte metrikueshoplite_products_stock_change_total a pak vyberte Spustit.

    Mělo by se zobrazit v tabulce.

  8. Vyberte kartu Graph. Měla by se zobrazit změna množství akcií v průběhu času.

    snímek obrazovky znázorňující Prometheus s novou vlastní metrikou v grafu

  9. V podokně TERMINÁL stisknutím klávesy Ctrl+C aplikaci zastavte.