Ö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. I Visual Studio Code högerklickar du påmappen Produkter i explorer-fönstret och väljer 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 trycka på Ctrl+S.

  5. I explorer-fönstret går du till mappen Produkter och väljer Program.cs.

  6. AddObservability Ersätt 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 ProductsMetrics klassen i containern för beroendeinmatning.

  7. Spara filen genom att trycka på 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 slutpunkten för lageruppdateringen MapPut 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 ProductsMetrics till klassen i slutpunkten. Sedan anropar StockChange du metoden för att öka måttet med den nya lagermängden.

  10. Spara filen genom att trycka på 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 explorer-fönstret går du till mappen Diagnostik och väljer DiagnosticServiceCollectionExtensions.

  2. Ändra metoden så att den AddObservability accepterar 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 trycka på Ctrl+S.

Visa det nya måttet i Prometheus

  1. Gå till mappen dotnet-observability/eShopLite i terminalfönstret längst ned.

    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. eShopLite Öppna appen i en webbläsare på http://localhost:32000.

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

  6. Öppna Prometheus-instrumentpanelenhttp://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 i en tabell.

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

    Screenshot that shows Prometheus showing the new custom metric on a graph.

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