Envoyer des métriques de système d’exploitation invité au magasin de métriques Azure Monitor avec un modèle ARM pour une machine virtuelle Windows

Remarque

L’agent Azure Monitor (AMA) collecte les données de surveillance du système d’exploitation invité d’Azure et des machines virtuelles hybrides, et les remet à Azure Monitor pour l’utilisation de ses fonctionnalités, différents insights et autres services tels que Microsoft Sentinel et Microsoft Defender pour le cloud.

Nous vous recommandons d’utiliser l’agent Azure Monitor pour collecter les journaux et les métriques auprès de machines virtuelles. Pour plus d’informations, consultez la Présentation de l’agent Azure Monitor.

Les données de performance du système d’exploitation invité des machines virtuelles Azure ne sont pas collectées automatiquement comme d’autres métriques de la plateforme. Installez l’extension Diagnostics Azure Monitor pour collecter les métriques de système d’exploitation invité dans la base de données de métriques afin de pouvoir l’utiliser avec toutes les fonctionnalités des métriques Azure Monitor. Ces fonctionnalités comprennent notamment la génération d’alertes en quasi-temps réel, la création de graphiques, le routage et l’accès à partir d’une API REST. Cet article décrit le processus permettant d’envoyer les métriques de performances d’un système d’exploitation invité d’une machine virtuelle Windows à la base de données des métriques avec un modèle Azure Resource Manager (modèle ARM).

Notes

Pour plus d’informations sur la configuration de l’extension Diagnostics pour collecter les métriques du système d’exploitation invité en utilisant le portail Azure, consultez Installer et configurer l’extension Diagnostics Azure pour Windows (WAD).

Si vous ne connaissez pas les modèles ARM, découvrez les déploiements de modèles, leur structure et leur syntaxe.

Prérequis

Configurer Azure Monitor en tant que récepteur de données

L’extension Diagnostics Azure utilise une fonctionnalité appelée récepteurs de données pour acheminer les métriques et les journaux vers différents emplacements. Les étapes suivantes montrent comment utiliser un modèle ARM et PowerShell pour déployer une machine virtuelle à l’aide du nouveau récepteur de données Azure Monitor.

Modèle ARM

Pour cet exemple, vous pouvez utiliser un exemple de modèle rendu public. Les modèles de démarrage se trouvent sur GitHub.

  • Azuredeploy.json : modèle ARM préconfiguré pour le déploiement d’une machine virtuelle.
  • Azuredeploy.parameters.json : fichier de paramètres qui stocke des informations telles que le nom d’utilisateur et le mot de passe que vous souhaitez définir pour votre machine virtuelle. Pendant le déploiement, le modèle ARM utilise les paramètres définis dans ce fichier.

Téléchargez et enregistrez les deux fichiers en local.

Modifier le fichier azuredeploy.parameters.json

  1. Ouvrez le fichier azuredeploy.parameters.json.

  2. Entrez les valeurs adminUsername et adminPassword pour la machine virtuelle. Ces paramètres sont utilisés pour l’accès à distance à la machine virtuelle. Pour éviter tout accès non autorisé à votre machine virtuelle, n’utilisez pas les valeurs de ce modèle. Les bots recherchent sur Internet des noms d’utilisateur et mots de passe dans les référentiels GitHub publics. Ils sont susceptibles de tester les machines virtuelles avec ces valeurs par défaut.

  3. Créez un dnsname unique pour la machine virtuelle.

