Поделиться через


Написание кода для отслеживания запросов с помощью Application Insights Profiler для .NET

Application Insights должен отслеживать запросы приложения, чтобы предоставить профили для приложения на странице "Производительность" в портал Azure. Для приложений, созданных на уже инструментированных платформах (например, ASP.NET и ASP.NET Core), Application Insights может автоматически отслеживать запросы.

Для других приложений (например, для рабочих ролей Azure Облачные службы и API без отслеживания состояния Azure Service Fabric) необходимо отслеживать запросы с кодом, который сообщает Application Insights, где начинаются и заканчиваются запросы. Затем запросы телеметрии отправляются в Application Insights, которые можно просмотреть на странице "Производительность ". Для этих запросов собираются профили.

Чтобы вручную отслеживать запросы, выполните указанные ниже действия.

  1. Добавьте следующий код в раннюю точку во времени существования приложения:

    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).

  2. Для любого фрагмента кода, который вы хотите инструментировать, добавьте 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.
    }
    
  3. Вызов 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.