Упражнение. Расширение телеметрии в .NET 8
Текущее eShopLite приложение использует телеметрию по умолчанию, предоставляемую OpenTelemetry. Вы можете расширить данные телеметрии, добавив пользовательские метрики и настраиваемые атрибуты в данные телеметрии. Эта возможность позволяет добавлять дополнительные контексты в данные телеметрии и создавать более мощные запросы в приложении Аналитика.
В этом упражнении вы добавите новые метрики в приложения и узнаете, как просматривать их в приложениях для наблюдения.
Создание пользовательской метрики
Вы хотите иметь большую видимость того, как акции изменяются со временем, поэтому вы создаете пользовательскую метрику.
В Visual Studio Code в области обозревателя щелкните правой кнопкой мыши папку "Продукты " и выберите "Создать файл".
В поле "Имя файла" введите 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, чтобы сохранить файл.
В области обозревателя в папке "Продукты" разверните папку Endpoint и выберите 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, чтобы ее можно было экспортировать в средства наблюдаемости.
В области обозревателя в папке диагностики выберите DiagnosticsServiceCollectionExtensions.
Измените метод,
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
и нажмите кнопку "Выполнить".Он должен отображаться в таблице.
Перейдите на вкладку Graph . С течением времени вы увидите изменение суммы акций.
В области ТЕРМИНАЛА нажмите клавиши CTRL+C, чтобы остановить приложение.