Exercício – Estender 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. Essa funcionalidade permite que você adicione mais contexto aos dados de telemetria e crie consultas mais avançadas no Application Insights.
Neste exercício, você adiciona novas métricas aos aplicativos e vê como exibi-las em seus aplicativos de observabilidade.
Criar uma métrica personalizada
Você quer ter maior visibilidade de como uma ação muda ao longo do tempo, então cria uma métrica personalizada.
No painel EXPLORER , clique com o botão direito do mouse na pasta Produtos e selecione Novo Arquivo.
No campo Nome do arquivo , insira 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 salvar o arquivo.
No painel EXPLORER , na pasta Produtos , selecione Program.cs.
Substitua o
AddObservabilitycó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
ProductsMetricsclasse ao contêiner de injeção de dependência.Selecione Ctrl+S para salvar o arquivo.
No painel EXPLORER , na pasta Produtos , expanda a pasta Ponto de Extremidade e selecione ProductEndpoints.cs.
Substitua o ponto de extremidade de atualização de estoque existente
MapPutpor esse 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 injeção de dependência para adicionar a classe
ProductsMetricsao ponto de extremidade. Em seguida, você está chamando o métodoStockChangepara incrementar a métrica com a nova quantidade de estoque.Selecione Ctrl+S para salvar o arquivo.
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 Diagnóstico , selecione DiagnosticServiceCollectionExtensions.
Altere o
AddObservabilitymé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 salvar o arquivo.
Veja a nova métrica no Prometheus
No painel TERMINAL na parte inferior, acesse a pasta dotnet-observability/eShopLite.
cd ..Atualize os contêineres de aplicativos.
dotnet publish /p:PublishProfile=DefaultContainerVá para a pasta dotnet-observability e inicie o aplicativo com o Docker:
cd .. docker compose upAbra o aplicativo eShopLite no navegador em
http://localhost:32000.Vá para a página Produtos e altere o valor do estoque em vários produtos.
Abra o painel do Prometheus em
http://localhost:9090.Na caixa de pesquisa, insira a
eshoplite_products_stock_change_totalmétrica e selecione Executar.Você deve vê-lo listado em uma tabela.
Selecione a guia Grafo . Você deve ver a alteração do valor das ações ao longo do tempo.
No painel TERMINAL , pressione Ctrl+C para interromper o aplicativo.
