Supervisión de aplicaciones para Azure App Service y ASP.NET

Ahora es más fácil que nunca habilitar la supervisión en sus aplicaciones web basadas en ASP.NET que se ejecutan en Azure App Service, Anteriormente, era necesario instrumentar manualmente la aplicación, pero ahora el agente o la extensión más reciente están integrados en la imagen de App Service de manera predeterminada. En este artículo, se lo guiará por la habilitación de la supervisión de Application Insights para Azure Monitor y se proporcionarán instrucciones preliminares a fin de automatizar el proceso para implementaciones a gran escala.

Nota

Agregar manualmente una extensión de sitio de Application Insights a través de Herramientas de desarrollo>Extensiones está en desuso. Este método de instalación de extensiones dependía de actualizaciones manuales para cada nueva versión. La versión estable más reciente de la extensión ahora viene preinstalada como parte de la imagen de App Service. Los archivos se encuentran en d:\Archivos de programa (x86)\SiteExtensions\ApplicationInsightsAgent y se actualizan automáticamente con cada versión estable. Si sigue las instrucciones de instrumentación automática para habilitar la supervisión, se quitará automáticamente la extensión en desuso.

Si se detectan tanto la supervisión de instrumentación automática como la instrumentación manual basada en SDK, solo se respetará la configuración de la instrumentación manual. Esta disposición impide que se envíen datos duplicados. Para más información, consulte la sección Solución de problemas.

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.

Habilitación de la supervisión de instrumentación automática

Para obtener una lista completa de escenarios de instrumentación automática compatibles, consulte Entornos, lenguajes y proveedores de recursos admitidos.

Nota

No se admite la combinación de APPINSIGHTS_JAVASCRIPT_ENABLED y urlCompression. Para más información, consulte la explicación que aparece en la sección Solución de problemas.

  1. Seleccione Application Insights en el panel de control de Azure para el servicio de aplicaciones. Seleccione Habilitar.

    Captura de pantalla en la que se muestra la pestaña Application Insights con la opción Habilitar seleccionada.

  2. Cree un nuevo recurso o seleccione un recurso de Application Insights existente para esta aplicación.

    Nota

    Al seleccionar Aceptar para crear el recurso, se le pedirá seleccionar Aplicar la configuración de supervisión. Al seleccionar Continuar, se vincula el nuevo recurso de Application Insights al servicio de aplicaciones. Al hacerlo, también se desencadena un reinicio del servicio de aplicaciones.

    Captura de pantalla que muestra la lista desplegable Cambiar el recurso.

  3. Después de especificar qué recurso se debe usar, puede elegir cómo quiere que Application Insights recopile los datos de cada plataforma para la aplicación. La supervisión de aplicaciones ASP.NET está activada de manera predeterminada con dos niveles diferentes de recopilación.

    Captura de pantalla en la que se muestra la página de extensiones de sitio de Application Insights con la opción Crear recurso seleccionada.

    En la tabla siguiente, se resumen los datos recopilados para cada ruta.

    data Recopilación básica de ASP.NET Recopilación recomendada de ASP.NET
    Agrega las tendencias de uso de CPU, memoria y E/S. No
    Recopila las tendencias de uso y habilita la correlación entre los resultados de disponibilidad y las transacciones.
    Recopila las excepciones no controladas por el proceso de host.
    Mejora la precisión de las métricas de APM con carga, cuando se usa el muestreo.
    Correlaciona los microservicios entre los límites de solicitud y dependencia. No (solo funcionalidades de APM de instancia única)
  4. Para configurar el muestreo, algo que antes se podía controlar mediante el archivo applicationinsights.config, ahora puede interactuar con él a través de la configuración de la aplicación con el prefijo MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor correspondiente.

    • Por ejemplo, para cambiar el porcentaje de muestreo inicial, puede crear una configuración de la aplicación de MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage y un valor de 100.

    • Para deshabilitar el muestreo, establezca MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage en un valor de 100.

    • Los valores admitidos incluyen los siguientes:

      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_InitialSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MinSamplingPercentage
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_EvaluationInterval
      • MicrosoftAppInsights_AdaptiveSamplingTelemetryProcessor_MaxTelemetryItemsPerSecond
    • Para obtener la lista de valores y definiciones de procesador de telemetría de muestreo adaptable compatibles, puede consultar el código y la documentación de muestreo.

