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 personalizadas y atributos personalizados a los datos de telemetría. Esta funcionalidad 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 verlos 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 se crea una métrica personalizada.
En el panel EXPLORADOR , haga clic con el botón derecho en la carpeta Productos y, a continuación, seleccione Nuevo archivo.
En el campo Nombre de archivo , escriba 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.Seleccione Ctrl+S para guardar el archivo.
En el panel EXPLORADOR , en la carpeta Productos , seleccione Program.cs.
Reemplace el
AddObservabilitycódigo 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
ProductsMetricsclase al contenedor de inserción de dependencias.Seleccione 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 de existencias existente
MapPutpor 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(); })Usa la inyección de dependencias para agregar la clase
ProductsMetricsal punto de conexión. A continuación, va a llamar al métodoStockChangepara incrementar la métrica con la nueva cantidad de stock.Seleccione Ctrl+S para guardar el archivo.
Adición de la métrica a OpenTelemetry
Ahora agrega la métrica a OpenTelemetry para que se pueda exportar a las herramientas de observabilidad.
En el panel EXPLORADOR , en la carpeta Diagnostics , seleccione DiagnosticServiceCollectionExtensions.
Cambie el
AddObservabilitymétodo 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); } }Seleccione 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=DefaultContainerVaya a la carpeta dotnet-observability e inicie la aplicación con Docker:
cd .. docker compose upAbra la eShopLite aplicación 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
eshoplite_products_stock_change_totalmétrica y seleccione Ejecutar.Deberías verlo listado en una tabla.
Seleccione la pestaña Gráfico . 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.
