Exercício - Estenda a telemetria no .NET 8
O aplicativo atual eShopLite está usando a telemetria padrão fornecida pelo OpenTelemetry. Você pode estender a telemetria adicionando métricas personalizadas e atributos personalizados aos dados de telemetria. Esse recurso permite adicionar mais contexto aos dados de telemetria e criar consultas mais poderosas no Application Insights.
Neste exercício, você adiciona novas métricas aos aplicativos e vê como visualizá-las em seus aplicativos de observabilidade.
Criar uma métrica personalizada
Você deseja ter maior visibilidade de como uma ação muda ao longo do tempo, para criar uma métrica personalizada.
No Visual Studio Code, no painel EXPLORER, clique com o botão direito do mouse na pasta Produtos e selecione Novo Arquivo.
No campo Nome do arquivo , digite ProductsMetrics.cs.
No editor de texto, substitua o código por este exemplo:
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); } }
O código anterior cria uma nova métrica chamada
eshoplite.products.stock_change
. Essa métrica rastreia a quantidade de estoque que está sendo alterada por meio do serviço do produto.Selecione Ctrl+S para guardar o ficheiro.
No painel EXPLORER, na pasta Produtos, selecione Program.cs.
Substitua o
AddObservability
código por este código:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
Esse código adiciona a
ProductsMetrics
classe ao contêiner de injeção de dependência.Selecione Ctrl+S para guardar o ficheiro.
No painel EXPLORER, na pasta Produtos, expanda a pasta Ponto de extremidade e selecione ProductEndpoints.cs.
Substitua o ponto de extremidade de atualização
MapPut
de estoque 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 a injeção de dependência para adicionar a
ProductsMetrics
classe ao ponto de extremidade. Em seguida, você está chamando oStockChange
método para incrementar a métrica com o novo valor de estoque.Selecione Ctrl+S para guardar o ficheiro.
Adicionar a métrica ao OpenTelemetry
Agora você adiciona a métrica ao OpenTelemetry para que ela possa ser exportada para suas ferramentas de observabilidade.
No painel EXPLORER, na pasta Diagnostics, selecione DiagnosticServiceCollectionExtensions.
Altere o
AddObservability
método para aceitar um novo parâmetro:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)
Abaixo da linha do exportador Prometheus, adicione este código:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }
Selecione Ctrl+S para guardar o ficheiro.
Veja a nova métrica em Prometheus
No painel TERMINAL na parte inferior, vá para a pasta dotnet-observability/eShopLite.
cd ..
Atualize os contêineres de aplicativos.
dotnet publish /p:PublishProfile=DefaultContainer
Vá para a pasta dotnet-observability e inicie o aplicativo com o Docker:
cd .. docker compose up
Abra o eShopLite aplicativo em um navegador em
http://localhost:32000
.Vá para a página Produtos e altere o valor do estoque de vários produtos.
Abra o painel do Prometheus em
http://localhost:9090
.Na caixa de pesquisa, insira a
eshoplite_products_stock_change_total
métrica e selecione Executar.Você deve vê-lo listado em uma tabela.
Selecione a guia Gráfico . Você deve ver o valor do estoque mudar ao longo do tempo.
No painel TERMINAL, pressione Ctrl+C para parar o aplicativo.