Surveillance des applications pour Azure App Service et Java

Le monitoring de vos applications web Java qui s’exécutent sur Azure App Services ne nécessite aucune modification du code. Cet article explique pas à pas comment activer la supervision Azure Monitor Application Insights et vous donne des conseils préliminaires sur l’automatisation du processus pour les déploiements à grande échelle.

Remarque

Avec les applications Spring Boot Native Image, utilisez le projet Distribution OpenTelemetry Azure Monitor / Application Insights dans l’application Java d’image native Spring Boot au lieu de la solution d’agent Java Application Insights décrite ci-dessous.

Activer Application Insights

Le moyen recommandé d’activer le monitoring pour les applications Java s’exécutant sur Azure App Services consiste à utiliser le portail Azure. L’activation du monitoring des applications dans le portail Azure instrumente automatiquement votre application avec Application Insights et ne nécessite aucune modification du code. Vous pouvez appliquer des configurations supplémentaires et, en fonction de votre scénario spécifique, ajouter votre propre télémétrie personnalisée si nécessaire.

Instrumentation automatique à travers le Portail Azure

Vous pouvez activer le monitoring de vos applications Java exécutées dans Azure App Service tout simplement en une seule sélection, sans avoir à modifier le code. L’intégration ajoute Application Insights Java 3.x et collecte automatiquement les données de télémétrie.

Pour obtenir la liste complète des scénarios d’instrumentation automatique pris en charge, consultez Environnements, langages et fournisseurs de ressources pris en charge.

  1. Sélectionnez Application Insights dans le panneau de configuration Azure de votre service d’application, puis sélectionnez Activer.

    Capture d’écran de l’onglet Application Insights avec l’option Activer sélectionnée.

  2. Choisissez de créer une nouvelle ressource, ou sélectionnez une ressource Application Insights existante pour cette application.

    Notes

    Quand vous sélectionnez OK pour créer la ressource, vous êtes invité à Appliquer les paramètres de supervision. Si vous sélectionnez Continuer, votre nouvelle ressource Application Insights est liée à votre service d’application et déclenche un redémarrage de votre service d’application.

    Capture d’écran de la liste déroulante Modifier votre ressource.

  3. Cette dernière étape est facultative. Après avoir spécifié la ressource à utiliser, vous pouvez configurer l’agent Java. Si vous ne configurez pas l’agent Java, les configurations par défaut s’appliquent.

    L’ensemble complet de configurations étant disponible, vous n’avez qu’à coller un fichier json valide. Excluez la chaîne de connexion et les configurations en préversion ; vous pouvez ajouter les éléments qui se trouvent actuellement en préversion à mesure qu’ils sont mis à la disposition générale.

    Une fois que vous avez modifié les configurations par le biais du portail Azure, la variable d’environnement APPLICATIONINSIGHTS_CONFIGURATION_FILE est remplie automatiquement et s’affiche dans le panneau de paramètres d’App Service. Cette variable contient le contenu complet du fichier json que vous avez collé dans la zone de texte de configuration du portail Azure pour votre application Java.

    Capture d’écran de l’instrumentation de votre application.

Activer la supervision côté client

Pour activer la supervision côté client pour votre application Java, vous devez ajouter manuellement le SDK JavaScript côté client à votre application.

Automatiser la supervision

Pour activer la collecte de données de télémétrie avec Application Insights, il vous suffit de définir les paramètres suivants de l’application :

Capture d’écran de Paramètres d’application App Service avec les paramètres Application Insights disponibles.

Définitions des paramètres d’application

Nom du paramètre d’application Définition Valeur
ApplicationInsightsAgent_EXTENSION_VERSION Extension principale, qui contrôle la supervision runtime. ~2 sous Windows ou ~3 sous Linux.
XDT_MicrosoftApplicationInsights_Java Indicateur pour contrôler si l’agent Java est inclus. 0 ou 1 (applicable uniquement sous Windows).

Notes

Le profileur et le débogueur d’instantané ne sont pas disponibles pour les applications Java

Paramètres d’application App Service avec Azure Resource Manager

Les paramètres d’application pour Azure App Services peuvent être gérés et configurés à l’aide de modèles Azure Resource Manager. Vous pouvez utiliser cette méthode au moment de déployer de nouvelles ressources App Service avec l’automatisation Resource Manager ou modifiez les paramètres des ressources existantes.

La structure de base des paramètres d’application JSON pour une ressource 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"
          }
        }
      ]

Pour obtenir un exemple de modèle Resource Manager où les paramètres d’application sont configurés pour Application Insights, consultez ce modèle. Plus précisément, consultez la section qui commence à la ligne 238.

Pour créer un modèle Resource Manager avec les paramètres Application Insights par défaut, commencez le processus comme si vous alliez créer une nouvelle application web avec Application Insights activé.

  1. Créez une ressource App Service avec les informations d’application web souhaitées. Activez Application Insights sous l’onglet Supervision.

  2. Sélectionnez Revoir + créer. Sélectionnez ensuite Télécharger un modèle pour automation.

    Capture d’écran montrant le menu de création d’application web App Service.

    Cette option génère le dernier modèle Resource Manager configuré avec tous les paramètres nécessaires.

    Capture d’écran montrant un modèle d’application web App Service.

Dans l’exemple suivant, remplacez toutes les instances de AppMonitoredSite par le nom de votre site :

Remarque

Si vous travaillez sous Windows, définissez ApplicationInsightsAgent_EXTENSION_VERSION sur ~2. Si vous travaillez sous Linux, définissez ApplicationInsightsAgent_EXTENSION_VERSION sur ~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"
}

Activer par le biais de PowerShell

