Exercice - Étendre la télémétrie dans .NET 8

Effectué

L’application actuelle eShopLite utilise les données de télémétrie par défaut fournies par OpenTelemetry. Vous pouvez étendre les données de télémétrie en ajoutant des métriques personnalisées et des attributs personnalisés aux données de télémétrie. Cette fonctionnalité vous permet d’ajouter davantage de contexte aux données de télémétrie et de créer des requêtes plus puissantes dans Application Insights.

Dans cet exercice, vous ajoutez de nouvelles métriques aux applications et découvrez comment les afficher dans vos applications d’observabilité.

Créer une métrique personnalisée

Vous souhaitez avoir une meilleure visibilité de la façon dont un stock change au fil du temps, de sorte que vous créez une métrique personnalisée.

  1. Dans le volet EXPLORATEUR , cliquez avec le bouton droit sur le dossier Produits , puis sélectionnez Nouveau fichier.

  2. Dans le champ Nom de fichier , entrez ProductsMetrics.cs.

  3. Dans l’éditeur de texte, remplacez le code par cet exemple :

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

    Le code précédent crée une métrique appelée eshoplite.products.stock_change. Cette métrique suit la quantité de stock en cours de modification par le biais du service de produit.

  4. Sélectionnez Ctrl+S pour enregistrer le fichier.

  5. Dans le volet EXPLORATEUR , dans le dossier Produits , sélectionnez Program.cs.

  6. Remplacez le AddObservability code par ce code :

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

    Ce code ajoute la ProductsMetrics classe au conteneur d’injection de dépendances.

  7. Sélectionnez Ctrl+S pour enregistrer le fichier.

  8. Dans le volet EXPLORATEUR , dans le dossier Produits , développez le dossier Point de terminaison , puis sélectionnez ProductEndpoints.cs.

  9. Remplacez le point de terminaison MapPut de mise à jour de stock existant par ce 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();
    })      
    

    Vous utilisez l’injection de dépendances pour ajouter la ProductsMetrics classe au point de terminaison. Vous appelez ensuite la StockChange méthode pour incrémenter la métrique avec la nouvelle quantité de stock.

  10. Sélectionnez Ctrl+S pour enregistrer le fichier.

Ajouter la métrique à OpenTelemetry

Vous ajoutez maintenant la métrique à OpenTelemetry afin qu’elle puisse être exportée vers vos outils d’observabilité.

  1. Dans le volet EXPLORATEUR , dans le dossier Diagnostics , sélectionnez DiagnosticServiceCollectionExtensions.

  2. Modifiez la AddObservability méthode pour accepter un nouveau paramètre :

    public static IServiceCollection AddObservability(this IServiceCollection services,
        string serviceName,
        IConfiguration configuration,
        string[]? meeterNames = null)
    
  3. Sous la ligne de l’exportateur Prometheus, ajoutez ce code :

    .AddPrometheusExporter();
    
    // add any additional meters provided by the caller
    if (meeterNames != null)
    {
      foreach (var name in meeterNames)
      {
        metrics.AddMeter(name);
      }
    }
    
  4. Sélectionnez Ctrl+S pour enregistrer le fichier.

Afficher la nouvelle métrique dans Prometheus

  1. Dans le volet TERMINAL en bas, accédez au dossier dotnet-observability/eShopLite .

    cd ..
    
  2. Mettez à jour les conteneurs d’applications.

    dotnet publish /p:PublishProfile=DefaultContainer 
    
  3. Accédez au dossier dotnet-observability et démarrez l’application avec Docker :

    cd ..
    docker compose up
    
  4. Ouvrez l’application eShopLite dans un navigateur à l’adresse http://localhost:32000.

  5. Accédez à la page Produits et modifiez le montant du stock sur plusieurs produits.

  6. Ouvrez le tableau de bord Prometheus à l’adresse http://localhost:9090.

  7. Dans la zone de recherche, entrez laeshoplite_products_stock_change_total métrique, puis sélectionnez Exécuter.

    Vous devriez la voir répertoriée dans une table.

  8. Sélectionnez l’onglet Graph . Vous devriez voir le changement du montant des actions au fil du temps.

    Capture d’écran montrant Prometheus montrant la nouvelle métrique personnalisée sur un graphique.

  9. Dans le volet TERMINAL , appuyez sur Ctrl+C pour arrêter l’application.