Partilhar via


Escreva código para rastrear solicitações com o Application Insights Profiler para .NET

O Application Insights precisa rastrear solicitações para seu aplicativo para fornecer perfis para seu aplicativo na página Desempenho no portal do Azure. Para aplicativos criados em estruturas já instrumentadas (como ASP.NET e ASP.NET Core), o Application Insights pode rastrear solicitações automaticamente.

Para outros aplicativos (como funções de trabalho dos Serviços de Nuvem do Azure e APIs sem estado do Azure Service Fabric), você precisa controlar solicitações com código que informa ao Application Insights onde suas solicitações começam e terminam. A telemetria de solicitações é então enviada para o Application Insights, que você pode exibir na página Desempenho . Os perfis são coletados para essas solicitações.

Para controlar manualmente as solicitações:

  1. No início do tempo de vida do aplicativo, adicione o seguinte código:

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

    Para obter mais informações sobre essa configuração de chave de instrumentação global, consulte Usar o Service Fabric com o Application Insights.

  2. Para qualquer parte do código que você deseja instrumentar, adicione uma StartOperation<RequestTelemetry> instrução using em torno dele, conforme mostrado no exemplo a seguir:

    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. Não há suporte para chamadas StartOperation<RequestTelemetry> dentro de outro StartOperation<RequestTelemetry> escopo. Em vez disso, você pode usar StartOperation<DependencyTelemetry> no escopo aninhado. Por exemplo:

    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;
      }
    }
    

Nota

A 31 de março de 2025, o suporte da ingestão de chaves de instrumentação terminará. A ingestão de chaves de instrumentação continuará a funcionar, mas não forneceremos mais atualizações ou suporte para o recurso. Transição para cadeias de conexão para aproveitar os novos recursos.

Próximos passos

Solucione problemas do Application Insights Profiler para .NET.