Habilitación de la supervisión del lado cliente

La supervisión de cliente está habilitada en ASP.NET. Para habilitar la supervisión de cliente:

  1. Seleccione Configuración>Configuración.

  2. En Configuración de la aplicación, cree una configuración de la aplicación:

    • Nombre: escriba APPINSIGHTS_JAVASCRIPT_ENABLED.
    • Valor: escriba true.
  3. Guarde la configuración y reinicie la aplicación.

Para deshabilitar la supervisión de cliente, quite el par clave-valor asociado de Configuración de la aplicación o establezca el valor en false.

Automatización de la supervisión

Con el fin de habilitar la recopilación de datos de telemetría con Application Insights, solo se debe establecer la configuración de la aplicación.

Captura de pantalla de la configuración de la aplicación de App Service con la configuración de Application Insights.

Definiciones de los valores de configuración de la aplicación

Nombre del valor de configuración de la aplicación Definición Value
ApplicationInsightsAgent_EXTENSION_VERSION Extensión principal; controla la supervisión en el entorno en tiempo de ejecución. ~2
XDT_MicrosoftApplicationInsights_Mode En el modo predeterminado, solo están habilitadas las características esenciales para garantizar un rendimiento óptimo. default o recommended
InstrumentationEngine_EXTENSION_VERSION Controla si se activa el motor InstrumentationEngine de reescritura binaria. Esta configuración repercute en el rendimiento y afecta la hora de inicio o el arranque en frío. ~1
XDT_MicrosoftApplicationInsights_BaseExtensions Controla si el texto de la tabla SQL y Azure se captura junto con las llamadas de dependencia. Advertencia de rendimiento: Se verá afectado el tiempo de inicio en frío de la aplicación. Esta configuración requiere el elemento InstrumentationEngine. ~1

Configuración de aplicaciones de App Service con Azure Resource Manager

La configuración de las aplicaciones de Azure App Service se puede administrar y definir con plantillas de Azure Resource Manager. Use este método para implementar nuevos recursos de App Service con la automatización de Resource Manager o para modificar la configuración de los recursos actuales.

La estructura básica de JSON de la configuración de la aplicación para un recurso de App Service:

      "resources": [
        {
          "name": "appsettings",
          "type": "config",
          "apiVersion": "2015-08-01",
          "dependsOn": [
            "[resourceId('Microsoft.Web/sites', variables('webSiteName'))]"
          ],
          "tags": {
            "displayName": "Application Insights Settings"
          },
          "properties": {
            "key1": "value1",
            "key2": "value2"
          }
        }
      ]

Para ver un ejemplo de una plantilla de Resource Manager con la configuración de la aplicación establecida para Application Insights, le puede resultar útil esta plantilla. En concreto, vea la sección que comienza en la línea 238.

Para crear una plantilla de Resource Manager con la configuración predeterminada de Application Insights, comience el proceso como si fuese a crear una nueva aplicación web con Application Insights habilitado.

  1. Cree un nuevo recurso de App Service con la información de la aplicación web deseada. Habilite Application Insights en la pestaña Supervisión.

  2. Seleccione Revisar + crear. Seleccione Descargar una plantilla para la automatización.

    Captura de pantalla que muestra el menú de creación de aplicaciones web de App Service.

    Esta opción genera la plantilla de Azure Resource Manager más reciente con toda la configuración necesaria establecida.

    Captura de pantalla que muestra una plantilla de aplicación web de App Service.

En el ejemplo siguiente, reemplace todas las instancias de AppMonitoredSite por el nombre del sitio:

