Exercício - Estenda a telemetria no .NET 8
O aplicativo eShopLite atual 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, e cria uma métrica personalizada.
No painel EXPLORER , clique com o botão direito do rato na pasta Produtos e, em seguida, selecione Novo Ficheiro.
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 stock que está a ser alterada através do serviço de produto.Selecione Ctrl+S para salvar o arquivo.
No painel EXPLORER, na pasta Products, selecione Program.cs.
Substitua o código
AddObservabilitypor este código:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();Esse código adiciona a classe
ProductsMetricsao 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
MapPutda atualização de stock 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(); })Utiliza-se a injeção de dependência para adicionar a classe
ProductsMetricsao endpoint. Em seguida, estás a chamar o métodoStockChangepara incrementar a métrica com a nova quantidade de stock.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 Diagnostics, selecione DiagnosticServiceCollectionExtensions.
Altere o método
AddObservabilitypara 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 em Prometheus
No painel TERMINAL , vá para a pasta dotnet-observability/eShopLite na parte inferior.
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 a aplicação eShopLite num navegador em
http://localhost:32000.Vá para a página Produtos e altere a quantidade em stock de vários produtos.
Abra o painel 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 Graph. Deve observar a quantidade de estoque mudar ao longo do tempo.
No painel TERMINAL , pressione Ctrl+C para parar o aplicativo.