Compartir a través de


Escritura de código para realizar el seguimiento de solicitudes con Application Insights Profiler para .NET

Application Insights debe realizar un seguimiento de las solicitudes de la aplicación para proporcionar perfiles para la aplicación en la página Rendimiento de Azure Portal. En el caso de las aplicaciones basadas en marcos ya instrumentados (como ASP.NET y ASP.NET Core), Application Insights puede realizar un seguimiento automático de las solicitudes.

Para otras aplicaciones, como los roles de trabajo de Azure Cloud Services y las API sin estado de Azure Service Fabric, es necesario realizar un seguimiento de las solicitudes con código para indicar a Application Insights dónde empiezan y terminan las solicitudes. Las solicitudes de telemetría se envían a Application Insights, que puede ver en la página Rendimiento. Los perfiles se recopilan para esas solicitudes.

Para realizar un seguimiento de las solicitudes manualmente, haga lo siguiente:

  1. Agregue el código siguiente al principio de la duración de la aplicación:

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

    Para más información acerca de la configuración de esta clave de instrumentación global, consulte Using Service Fabric with Application Insights (Uso de Service Fabric con Application Insights).

  2. Con respecto a cualquier parte del código que quiera instrumentar, agregue una instrucción StartOperation<RequestTelemetry> using alrededor, como se muestra en el ejemplo siguiente:

    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. No se permite llamar a StartOperation<RequestTelemetry> dentro de otro ámbito de StartOperation<RequestTelemetry>. En su lugar, puede usar StartOperation<DependencyTelemetry> en el ámbito anidado. Por ejemplo:

    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

El 31 de marzo de 2025 finalizará la compatibilidad con la ingesta de claves de instrumentación. La ingesta de claves de instrumentación seguirá funcionando, pero la característica ya no recibirá actualizaciones ni soporte técnico. Transición a las cadenas de conexión para aprovechar las nuevas funcionalidades.

Pasos siguientes

Solución de problemas de Application Insights Profiler para .NET.