Supervisión de aplicaciones para Azure App Service y Node.js

Para la supervisión de las aplicaciones web Node.js que se ejecutan en Azure App Services no es necesario modificar el código. En este artículo, se describe como habilitar la supervisión de Application Insights para Azure Monitor y se proporcionan instrucciones preliminares a fin de automatizar el proceso para implementaciones a gran escala.

Habilitación de Application Insights

La manera más fácil de habilitar la supervisión de aplicaciones Node.js que se ejecutan en Azure App Services es mediante Azure Portal. Al activar la supervisión de aplicaciones en Azure Portal, la aplicación se instrumentará automáticamente con Application Insights y no requerirá ningún cambio de código.

Nota:

Puede configurar el agente asociado automáticamente mediante la variable de entorno APPLICATIONINSIGHTS_CONFIGURATION_CONTENT en la hoja variable de App Service Environment. Para obtener más información sobre las opciones de configuración que se pueden pasar a través de esta variable de entorno, consulte Configuración de Node.js.

Nota:

Si se detectan tanto la instrumentación automática como la instrumentación manual basada en SDK, solo se respeta la configuración de la instrumentación manual. Esto es para evitar que se envíen datos duplicados. Para obtener más información, consulte la sección Solución de problemas en este artículo.

Instrumentación automática desde Azure Portal

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

Puede activar la supervisión de las aplicaciones Node.js que se ejecutan en Azure App Service con un solo clic, no se requiere ningún cambio de código. Application Insights para Node.js se integra con Azure App Service en Linux, en los contenedores basados en código y los personalizados, y con App Service en Windows para las aplicaciones basadas en código. La integración se encuentra en versión preliminar pública. La integración agrega el SDK de Node.js, que se encuentra en la fase de disponibilidad general.

  1. Seleccione Application Insights en el panel de control de Azure del servicio de aplicaciones y, después, seleccione Habilitar.

    Captura de pantalla de la pestaña

  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á Aplicar la configuración de supervisión. Con la selección de Continuar se vinculará el nuevo recurso de Application Insights a su servicio de aplicaciones. Al hacerlo, también se desencadenará un reinicio del servicio de aplicaciones.

    Captura de pantalla de la lista desplegable Cambiar el recurso.

  3. Una vez que haya especificado qué recurso usar ya estará listo para continuar.

    Captura de pantalla de la instrumentación de la aplicación.

Configuración

El agente Node.js se puede configurar mediante JSON. Establezca la variable de entorno APPLICATIONINSIGHTS_CONFIGURATION_CONTENT en la cadena JSON o establezca la variable de entorno APPLICATIONINSIGHTS_CONFIGURATION_FILE en la ruta de acceso del archivo que contiene el JSON.

"samplingPercentage": 80,
"enableAutoCollectExternalLoggers": true,
"enableAutoCollectExceptions": true,
"enableAutoCollectHeartbeat": true,
"enableSendLiveMetrics": true,
...
    

El conjunto de configuraciones completo está disponible, solo tiene que usar un archivo JSON válido.

Habilitación de la supervisión del lado cliente

Para habilitar la supervisión del lado cliente para la aplicación de Node.js, debe agregar manualmente el SDK de JavaScript del lado cliente a la aplicación.

Automatización de la supervisión

Para habilitar la recopilación de datos de telemetría con Application Insights, solo es necesario configurar los valores siguientes 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 disponible.

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 en Windows o ~3 en Linux.
XDT_MicrosoftApplicationInsights_NodeJS Marca para controlar si el agente de Node.js está incluido. 0 o 1 (solo se aplican en Windows).

Nota

Profiler y Snapshot Debugger no están disponibles para aplicaciones de Node.js.

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

Solución de problemas

A continuación, se muestra nuestra guía paso a paso de solución de problemas para la supervisión basada en extensiones o agentes para aplicaciones basadas en Node.js que se ejecutan en Azure App Services.

  1. Compruebe que la configuración de la aplicación ApplicationInsightsAgent_EXTENSION_VERSION se establece en un valor de "~2".

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

    Captura de pantalla de la página de resultados del vínculo anterior.

    Confirme que SDKPresent está establecido en false, AgentInitializedSuccessfully en true y que IKey tiene un iKey válido.

    A continuación se muestra un ejemplo del archivo JSON:

        "AppType":"node.js",
    
        "MachineName":"c89d3a6d0357",
    
        "PID":"47",
    
        "AgentInitializedSuccessfully":true,
    
        "SDKPresent":false,
    
        "IKey":"00000000-0000-0000-0000-000000000000",
    
        "SdkVersion":"1.8.10"
    
    

    Si SDKPresent es true, indica que la extensión ha detectado que algún aspecto del SDK ya está presente en la aplicación y se interrumpirá.

¿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 Azure Monitor Application Insights.

Notas de la versión

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

Pasos siguientes