Modifier le fichier azuredeploy.json

  1. Ouvrez le fichier azuredeploy.json.

  2. Ajoutez un ID de compte de stockage à la section variables du modèle après l’entrée storageAccountName.

    // Find these lines.
    "variables": {
        "storageAccountName": "[concat(uniquestring(resourceGroup().id), 'sawinvm')]",
    
    // Add this line directly below.
        "accountid": "[resourceId('Microsoft.Storage/storageAccounts', variables('storageAccountName'))]",
    
  3. Ajoutez cette extension MSI (Managed Service Identity) au modèle en haut de la section resources. L’extension garantit qu’Azure Monitor accepte les métriques émises.

    //Find this code.
    "resources": [
    // Add this code directly below.
        {
            "type": "Microsoft.Compute/virtualMachines/extensions",
            "name": "[concat(variables('vmName'), '/', 'WADExtensionSetup')]",
            "apiVersion": "2017-12-01",
            "location": "[resourceGroup().location]",
            "dependsOn": [
                "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]" ],
            "properties": {
                "publisher": "Microsoft.ManagedIdentity",
                "type": "ManagedIdentityExtensionForWindows",
                "typeHandlerVersion": "1.0",
                "autoUpgradeMinorVersion": true,
                "settings": {
                    "port": 50342
                }
            }
        },
    
  4. Ajoutez la configuration de l’identity à la ressource de la machine virtuelle pour vous assurer qu’Azure attribue une identité système à l’extension MSI. Cette étape permet de s’assurer que la machine virtuelle peut envoyer des métriques invitées la concernant à Azure Monitor.

    // Find this section
                    "subnet": {
                "id": "[variables('subnetRef')]"
                }
            }
            }
        ]
        }
    },
    {
        "apiVersion": "2017-03-30",
        "type": "Microsoft.Compute/virtualMachines",
        "name": "[variables('vmName')]",
        "location": "[resourceGroup().location]",
        // add these 3 lines below
        "identity": {
        "type": "SystemAssigned"
        },
        //end of added lines
        "dependsOn": [
        "[resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))]",
        "[resourceId('Microsoft.Network/networkInterfaces/', variables('nicName'))]"
        ],
        "properties": {
        "hardwareProfile": {
        ...
    
  5. Ajoutez la configuration suivante pour activer l’extension de diagnostics sur une machine virtuelle Windows. Pour une machine virtuelle basée sur Resource Manager simple, vous pouvez ajouter la configuration de l’extension au tableau des ressources de la machine virtuelle. La ligne "sinks": "AzMonSink" et la configuration correspondante "SinksConfig" plus loin dans la section permettent à l’extension d’envoyer les métriques directement à Azure Monitor. N’hésitez pas à ajouter ou supprimer des compteurs de performances si nécessaire.

            "networkProfile": {
                "networkInterfaces": [
                {
                    "id": "[resourceId('Microsoft.Network/networkInterfaces',variables('nicName'))]"
                }
                ]
            },
    "diagnosticsProfile": {
        "bootDiagnostics": {
        "enabled": true,
        "storageUri": "[reference(resourceId('Microsoft.Storage/storageAccounts/', variables('storageAccountName'))).primaryEndpoints.blob]"
        }
    }
    },
    //Start of section to add
    "resources": [
    {
                "type": "Microsoft.Compute/virtualMachines/extensions",
                "name": "[concat(variables('vmName'), '/', 'Microsoft.Insights.VMDiagnosticsSettings')]",
                "apiVersion": "2017-12-01",
                "location": "[resourceGroup().location]",
                "dependsOn": [
                "[concat('Microsoft.Compute/virtualMachines/', variables('vmName'))]"
                ],
                "properties": {
                "publisher": "Microsoft.Azure.Diagnostics",
                "type": "IaaSDiagnostics",
                "typeHandlerVersion": "1.12",
                "autoUpgradeMinorVersion": true,
                "settings": {
                    "WadCfg": {
                    "DiagnosticMonitorConfiguration": {
        "overallQuotaInMB": 4096,
        "DiagnosticInfrastructureLogs": {
                        "scheduledTransferLogLevelFilter": "Error"
            },
                        "Directories": {
                        "scheduledTransferPeriod": "PT1M",
        "IISLogs": {
                            "containerName": "wad-iis-logfiles"
                        },
                        "FailedRequestLogs": {
                            "containerName": "wad-failedrequestlogs"
                        }
                        },
                        "PerformanceCounters": {
                        "scheduledTransferPeriod": "PT1M",
                        "sinks": "AzMonSink",
                        "PerformanceCounterConfiguration": [
                            {
                            "counterSpecifier": "\\Memory\\Available Bytes",
                            "sampleRate": "PT15S"
                            },
                            {
                            "counterSpecifier": "\\Memory\\% Committed Bytes In Use",
                            "sampleRate": "PT15S"
                            },
                            {
                            "counterSpecifier": "\\Memory\\Committed Bytes",
                            "sampleRate": "PT15S"
                            }
                        ]
                        },
                        "WindowsEventLog": {
                        "scheduledTransferPeriod": "PT1M",
                        "DataSource": [
                            {
                            "name": "Application!*"
                            }
                        ]
                        },
                        "Logs": {
                        "scheduledTransferPeriod": "PT1M",
                        "scheduledTransferLogLevelFilter": "Error"
                        }
                    },
                    "SinksConfig": {
                        "Sink": [
                        {
                            "name" : "AzMonSink",
                            "AzureMonitor" : {}
                        }
                        ]
                    }
                    },
                    "StorageAccount": "[variables('storageAccountName')]"
                },
                "protectedSettings": {
                    "storageAccountName": "[variables('storageAccountName')]",
                    "storageAccountKey": "[listKeys(variables('accountid'),'2015-06-15').key1]",
                    "storageAccountEndPoint": "https://core.windows.net/"
                }
                }
            }
            ]
    //End of section to add
    
  6. Enregistrez et fermez les deux fichiers.

Déployer le modèle ARM

Notes

Vous devez exécuter l’extension Diagnostics Azure version 1.5 ou ultérieure et avoir la valeur de la propriété autoUpgradeMinorVersion: définie sur true dans votre modèle ARM. Azure charge alors l’extension appropriée lorsqu’il démarre la machine virtuelle. Si ces paramètres ne figurent pas dans votre modèle, modifiez-les et redéployez le modèle.

Pour déployer le modèle ARM, nous utilisons Azure PowerShell.

  1. Démarrez PowerShell.

  2. Connexion à Azure avec Login-AzAccount.

  3. Obtenez la liste de vos abonnements à l’aide de Get-AzSubscription.

  4. Définissez l’abonnement que vous utilisez pour créer/mettre à jour la machine virtuelle dans :

    Select-AzSubscription -SubscriptionName "<Name of the subscription>"
    
  5. Pour créer un nouveau groupe de ressources pour la machine virtuelle en cours de déploiement, exécutez la commande suivante :

     New-AzResourceGroup -Name "<Name of Resource Group>" -Location "<Azure Region>"
    
  6. Exécutez les commandes suivantes pour déployer la machine virtuelle en utilisant le modèle ARM.

    Notes

    Si vous souhaitez mettre à jour une machine virtuelle existante, ajoutez -Mode Incremental à la fin de la commande suivante.

    New-AzResourceGroupDeployment -Name "<NameThisDeployment>" -ResourceGroupName "<Name of the Resource Group>" -TemplateFile "<File path of your Resource Manager template>" -TemplateParameterFile "<File path of your parameters file>"
    
  7. Une fois votre déploiement réussi, la machine virtuelle doit se trouver dans le portail Azure et envoie des métriques vers Azure Monitor.

    Notes

    Des erreurs liées à la vmSkuSize sélectionnée sont susceptibles de se produire. Si cette erreur se produit, revenez à votre fichier azuredeploy.json et mettez à jour la valeur par défaut du paramètre vmSkuSize. Dans ce cas, nous vous recommandons d’essayer "Standard_DS1_v2".

Représenter vos métriques graphiquement

  1. Connectez-vous au portail Azure.

  2. Dans le menu de gauche, sélectionnez Surveiller.

  3. Sur la page Surveiller, sélectionnez Métriques.

    Capture d’écran montrant la page Métriques.

  4. Modifiez la période d’agrégation afin d’indiquer 30 dernières minutes.

  5. Dans le menu déroulant des ressources, sélectionnez la machine virtuelle que vous avez créée. Si vous n’avez pas modifié le nom dans le modèle, elle doit s’appeler SimpleWinVM2.

  6. Dans la liste déroulante des espaces de noms, sélectionnez azure.vm.windows.guestmetrics.

  7. Dans la liste déroulante des métriques, sélectionnez Mémoire % octets validés en cours d’utilisation.

Étapes suivantes

En savoir plus sur les métriques personnalisées.