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