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


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

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

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

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

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

    using Microsoft.ApplicationInsights.Extensibility;
    ...
    // Replace with your own Application Insights connection string.
    TelemetryConfiguration.Active.InstrumentationKey = "00000000-0000-0000-0000-000000000000";
    

    Дополнительные сведения об этой глобальной конфигурации строки подключения см. в разделе "Использование 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 марта 2025 г. Продолжит функционирование системы по выдаче ключей инструментирования, но мы больше не будем предоставлять обновления или поддержку для этой возможности. Перейдите на строки подключения, чтобы использовать новые возможности.

Следующие шаги

Устраните неполадки с Application Insights Profiler для .NET.