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

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. Для всех фрагментов кода, которые необходимо инструментировать, добавьте инструкцию usingStartOperation<RequestTelemetry>, как показано в следующем примере.

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