Ejercicio: extensión de la telemetría en .NET 8
La aplicación actual eShopLite usa la telemetría predeterminada proporcionada por OpenTelemetry. Puede ampliar la telemetría agregando métricas y atributos personalizados a los datos de telemetría. Esta capacidad o le permite agregar más contexto a los datos de telemetría y crear consultas más eficaces en Application Insights.
En este ejercicio, agregará nuevas métricas a las aplicaciones y verá cómo verlas en las aplicaciones de observabilidad.
Creación de una métrica personalizada
Quiere tener una mayor visibilidad de cómo cambia un stock a lo largo del tiempo, por lo que crea una métrica personalizada.
En Visual Studio Code, en el panel EXPLORADOR, haga clic con el botón derecho en la carpeta Productos y seleccione Nuevo archivo.
En el campo Nombre de archivo, introduzca ProductsMetrics.cs.
En el editor de texto, reemplace el código por este ejemplo:
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); } }
El código anterior crea una nueva métrica denominada
eshoplite.products.stock_change
. Esta métrica realiza un seguimiento de la cantidad de existencias que se cambian a través del servicio de producto.Presione Ctrl+S para guardar el archivo.
En el panel EXPLORADOR, en la carpeta Productos, seleccione Program.cs.
Reemplace el código
AddObservability
por este código:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
Este código agrega la clase
ProductsMetrics
al contenedor de inserción de dependencias.Presione Ctrl+S para guardar el archivo.
En el panel EXPLORADOR, en la carpeta Productos, expanda la carpeta Punto de conexión y, a continuación, seleccione ProductEndpoints.cs.
Reemplace el punto de conexión de actualización
MapPut
de existencias existente por este código: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(); })
Use la inserción de dependencias para agregar la clase
ProductsMetrics
al punto de conexión. A continuación, va a llamar al métodoStockChange
para incrementar la métrica con la nueva cantidad de existencias.Presione Ctrl+S para guardar el archivo.
Adición de la métrica a OpenTelemetry
Ahora agregará la métrica a OpenTelemetry para que se pueda exportar a las herramientas de observabilidad.
En el panel EXPLORADOR, en la carpeta Diagnósticos, seleccione DiagnosticServiceCollectionExtensions.
Cambie el método
AddObservability
para aceptar un nuevo parámetro:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)
Debajo de la línea exportadora de Prometheus, agregue este código:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }
Presione Ctrl+S para guardar el archivo.
Visualización de la nueva métrica en Prometheus
En el panel TERMINAL de la parte inferior, vaya a la carpeta dotnet-observability/eShopLite.
cd ..
Actualice los contenedores de aplicaciones.
dotnet publish /p:PublishProfile=DefaultContainer
Vaya a la carpeta dotnet-observability e inicie la aplicación con Docker:
cd .. docker compose up
Abra la aplicación eShopLite en un explorador en
http://localhost:32000
.Vaya a la página Productos y cambie la cantidad de existencias en varios productos.
Abra el panel de Prometheus en
http://localhost:9090
.En el cuadro de búsqueda, escriba la métrica
eshoplite_products_stock_change_total
y seleccione Ejecutar.Debería verlo en una tabla.
Seleccione la pestaña Graph. Debería ver el cambio de la cantidad de existencias a lo largo del tiempo.
En el panel TERMINAL, presione Ctrl+C para detener la aplicación.