Упражнение. Расширение телеметрии в .NET 8
Текущее приложение eShopLite использует телеметрию по умолчанию, предоставляемую OpenTelemetry. Вы можете расширить данные телеметрии, добавив пользовательские метрики и настраиваемые атрибуты в данные телеметрии. Эта возможность позволяет добавлять дополнительные контексты к данным телеметрии и создавать более мощные запросы в Application Insights.
В этом упражнении вы добавите новые метрики в приложения и узнаете, как просматривать их в приложениях для наблюдения.
Создать пользовательскую метрику
Вы хотите иметь большее понимание того, как акции изменяются со временем, поэтому вы создаете настраиваемую метрику.
В Visual Studio Code на панели обозревателя щелкните правой кнопкой мыши папку Products, а затем выберите Создать файл.
В поле имени файла введите ProductsMetrics.cs.
В текстовом редакторе замените код следующим примером:
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); } }
Предыдущий код создает новую метрику с именем
eshoplite.products.stock_change
. Эта метрика отслеживает объем запасов, изменяемых через продуктовый сервис.Щелкните CTRL+S, чтобы сохранить файл.
В области обозревателя в папке продуктов выберите Program.cs.
Замените код
AddObservability
следующим кодом:builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
Этот код добавляет класс
ProductsMetrics
в контейнер внедрения зависимостей.Щелкните CTRL+S, чтобы сохранить файл.
В области обозревателя в папке продуктов разверните папку конечной точки и выберите ProductEndpoints.cs.
Замените существующую конечную точку обновления акций
MapPut
следующим кодом: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(); })
Внедрение зависимостей используется для добавления класса
ProductsMetrics
в конечную точку. Затем вы вызываете методStockChange
для увеличения метрики с новым количеством запаса.Щелкните CTRL+S, чтобы сохранить файл.
Добавление метрики в OpenTelemetry
Теперь вы добавите метрику в OpenTelemetry, чтобы ее можно было экспортировать в средства наблюдаемости.
В области EXPLORER в папке Diagnostics выберите DiagnosticServiceCollectionExtensions.
Измените метод
AddObservability
, чтобы принять новый параметр:public static IServiceCollection AddObservability(this IServiceCollection services, string serviceName, IConfiguration configuration, string[]? meeterNames = null)
Под строкой экспортера Prometheus добавьте следующий код:
.AddPrometheusExporter(); // add any additional meters provided by the caller if (meeterNames != null) { foreach (var name in meeterNames) { metrics.AddMeter(name); } }
Щелкните CTRL+S, чтобы сохранить файл.
Просмотр новой метрики в Prometheus
В области терминала в нижней части экрана перейдите в папку dotnet-observability/eShopLite.
cd ..
Обновите контейнеры приложений.
dotnet publish /p:PublishProfile=DefaultContainer
Перейдите в папку dotnet-observability и запустите приложение с помощью Docker:
cd .. docker compose up
Откройте приложение eShopLite в браузере
http://localhost:32000
.Перейдите на страницу продукции и измените количество на складе для нескольких продуктов.
Откройте панель мониторинга Prometheus
http://localhost:9090
.В поле поиска введите метрику
eshoplite_products_stock_change_total
и выберите Выполнить.Он должен отображаться в таблице.
Выберите вкладку граф. Вы должны увидеть изменение объема акций со временем.
В области ТЕРМИНАЛ нажмите клавиши CTRL +C, чтобы остановить приложение.