Nota:

Si usa Windows, establezca ApplicationInsightsAgent_EXTENSION_VERSION en ~2. Si usa Linux, establezca ApplicationInsightsAgent_EXTENSION_VERSION en ~3.

{
    "resources": [
        {
            "name": "[parameters('name')]",
            "type": "Microsoft.Web/sites",
            "properties": {
                "siteConfig": {
                    "appSettings": [
                        {
                            "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').InstrumentationKey]"
                        },
                        {
                            "name": "APPLICATIONINSIGHTS_CONNECTION_STRING",
                            "value": "[reference('microsoft.insights/components/AppMonitoredSite', '2015-05-01').ConnectionString]"
                        },
                        {
                            "name": "ApplicationInsightsAgent_EXTENSION_VERSION",
                            "value": "~2"
                        }
                    ]
                },
                "name": "[parameters('name')]",
                "serverFarmId": "[concat('/subscriptions/', parameters('subscriptionId'),'/resourcegroups/', parameters('serverFarmResourceGroup'), '/providers/Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "dependsOn": [
                "[concat('Microsoft.Web/serverfarms/', parameters('hostingPlanName'))]",
                "microsoft.insights/components/AppMonitoredSite"
            ],
            "apiVersion": "2016-03-01",
            "location": "[parameters('location')]"
        },
        {
            "apiVersion": "2016-09-01",
            "name": "[parameters('hostingPlanName')]",
            "type": "Microsoft.Web/serverfarms",
            "location": "[parameters('location')]",
            "properties": {
                "name": "[parameters('hostingPlanName')]",
                "workerSizeId": "[parameters('workerSize')]",
                "numberOfWorkers": "1",
                "hostingEnvironment": "[parameters('hostingEnvironment')]"
            },
            "sku": {
                "Tier": "[parameters('sku')]",
                "Name": "[parameters('skuCode')]"
            }
        },
        {
            "apiVersion": "2015-05-01",
            "name": "AppMonitoredSite",
            "type": "microsoft.insights/components",
            "location": "West US 2",
            "properties": {
                "ApplicationId": "[parameters('name')]",
                "Request_Source": "IbizaWebAppExtensionCreate"
            }
        }
    ],
    "parameters": {
        "name": {
            "type": "string"
        },
        "hostingPlanName": {
            "type": "string"
        },
        "hostingEnvironment": {
            "type": "string"
        },
        "location": {
            "type": "string"
        },
        "sku": {
            "type": "string"
        },
        "skuCode": {
            "type": "string"
        },
        "workerSize": {
            "type": "string"
        },
        "serverFarmResourceGroup": {
            "type": "string"
        },
        "subscriptionId": {
            "type": "string"
        }
    },
    "$schema": "https://schema.management.azure.com/schemas/2014-04-01-preview/deploymentTemplate.json#",
    "contentVersion": "1.0.0.0"
}

Habilitación mediante Powershell

Para habilitar la supervisión de la aplicación a través de PowerShell, solo debe cambiar la configuración de la aplicación subyacente. En el ejemplo siguiente, se habilita la supervisión de aplicaciones para un sitio web denominado AppMonitoredSite en el grupo de recursos AppMonitoredRG. Configura los datos que se enviarán a la clave de instrumentación 012345678-abcd-ef01-2345-6789abcd.

Nota

Se recomienda usar el módulo Azure Az de PowerShell para interactuar con Azure. Consulte Instalación de Azure PowerShell para empezar. Para más información sobre cómo migrar al módulo Az de PowerShell, consulte Migración de Azure PowerShell de AzureRM a Az.

Nota:

Si usa Windows, establezca ApplicationInsightsAgent_EXTENSION_VERSION en ~2. Si usa Linux, establezca ApplicationInsightsAgent_EXTENSION_VERSION en ~3.

