Gyakorlat – Telemetria kiterjesztése a .NET 8-ban

Befejeződött

Az aktuális eShopLite alkalmazás az OpenTelemetria által megadott alapértelmezett telemetriát használja. A telemetriát úgy bővítheti, ha egyéni metrikákat és egyéni attribútumokat ad hozzá a telemetriai adatokhoz. Ez a funkció lehetővé teszi, hogy több kontextust adjon hozzá a telemetriai adatokhoz, és hatékonyabb lekérdezéseket hozzon létre az Alkalmazás Elemzések.

Ebben a gyakorlatban új metrikákat ad hozzá az alkalmazásokhoz, és megtudhatja, hogyan tekintheti meg őket a megfigyelhető alkalmazásokban.

Egyéni metrikák létrehozása

Szeretné jobban áttekinteni, hogyan változik egy részvény az idő múlásával, ezért egyéni metrikát hoz létre.

  1. A Visual Studio Code EXPLORER ablaktábláján kattintson a jobb gombbal a Termékek mappára, majd válassza az Új fájl lehetőséget.

  2. A Fájlnév mezőbe írja be a ProductsMetrics.cs.

  3. A szövegszerkesztőben cserélje le a kódot a következő példára:

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

    Az előző kód létrehoz egy új, .eshoplite.products.stock_change Ez a metrika nyomon követi a termékszolgáltatáson keresztül módosítandó készlet mennyiségét.

  4. Mentse a fájlt a Ctrl+S billentyűkombinációval.

  5. Az EXPLORER panel Termékek mappájában válassza a Program.cs.

  6. Cserélje le a AddObservability kódot a következő kódra:

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

    Ez a kód hozzáadja az ProductsMetrics osztályt a függőséginjektálási tárolóhoz.

  7. Mentse a fájlt a Ctrl+S billentyűkombinációval.

  8. Az EXPLORER panel Termékek mappájában bontsa ki a Végpont mappát, majd válassza a ProductEndpoints.cs.

  9. Cserélje le a meglévő készletfrissítési MapPut végpontot a következő kódra:

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

    Függőséginjektálás használatával adja hozzá az osztályt ProductsMetrics a végponthoz. Ezután meghívja a metódust, StockChange hogy növelje a metrikát az új részvényösszeggel.

  10. Mentse a fájlt a Ctrl+S billentyűkombinációval.

Metrika hozzáadása az OpenTelemetryhez

Most hozzáadja a metrikát az OpenTelemetryhez, hogy exportálható legyen a megfigyelhetőségi eszközökbe.

  1. Az EXPLORER panel Diagnosztikai mappájában válassza a DiagnosticServiceCollectionExtensions lehetőséget.

  2. Módosítsa a metódust AddObservability egy új paraméter elfogadásához:

    public static IServiceCollection AddObservability(this IServiceCollection services,
        string serviceName,
        IConfiguration configuration,
        string[]? meeterNames = null)
    
  3. A Prometheus exportőr sor alatt adja hozzá a következő kódot:

    .AddPrometheusExporter();
    
    // add any additional meters provided by the caller
    if (meeterNames != null)
    {
      foreach (var name in meeterNames)
      {
        metrics.AddMeter(name);
      }
    }
    
  4. Mentse a fájlt a Ctrl+S billentyűkombinációval.

Az új metrika megtekintése a Prometheusban

  1. A TERMINÁL panel alján lépjen a dotnet-observability/eShopLite mappára.

    cd ..
    
  2. Frissítse az alkalmazástárolókat.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Nyissa meg a dotnet-observability mappát, és indítsa el az alkalmazást a Dockerrel:

    cd ..
    docker compose up
    
  4. Nyissa meg az eShopLite alkalmazást egy böngészőben a következő címen http://localhost:32000: .

  5. Lépjen a Termékek lapra, és módosítsa a készlet összegét több terméken.

  6. Nyissa meg a Prometheus irányítópultot a következő helyen http://localhost:9090: .

  7. A keresőmezőbe írja be a metrikát, majd válassza azeshoplite_products_stock_change_total Végrehajtás lehetőséget.

    Látnia kell egy táblázatban.

  8. Válassza a Graph lapot. A készlet mennyiségének időbeli változását kell látnia.

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

  9. A TERMINÁL panelen nyomja le a Ctrl C billentyűkombinációt +az alkalmazás leállításához.