연습 - .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를 선택하여 파일을 저장합니다.
탐색기 창의 Products 폴더에서 Program.cs를 선택합니다.
AddObservability
코드를 다음 코드로 바꿉니다.builder.Services.AddObservability("Products", builder.Configuration, ["eShopLite.Products"]); // Register the metrics service. builder.Services.AddSingleton<ProductsMetrics>();
이 코드는 종속성 주입 컨테이너에
ProductsMetrics
클래스를 추가합니다.Ctrl+S를 선택하여 파일을 저장합니다.
탐색기 창의 Products 폴더에서 엔드포인트 폴더를 확장한 다음 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에 추가하여 관찰 도구로 내보낼 수 있습니다.
탐색기 창의 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
앱을 엽니다.제품 페이지로 이동하여 여러 제품의 재고 금액을 변경합니다.
http://localhost:9090
에서 Prometheus대시보드를 엽니다.검색 상자에
eshoplite_products_stock_change_total
메트릭을 입력한 다음 실행을 선택합니다.표에 나열된 것이 표시됩니다.
그래프 탭을 선택합니다. 시간이 지남에 따라 주식 금액이 변경되는 것을 볼 수 있습니다.
터미널 창에서 Ctrl+C를 눌러 앱을 중지합니다.