Surveillance des applications pour Azure App Service et Node.js

La surveillance de vos applications Web Node.js 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.

Activer Application Insights

Le moyen le plus simple d’activer le monitoring pour les applications Node.js 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.

Remarque

Vous pouvez configurer l’agent attaché automatiquement à l’aide de la variable d’environnement APPLICATIONINSIGHTS_CONFIGURATION_CONTENT dans le volet de la variable App Service Environment. Pour plus d’informations sur les options de configuration qui peuvent être transmises via cette variable d’environnement, consultez Configuration node.js.

Remarque

Si à la fois l’instrumentation automatique et l’instrumentation manuelle basée sur un kit SDK sont détectées, seuls les paramètres de l’instrumentation manuelle sont appliqués. Cela évite que des données en double soient envoyées. Pour plus d’informations, consultez la section sur la résolution des problèmes de cet article.

Instrumentation automatique à travers le Portail Azure

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.

Vous pouvez activer le monitoring de vos applications Node.js exécutées dans Azure App Service tout simplement en un seul clic, sans avoir à modifier le code. Application Insights pour Node.js est intégré à Azure App Service sur Linux (conteneurs basés sur du code et conteneurs personnalisés) et à App Service sur Windows (applications basées sur du code). L’intégration est en préversion publique. L’intégration ajoute le Kit de développement logiciel (SDK) Node.js, qui est en disponibilité générale.

  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. Une fois la ressource à utiliser spécifiée, vous êtes prêt à vous lancer.

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

Configuration

L’agent Node.js peut être configuré à l’aide de JSON. Définissez la variable d’environnement APPLICATIONINSIGHTS_CONFIGURATION_CONTENT sur la chaîne JSON ou définissez la variable d’environnement APPLICATIONINSIGHTS_CONFIGURATION_FILE sur le chemin d’accès du fichier contenant le code JSON.

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

L’ensemble complet de configurations étant disponible, vous n’avez qu’à utiliser un fichier json valide.

Activer la supervision côté client

Pour activer la supervision côté client pour votre application Node.js, 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_NodeJS Indicateur pour contrôler si l’agent Node.js 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 Node.js

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

Vous trouverez ci-après les étapes à suivre pas à pas pour résoudre les problèmes rencontrés avec la supervision basée sur un agent/une extension pour les applications Node.js exécutées sur Azure App Services.

  1. Vérifiez que le paramètre d’application ApplicationInsightsAgent_EXTENSION_VERSION est défini à une valeur « ~2 ».

  2. Accédez à https://yoursitename.scm.azurewebsites.net/ApplicationInsights.

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

    • Vérifiez que l’extension est en cours d’exécution (Application Insights Extension Status affiche Pre-Installed Site Extension, version 2.8.x.xxxx, is running.)

      Si elle ne l’est pas, suivez les instructions pour Activer la surveillance d’Application Insights.

    • Accédez à D:\local\Temp\status.json et ouvrez status.json.

    Vérifiez que la valeur SDKPresent est définie sur false, la valeur AgentInitializedSuccessfully sur true et que la valeur IKey dispose d’une iKey valide.

    Voici un exemple du fichier JSON :

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

    Si la valeur SDKPresent est true, cela indique que l’extension a détecté que certains éléments du SDK sont déjà présents dans l’application, et va s’interrompre.

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.

Notes de publication

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

Étapes suivantes