Övning – Utöka telemetri i .NET 8

Slutförd

Den aktuella eShopLite appen använder standardtelemetrin som tillhandahålls av OpenTelemetry. Du kan utöka telemetrin genom att lägga till anpassade mått och anpassade attribut till telemetridata. Med den här funktionen kan du lägga till mer kontext till telemetridata och skapa kraftfullare frågor i Application Insights.

I den här övningen lägger du till nya mått i appar och ser hur du visar dem i dina observerbarhetsappar.

Skapa ett anpassat mått

Du vill ha större insyn i hur en aktie ändras över tid, så att du skapar ett anpassat mått.

  1. Högerklicka på mappen Produkteri explorer-fönstret och välj sedan Ny fil.

  2. I fältet Filnamn anger du ProductsMetrics.cs.

  3. I textredigeraren ersätter du koden med det här exemplet:

    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);
        }
    }
    

    Föregående kod skapar ett nytt mått med namnet eshoplite.products.stock_change. Det här måttet spårar mängden lager som ändras via produkttjänsten.

  4. Spara filen genom att välja Ctrl+S.

  5. I fönstret EXPLORER väljer du Program.csi mappen Products .

  6. Ersätt AddObservability-koden med den här koden:

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

    Den här koden lägger till klassen ProductsMetrics i containern för beroendeinmatning.

  7. Spara filen genom att välja Ctrl+S.

  8. I explorer-fönstret i mappen Produkter expanderar du mappen Slutpunkt och väljer sedan ProductEndpoints.cs.

  9. Ersätt den befintliga lageruppdaterings-MapPut-endpointen med den här koden:

    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();
    })      
    

    Du använder beroendeinmatning för att lägga till klassen ProductsMetrics till slutpunkten. Sedan anropar du metoden StockChange för att öka måttet med den nya lagermängden.

  10. Spara filen genom att välja Ctrl+S.

Lägg till måttet i OpenTelemetry

Nu lägger du till måttet i OpenTelemetry så att det kan exporteras till dina observerbarhetsverktyg.

  1. I fönstret EXPLORER väljer du DiagnosticServiceCollectionExtensionsi mappen Diagnostics .

  2. Ändra metoden AddObservability för att acceptera en ny parameter:

    public static IServiceCollection AddObservability(this IServiceCollection services,
        string serviceName,
        IConfiguration configuration,
        string[]? meeterNames = null)
    
  3. Lägg till den här koden under exportraden Prometheus:

    .AddPrometheusExporter();
    
    // add any additional meters provided by the caller
    if (meeterNames != null)
    {
      foreach (var name in meeterNames)
      {
        metrics.AddMeter(name);
      }
    }
    
  4. Spara filen genom att välja Ctrl+S.

Visa det nya måttet i Prometheus

  1. I fönstret TERMINAL längst ned går du till mappen dotnet-observability/eShopLite.

    cd ..
    
  2. Uppdatera appcontainrarna.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Gå till mappen dotnet-observability och starta appen med Docker:

    cd ..
    docker compose up
    
  4. Öppna eShopLite-appen i en webbläsare på http://localhost:32000.

  5. Gå till sidan Produkter och ändra lagermängden på flera produkter.

  6. Öppna instrumentpanelen Prometheushttp://localhost:9090.

  7. I sökrutan anger du måtteteshoplite_products_stock_change_total och väljer sedan Kör.

    Du bör se den listad i en tabell.

  8. Välj fliken Graph. Du bör se att aktiebeloppet ändras över tid.

    Skärmbild som visar det nya anpassade måttet för Prometheus i en graf.

  9. I fönstret TERMINAL trycker du på Ctrl+C för att stoppa appen.