Pour activer la supervision d’application via PowerShell, seuls les paramètres d’application sous-jacents doivent être modifiés. L’exemple suivant active la supervision d’application pour un site web appelé AppMonitoredSite dans le groupe de ressources AppMonitoredRG. Il configure les données à envoyer à la clé d’instrumentation 012345678-abcd-ef01-2345-6789abcd.

Notes

Nous vous recommandons d’utiliser le module Azure Az PowerShell pour interagir avec Azure. Pour commencer, consultez Installer Azure PowerShell. Pour savoir comment migrer vers le module Az PowerShell, consultez Migrer Azure PowerShell depuis AzureRM vers Az.

Remarque

Si vous travaillez sous Windows, définissez ApplicationInsightsAgent_EXTENSION_VERSION sur ~2. Si vous travaillez sous Linux, définissez ApplicationInsightsAgent_EXTENSION_VERSION sur ~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

Dépannage

Utilisez le guide pas à pas pour résoudre les problèmes rencontrés avec les applications Java exécutées sur Azure App Services.

  1. Vérifiez que le paramètre d’application ApplicationInsightsAgent_EXTENSION_VERSION est défini sur une valeur de « ~2 » sous Windows, « ~3 » sous Linux

  2. Examinez le fichier journal pour vérifier que l’agent a bien démarré : accédez à https://yoursitename.scm.azurewebsites.net/, modifiez SSH pour spécifier le répertoire racine, le fichier journal est situé sous LogFiles/ApplicationInsights.

    Capture d’écran du lien au-dessus de la page de résultats.

  3. Après l’activation de la supervision des applications pour votre application Java, vous pouvez vérifier que l’agent fonctionne en regardant les métriques en direct. Avant même de déployer une application sur App Service, vous verrez des requêtes de l’environnement. N’oubliez pas que l’ensemble complet des données de télémétrie n’est disponible qu’après avoir déployé et exécuté votre application.

  4. Définissez la variable d’environnement APPLICATIONINSIGHTS_SELF_DIAGNOSTICS_LEVEL sur 'debug' si vous ne voyez pas d’erreurs et qu’il n’y a pas de données de télémétrie.

Quelles sont les différences entre les métriques standard d’Application Insights et les métriques d’Azure App Service ?

Application Insights collecte des données de télémétrie pour les requêtes qui les ont transmises à l’application. Si l'échec se produit dans WebApps/WebServer et que la requête n'a pas atteint l'application utilisateur, Application Insights n'a aucune télémétrie à ce sujet.

La durée calculée pour serverresponsetime par Application Insights ne correspond pas nécessairement au temps de réponse du serveur observé par Web Apps. Ce comportement est dû au fait qu’Application Insights compte uniquement la durée nécessaire à la requête pour atteindre l’application utilisateur. Si la requête est bloquée ou mise en file d'attente dans WebServer, le temps d'attente est inclus dans les indicateurs de performance Web Apps mais pas dans les métriques Application Insights.

Tester la connectivité entre votre hôte d’application et le service d’ingestion

Les SDK et les agents Application Insights envoient de la télémétrie à ingérer en tant qu’appels REST à nos points de terminaison d’ingestion. Vous pouvez tester la connectivité de votre serveur web ou de votre machine hôte d’application vers les points de terminaison de service d’ingestion en utilisant des clients du Representational State Transfer (REST) bruts à partir de commandes PowerShell ou curl. Consultez Résoudre les problèmes de télémétrie d’application manquante dans Azure Monitor Application Insights.

Déployer manuellement la dernière version d’Application Insights Java

La version Application Insights Java est mise à jour automatiquement lors des mises à jour App Services.

Si vous rencontrez un problème qui trouve sa solution dans la dernière version d’Application Insights Java, vous pouvez la mettre à jour manuellement.

Pour procéder à la mise à jour manuellement, effectuez les étapes suivantes :

  1. Chargez le fichier jar de l’agent Java sur App Service

    a. En premier lieu, procurez-vous la dernière version d’Azure CLI en suivant les instructions fournies ici.

    b. Ensuite, récupérez la dernière version de l’agent Application Insights Java en suivant les instructions fournies ici.

    c. Enfin, déployez le fichier jar de l’agent Java sur App Service au moyen de la commande suivante : 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}. Vous pouvez également utiliser ce guide pour déployer l’agent via le plug-in Maven.

  2. Désactivez Application Insights via l’onglet Application Insights dans le Portail Azure.

  3. Une fois le fichier jar de l’agent chargé, accédez aux configurations App Service. Si vous devez utiliser la commande de démarrage pour Linux, incluez les arguments jvm :

    Capture d’écran de la commande de démarrage.

    La commande de démarrage n’est pas adaptée JAVA_OPTS à JavaSE ou CATALINA_OPTS à Tomcat.

    Si vous n’utilisez pas la commande de démarrage, créez une variable d’environnement, JAVA_OPTS pour JavaSE ou CATALINA_OPTS pour Tomcat avec la valeur -javaagent:{PATH_TO_THE_AGENT_JAR}/applicationinsights-agent-{VERSION_NUMBER}.jar.

  4. Redémarrez l’application pour appliquer les changements.

Notes

Si vous avez défini la variable d’environnement JAVA_OPTS pour JavaSE ou CATALINA_OPTS pour Tomcat, vous devez désactiver Application Insights dans le portail. Si vous préférez activer Application Insights à partir du portail, vous pouvez également vérifier que vous n’avez pas défini la variable JAVA_OPTS pour JavaSE ou CATALINA_OPTS pour Tomcat dans les paramètres de configuration d’App Service.

Notes de publication

Pour obtenir les mises à jour et correctifs de bogues les plus récents, consultez les notes de publication.

Étapes suivantes