Supervisión de aplicaciones para Azure App Service y Java

Para la supervisión de las aplicaciones web Java 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.

Nota:

Con las aplicaciones de imagen nativa Spring Boot, use el proyecto de Aplicación Java de imagen nativa openTelemetry / Application Insights de Azure Monitor en lugar de la solución del agente java de Application Insights que se describe a continuación.

Habilitación de Application Insights

La manera recomendada de habilitar la supervisión de aplicaciones Java 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. Puede aplicar configuraciones adicionales y, en función del escenario, agregar su propia telemetría personalizada si es necesario.

Instrumentación automática desde Azure Portal

Puede activar la supervisión de las aplicaciones Java que se ejecutan en Azure App Service con una sola selección, no se requiere ningún cambio de código. La integración agrega Application Insights Java 3.x y recopila automáticamente datos de telemetría.

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

  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. Este último paso es opcional. Después de especificar qué recurso usar, puede configurar el agente de Java. Si no configura el agente de Java, se aplican las configuraciones predeterminadas.

    El conjunto de configuraciones completo está disponible, solo tiene que pegar un archivo JSON válido. Excluya la cadena de conexión y las configuraciones que se encuentran en versión preliminar: puede agregar los elementos que actualmente se encuentran en versión preliminar a medida que estén disponibles con carácter general.

    Una vez que modifique las configuraciones mediante Azure Portal, la variable de entorno APPLICATIONINSIGHTS_CONFIGURATION_FILE se rellena automáticamente y aparece en el panel de configuración de App Service. Esta variable dispone del contenido JSON completo que ha pegado en el cuadro de texto de configuración de la aplicación Java en Azure Portal.

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

Habilitación de la supervisión del lado cliente

Para habilitar la supervisión del lado cliente para la aplicación Java, 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_Java Marca para controlar si se incluye el agente de Java. 0 o 1 (solo se aplican en Windows).

Nota

Profiler y Snapshot Debugger no están disponibles para aplicaciones de Java

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, comienza el proceso como si fueses a crear una 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 usas Windows, establece ApplicationInsightsAgent_EXTENSION_VERSION en ~2. Si usas Linux, establece 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 usas Windows, establece ApplicationInsightsAgent_EXTENSION_VERSION en ~2. Si usas Linux, establece 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

Use la guía paso a paso de solución de problemas para aplicaciones basadas en Java que se ejecutan en Azure App Services.

  1. Compruebe que la configuración de la aplicación ApplicationInsightsAgent_EXTENSION_VERSION está establecida en un valor de "~2" en Windows y "~3" en Linux

  2. Examine el archivo de registro para ver que el agente se ha iniciado correctamente: vaya a `https://yoursitename.scm.azurewebsites.net/ y, en SSH, cambie al directorio raíz; el archivo de registro se encuentra en LogFiles/ApplicationInsights.

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

  3. Después de habilitar la supervisión de aplicaciones para la aplicación de Java, puede validar que el agente funciona si examina las métricas activas, incluso antes de implementar una aplicación en App Service verá algunas solicitudes del entorno. Recuerde que el conjunto completo de telemetría solo estará disponible cuando la aplicación esté implementada y en ejecución.

  4. Establezca la variable de entorno APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL en "debug" si no ve ningún error y no hay telemetría.

¿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.

Implementación manual de la versión más reciente de Java de Application Insights

La versión de Java de Application Insights se actualiza automáticamente como parte de las actualizaciones de App Services.

Si se produce un problema que se ha corregido en la versión más reciente de Application Insights Java, puede actualizarlo manualmente.

Para realizar esta actualización de forma manual, siga estos pasos:

  1. Carga del archivo .jar del agente de Java para App Service

    a. En primer lugar, siga las instrucciones que se indican aquí para obtener la versión más reciente de la CLI de Azure.

    b. A continuación, siga las instrucciones que se indican aquí para obtener la versión más reciente del agente de Java de Application Insights.

    c. A continuación, implemente el archivo .jar del agente de Java en App Service mediante el siguiente comando: az webapp deploy --src-path applicationinsights-agent-{VERSION_NUMBER}.jar --target-path java/applicationinsights-agent-{VERSION_NUMBER}.jar --type static --resource-group {YOUR_RESOURCE_GROUP} --name {YOUR_APP_SVC_NAME}. Como alternativa, puede usar esta guía para implementar el agente mediante el complemento Maven.

  2. Deshabilite Application Insights a través de la pestaña Application Insights de Azure Portal.

  3. Una vez cargado el archivo .jar del agente, vaya a las configuraciones de App Service. Si necesita usar el comando de inicio para Linux, incluya argumentos JVM:

    Captura de pantalla del comando de inicio.

    El comando de inicio no acepta JAVA_OPTS para JavaSE ni CATALINA_OPTS para Tomcat.

    Si no usa el comando de inicio, cree una nueva variable de entorno, JAVA_OPTS para JavaSE o CATALINA_OPTS para Tomcat, con el valor -javaagent:{PATH_TO_THE_AGENT_JAR}/applicationinsights-agent-{VERSION_NUMBER}.jar.

  4. Reinicie la aplicación para aplicar los cambios.

Nota

Si ha establecido la variable de entorno JAVA_OPTS para JavaSE o CATALINA_OPTS para Tomcat, tendrá que deshabilitar Application Insights en el portal. Como alternativa, si prefiere habilitar Application Insights desde el portal, asegúrese de no establecer la variable JAVA_OPTS para JavaSE o CATALINA_OPTS para Tomcat en la configuración de App Service.

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