Compartir vía


Habilitación de .NET Profiler en contenedores de Azure

Puede habilitar Application Insights Profiler para .NET en aplicaciones que se ejecutan en el contenedor casi sin código. Para habilitar .NET Profiler en la instancia de contenedor, debe:

  • Agregue la referencia al paquete NuGet Microsoft.ApplicationInsights.Profiler.AspNetCore.
  • Actualice el código para habilitar Profiler para .NET.
  • Configure la clave de instrumentación de Application Insights.

En este artículo le explicamos cómo hacerlo:

  • Instale el paquete NuGet en el proyecto.
  • Establezca la variable de entorno a través del orquestador (como Kubernetes).
  • Obtenga información sobre las consideraciones de seguridad sobre la implementación de producción, como proteger la clave de instrumentación de Application Insights.

Requisitos previos

Configuración del entorno

  1. Clone y use el siguiente proyecto de muestra:

    git clone https://github.com/microsoft/ApplicationInsights-Profiler-AspNetCore.git
    
  2. Vaya al ejemplo de aplicación de contenedor:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  3. Este ejemplo es un proyecto básico creado mediante el siguiente comando de la CLI:

    dotnet new mvc -n EnableServiceProfilerForContainerApp
    

    Hemos agregado retraso en el proyecto Controllers/WeatherForecastController.cs para simular el cuello de botella.

    [HttpGet(Name = "GetWeatherForecast")]
    public IEnumerable<WeatherForecast> Get()
    {
        SimulateDelay();
        ...
        // Other existing code.
    }
    private void SimulateDelay()
    {
        // Delay for 500ms to 2s to simulate a bottleneck.
        Thread.Sleep((new Random()).Next(500, 2000));
    }
    
  4. Agregue el paquete NuGet para recopilar los seguimientos de .NET Profiler:

    dotnet add package Microsoft.ApplicationInsights.Profiler.AspNetCore
    
  5. Habilite Application Insights y .NET Profiler.

    Agregue builder.Services.AddApplicationInsightsTelemetry() y builder.Services.AddServiceProfiler() después del método WebApplication.CreateBuilder() en Program.cs:

    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddApplicationInsightsTelemetry(); // Add this line of code to enable Application Insights.
    builder.Services.AddServiceProfiler(); // Add this line of code to enable Profiler
    builder.Services.AddControllersWithViews();
    
    var app = builder.Build();
    

Extracción de las imágenes de compilación o tiempo de ejecución más recientes de ASP.NET Core

  1. Vaya al directorio de ejemplo de .NET Core 6.0.:

    cd examples/EnableServiceProfilerForContainerAppNet6
    
  2. Extracción de las imágenes más recientes de ASP.NET Core:

    docker pull mcr.microsoft.com/dotnet/sdk:6.0
    docker pull mcr.microsoft.com/dotnet/aspnet:6.0
    

Sugerencia

Busca las imágenes oficiales para Docker SDK y runtime.

Agregue la clave de Application Insights

  1. A través del recurso Application Insights en Azure Portal, anote su clave de instrumentación de Application Insights.

    Captura de pantalla que muestra la búsqueda de la clave de instrumentación en el Azure Portal.

  2. Abra appsettings.json y agregue la clave de instrumentación de Application Insights a esta sección de código:

    {
        "ApplicationInsights":
        {
            "InstrumentationKey": "Your instrumentation key"
        }
    }
    

Creación y ejecución de la imagen de Docker

  1. Revise el archivo Docker.

  2. Compile la imagen de ejemplo:

    docker build -t profilerapp .
    
  3. Ejecute el contenedor:

    docker run -d -p 8080:80 --name testapp profilerapp
    

Visualización del contenedor a través del explorador

Para acceder al punto de conexión, tienes dos opciones:

  • En el explorador, visite http://localhost:8080/weatherforecast.

  • Use cURL:

    curl http://localhost:8080/weatherforecast
    

Inspección de los registros

De manera opcional, inspeccione el registro local para ver si se ha finalizado una sesión de generación de perfiles:

docker logs testapp

En los registros locales, tenga en cuenta los siguientes eventos:

Starting application insights profiler with instrumentation key: your-instrumentation key # Double check the instrumentation key
Service Profiler session started.               # Profiler started.
Finished calling trace uploader. Exit code: 0   # Uploader is called with exit code 0.
Service Profiler session finished.              # A profiling session is completed.

Visualización de los seguimientos de .NET Profiler

  1. Espere de 2 a 5 minutos para que los eventos puedan agregarse a Application Insights.

  2. Abra el panel Rendimiento del recurso Application Insights.

  3. Una vez finalizado el proceso de rastreo, aparecerá el botón Seguimiento de perfiles.

    Recorte de pantalla que muestra el botón seguimientos de .NET Profiler en el panel Rendimiento.

Limpieza de recursos

Ejecute el siguiente comando para detener el proyecto de ejemplo:

docker rm -f testapp

Pasos siguientes