$app = Get-AzWebApp -ResourceGroupName "AppMonitoredRG" -Name "AppMonitoredSite" -ErrorAction Stop
$newAppSettings = @{} # case-insensitive hash map
$app.SiteConfig.AppSettings | %{$newAppSettings[$_.Name] = $_.Value} # preserve non Application Insights application settings.
$newAppSettings["APPINSIGHTS_INSTRUMENTATIONKEY"] = "012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights instrumentation key
$newAppSettings["APPLICATIONINSIGHTS_CONNECTION_STRING"] = "InstrumentationKey=012345678-abcd-ef01-2345-6789abcd"; # set the Application Insights connection string
$newAppSettings["ApplicationInsightsAgent_EXTENSION_VERSION"] = "~2"; # enable the ApplicationInsightsAgent
$app = Set-AzWebApp -AppSettings $newAppSettings -ResourceGroupName $app.ResourceGroup -Name $app.Name -ErrorAction Stop

Actualización del agente o la extensión de supervisión: .NET

Actualización de las versiones 2.8.9 y posteriores

La actualización desde la versión 2.8.9 se realiza automáticamente, sin acciones adicionales. Los bits de supervisión nuevos se proporcionan en segundo plano para el servicio de aplicación de destino. Se recogerán en el reinicio de la aplicación.

Para comprobar qué versión de la extensión se ejecuta, vaya a https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

Captura de pantalla de la ruta de acceso de URL para comprobar la versión de la extensión que está ejecutando.

Actualización de las versiones 1.0.0 a 2.6.5

A partir de la versión 2.8.9 se usa la extensión de sitio preinstalada. Si tiene una versión anterior, puede actualizarla de dos maneras:

  • Actualizar mediante la habilitación en el portal: incluso si tiene instalada la extensión de Application Insights para App Service. La interfaz de usuario muestra solo el botón Habilitar. En segundo plano, la anterior extensión de sitio privada se quitará.

  • Actualización a través de PowerShell:

    1. Establezca la configuración de la aplicación para habilitar la extensión de sitio preinstalada ApplicationInsightsAgent. Para obtener más información, consulte Habilitar a través de PowerShell.
    2. Quite manualmente la extensión de sitio privada denominada extensión de Application Insights para App Service.

Si se realiza la actualización desde una versión anterior a la 2.5.1, compruebe que los archivos DLL de Application Insights se quitan de la carpeta bin de la aplicación. Para más información, consulte los pasos que aparecen en la sección Solución de problemas.

Solución de problemas

Nota

Al crear una aplicación web con los entornos de ejecución ASP.NET en Azure App Service, implementa una sola página HTML estática como sitio web de inicio. No se recomienda solucionar problemas con una plantilla predeterminada. Implemente una aplicación antes de solucionar un problema.

A continuación, figura nuestra guía paso a paso para la solución de problemas relacionados con la supervisión basada en extensiones o agentes para aplicaciones basadas en ASP.NET que se ejecutan en App Service.

  1. Compruebe que la configuración de la aplicación ApplicationInsightsAgent_EXTENSION_VERSION está establecida en un valor de ~2.

  2. Vaya a https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

    Captura de pantalla en la que se muestra la página de resultados del vínculo anterior.

    • Confirme que Application Insights Extension Status es Pre-Installed Site Extension, version 2.8.x.xxxx y que está en ejecución.

      Si no está en ejecución, siga las instrucciones para habilitar la supervisión de Application Insights.

    • Confirme que el origen de estado existe y tiene el siguiente aspecto: Status source D:\home\LogFiles\ApplicationInsights\status\status_RD0003FF0317B6_4248_1.json.

      Si no está presente un valor similar, significa que la aplicación no se admite o no se está ejecutando actualmente. Para asegurarse de que la aplicación se está ejecutando, intente visitar manualmente los puntos de conexión de la aplicación o la dirección URL de la aplicación, lo que permitirá que la información del entorno en tiempo de ejecución esté disponible.

    • Confirme que IKeyExists sea true. Si no es así, agregue APPINSIGHTS_INSTRUMENTATIONKEY y APPLICATIONINSIGHTS_CONNECTION_STRING con el GUID de clave de instrumentación a la configuración de la aplicación.

    • Confirme que no hay ninguna entrada para AppAlreadyInstrumented, AppContainsDiagnosticSourceAssembly y AppContainsAspNetTelemetryCorrelationAssembly.

      Si existe alguna de estas entradas, quite los siguientes paquetes de la aplicación: Microsoft.ApplicationInsights, System.Diagnostics.DiagnosticSource y Microsoft.AspNet.TelemetryCorrelation.

