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 capacité 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 Visual Studio Online Application Insights.

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

Créer une métrique personnalisée

Vous souhaitez avoir une meilleure visibilité sur l'évolution d'un titre dans le temps et vous créez donc une mesure personnalisée.

  1. Dans Visual Studio Code, 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 EXPLORER, dans le dossier Products, sélectionnez Program.cs.

  6. Remplacez le code AddObservability par ce code :

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

    Ce code ajoute la classe ProductsMetrics 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 de mise à jour MapPut 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 EXPLORER, 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 à 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.

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

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