Exercice - Étendre la télémétrie dans .NET 8
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.
Dans le volet EXPLORATEUR , cliquez avec le bouton droit sur le dossier Produits , puis sélectionnez Nouveau fichier.
Dans le champ Nom de fichier , entrez ProductsMetrics.cs.
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.Sélectionnez Ctrl+S pour enregistrer le fichier.
Dans le volet EXPLORATEUR , dans le dossier Produits , sélectionnez Program.cs.
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.Sélectionnez Ctrl+S pour enregistrer le fichier.
Dans le volet EXPLORATEUR , dans le dossier Produits , développez le dossier Point de terminaison , puis sélectionnez ProductEndpoints.cs.
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 laStockChange
méthode pour incrémenter la métrique avec la nouvelle quantité de stock.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é.
Dans le volet EXPLORATEUR , dans le dossier Diagnostics , sélectionnez DiagnosticServiceCollectionExtensions.
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)
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); } }
Sélectionnez Ctrl+S pour enregistrer le fichier.
Afficher la nouvelle métrique dans Prometheus
Dans le volet TERMINAL en bas, accédez au dossier dotnet-observability/eShopLite .
cd ..
Mettez à jour les conteneurs d’applications.
dotnet publish /p:PublishProfile=DefaultContainer
Accédez au dossier dotnet-observability et démarrez l’application avec Docker :
cd .. docker compose up
Ouvrez l’application eShopLite dans un navigateur à l’adresse
http://localhost:32000
.Accédez à la page Produits et modifiez le montant du stock sur plusieurs produits.
Ouvrez le tableau de bord Prometheus à l’adresse
http://localhost:9090
.Dans la zone de recherche, entrez la
eshoplite_products_stock_change_total
métrique, puis sélectionnez Exécuter.Vous devriez la voir répertoriée dans une table.
Sélectionnez l’onglet Graph . Vous devriez voir le changement du montant des actions au fil du temps.
Dans le volet TERMINAL , appuyez sur Ctrl+C pour arrêter l’application.