El sitio web predeterminado implementado con las aplicaciones web no admite la supervisión automática del lado del cliente.

Al crear una aplicación web con los entornos de ejecución ASP.NET en Azure App Service, implementa una sola página HTML estática como sitio web de inicio. La página web estática también carga un elemento web administrado de ASP.NET en IIS. Esta página permite probar la supervisión sin código del lado servidor, pero no admite la supervisión automática de cliente.

Si desea probar el servidor sin código y la supervisión de cliente para ASP.NET en una aplicación web de App Service, se recomienda seguir las guías oficiales para crear una aplicación web ASP.NET Framework. A continuación, siga las instrucciones del artículo actual para habilitar la supervisión.

No se admite APPINSIGHTS_JAVASCRIPT_ENABLED ni urlCompression

Si usa APPINSIGHTS_JAVASCRIPT_ENABLED=true en casos donde el contenido está codificado, podría obtener errores como los siguientes:

  • Error de reescritura de dirección URL 500.
  • Error de módulo de reescritura de dirección URL 500.53 con el mensaje "Las reglas de reescritura saliente no se pueden aplicar cuando el contenido de la respuesta HTTP está codificado ("gzip")".

Se produce un error porque la configuración de la aplicación APPINSIGHTS_JAVASCRIPT_ENABLED está establecida en true y la codificación de contenido está presente al mismo tiempo. Este escenario todavía no se admite. La solución consiste en quitar APPINSIGHTS_JAVASCRIPT_ENABLED de la configuración de la aplicación. Lamentablemente, si la instrumentación de JavaScript del lado cliente o explorador sigue siendo necesaria, se necesitan referencias del SDK manuales para las páginas web. Siga las instrucciones para la instrumentación manual con el SDK de JavaScript.

Si desea obtener la información más reciente sobre la extensión o el agente de Application Insights, consulte las notas de la versión.

¿Cuál es la diferencia entre las métricas estándar de Application Insights y las métricas de Azure App Service?

Application Insights recopila datos de telemetría de las solicitudes que se enviaron a la aplicación. Si el error se produjo en Web Apps o en el servidor web, y la solicitud no llegó a la aplicación de usuario, Application Insights no tendrá ningún dato de telemetría sobre él.

La duración de serverresponsetime calculada por Application Insights no coincidirá necesariamente con el tiempo de respuesta del servidor observado por Web Apps. Esto se debe a que Application Insights solo cuenta la duración cuando la solicitud llega realmente a la aplicación de usuario. Si la solicitud se bloquea o se pone en cola en el servidor web, ese tiempo de espera se incluirá en las métricas de Web Apps, pero no en las métricas de Application Insights.

Prueba de la conectividad entre el host de la aplicación y el servicio de ingesta

Los SDK y agentes de Application Insights envían telemetría para ingerirse como llamadas REST a nuestros puntos de conexión de ingesta. Puede probar la conectividad desde el servidor web o la máquina host de la aplicación a los puntos de conexión del servicio de ingesta mediante clientes REST sin procesar con comandos de PowerShell o curl. Consulte Solución de problemas de telemetría de aplicaciones que faltan en Application Insights de Azure Monitor.

No se admiten PHP y WordPress.

