Написание кода для отслеживания запросов с помощью Application Insights Profiler для .NET
Application Insights должен отслеживать запросы приложения, чтобы предоставить профили для приложения на странице "Производительность" в портал Azure. Для приложений, созданных на уже инструментированных платформах (например, ASP.NET и ASP.NET Core), Application Insights может автоматически отслеживать запросы.
Для других приложений (например, для рабочих ролей Azure Облачные службы и API без отслеживания состояния Azure Service Fabric) необходимо отслеживать запросы с кодом, который сообщает Application Insights, где начинаются и заканчиваются запросы. Затем запросы телеметрии отправляются в Application Insights, которые можно просмотреть на странице "Производительность ". Для этих запросов собираются профили.
Чтобы вручную отслеживать запросы, выполните указанные ниже действия.
Добавьте следующий код в раннюю точку во времени существования приложения:
using Microsoft.ApplicationInsights.Extensibility; ... // Replace with your own Application Insights instrumentation key. TelemetryConfiguration.Active.InstrumentationKey = "00000000-0000-0000-0000-000000000000";
Дополнительные сведения об этой глобальной конфигурации ключа инструментирования см. в статье Using Service Fabric with Application Insights (Использование Service Fabric с Application Insights).
Для любого фрагмента кода, который вы хотите инструментировать, добавьте
StartOperation<RequestTelemetry>
вокруг него инструкцию using , как показано в следующем примере:using Microsoft.ApplicationInsights; using Microsoft.ApplicationInsights.DataContracts; ... var client = new TelemetryClient(); ... using (var operation = client.StartOperation<RequestTelemetry>("Insert_Your_Custom_Event_Unique_Name")) { // ... Code I want to profile. }
Вызов
StartOperation<RequestTelemetry>
в другой областиStartOperation<RequestTelemetry>
не поддерживается. Вместо этого можно использоватьStartOperation<DependencyTelemetry>
во вложенной области. Рассмотрим пример.using (var getDetailsOperation = client.Operation<RequestTelemetry>("GetProductDetails")) { try { ProductDetail details = new ProductDetail() { Id = productId }; getDetailsOperation.Telemetry.Properties["ProductId"] = productId.ToString(); // By using DependencyTelemetry, 'GetProductPrice' is correctly linked as part of the 'GetProductDetails' request. using (var getPriceOperation = client.StartOperation<DependencyTelemetry>("GetProductPrice")) { double price = await _priceDataBase.GetAsync(productId); if (IsTooCheap(price)) { throw new PriceTooLowException(productId); } details.Price = price; } // Similarly, note how 'GetProductReviews' doesn't establish another RequestTelemetry. using (var getReviewsOperation = client.StartOperation<DependencyTelemetry>("GetProductReviews")) { details.Reviews = await _reviewDataBase.GetAsync(productId); } getDetailsOperation.Telemetry.Success = true; return details; } catch(Exception ex) { getDetailsOperation.Telemetry.Success = false; // This exception gets linked to the 'GetProductDetails' request telemetry. client.TrackException(ex); throw; } }
Примечание.
Поддержка приема ключей инструментирования будет завершена 31 марта 31, 2025 г. Прием ключей инструментирования будет и дальше осуществляться, но мы больше не будем предоставлять обновления или поддержку для этой функции. Перейдите на строки подключения, чтобы использовать новые возможности.
Следующие шаги
Устранение неполадок с Application Insights Profiler для .NET.