Los sitios de PHP y WordPress no se admiten. Actualmente, no hay ningún SDK/agente compatible oficialmente para la supervisión del lado servidor de estas cargas de trabajo. Para instrumentar manualmente las transacciones del lado cliente en un sitio de PHP o WordPress, agregue el JavaScript del lado cliente a las páginas web puede realizarse mediante el SDK de JavaScript.

En la tabla siguiente, se proporciona una explicación más detallada de lo que significan estos valores, sus causas subyacente y las correcciones recomendadas.

Valor del problema Explicación Fix
AppAlreadyInstrumented:true Este valor indica que la extensión ha detectado que algún aspecto del SDK ya está presente en la aplicación y se interrumpirá. Puede deberse a una referencia a System.Diagnostics.DiagnosticSource, Microsoft.AspNet.TelemetryCorrelation o Microsoft.ApplicationInsights. Quite las referencias. Algunas de estas referencias se agregan de manera predeterminada desde determinadas plantillas de Visual Studio Las versiones anteriores de Visual Studio podrían agregar referencias a Microsoft.ApplicationInsights.
AppAlreadyInstrumented:true Este valor también puede deberse a la presencia de los archivos DLL anteriores en la carpeta de la aplicación de una implementación anterior. Limpie la carpeta de la aplicación para asegurarse de que se han quitado estos archivos DLL. Compruebe el directorio bin de la aplicación local y el directorio wwwroot del recurso de App Service. Para comprobar el directorio wwwroot de la aplicación web de App Service, seleccione Herramientas avanzadas (Kudu)>Consola de depuración>CMD>home\site\wwwroot.
AppContainsAspNetTelemetryCorrelationAssembly: true Este valor indica que la extensión detectó referencias a Microsoft.AspNet.TelemetryCorrelation en la aplicación y se interrumpirá. Quite la referencia.
AppContainsDiagnosticSourceAssembly**:true Este valor indica que la extensión detectó referencias a System.Diagnostics.DiagnosticSource en la aplicación y se interrumpirá. Para ASP.NET, quite la referencia.
IKeyExists:false Este valor indica que la clave de instrumentación no está presente en la configuración de aplicación APPINSIGHTS_INSTRUMENTATIONKEY. Las causas posibles podrían ser que se quitaron accidentalmente los valores o que olvidó establecer los valores en el script de automatización. Asegúrese de que la configuración está presente en la configuración de la aplicación de App Service.

System.IO.FileNotFoundException después de la actualización 2.8.44

La versión 2.8.44 de instrumentación automática actualiza el SDK de Application Insights a la versión 2.20.0. El SDK de Application Insights tiene una referencia indirecta a System.Runtime.CompilerServices.Unsafe.dll a través de System.Diagnostics.DiagnosticSource.dll. Si la aplicación tiene redireccionamiento de enlace para System.Runtime.CompilerServices.Unsafe.dll y si esta biblioteca no está presente en la carpeta de la aplicación, puede generar System.IO.FileNotFoundException.

Para resolver este problema, quite la entrada de redireccionamiento de enlace para System.Runtime.CompilerServices.Unsafe.dll desde el archivo web.config. Si la aplicación quería usar System.Runtime.CompilerServices.Unsafe.dll, establezca el redireccionamiento de enlace tal como se indica a continuación:

<dependentAssembly>
	<assemblyIdentity name="System.Runtime.CompilerServices.Unsafe" publicKeyToken="b03f5f7f11d50a3a" culture="neutral" />
	<bindingRedirect oldVersion="0.0.0.0-4.0.4.1" newVersion="4.0.4.1" />
</dependentAssembly>

Como solución alternativa temporal, puede establecer la configuración ApplicationInsightsAgent_EXTENSION_VERSION de la aplicación en un valor de 2.8.37. Esta configuración desencadenará App Service para usar la extensión de Application Insights anterior. Las mitigaciones temporales solo deben usarse como provisionales.

Notas de la versión

Para obtener las actualizaciones y correcciones de errores más recientes, vea las notas de la versión.

Pasos siguientes