Fiabilité dans les machines virtuelles

Cet article contient des suggestions de fiabilité spécifiques pour les machines virtuelles, ainsi que des informations détaillées sur la résilience régionale des machines virtuelles avec les zones de disponibilité et la continuité d’activité et reprise d’activité entre régions.

Pour obtenir une vue d’ensemble architecturale de la fiabilité dans Azure, consultez Fiabilité Azure.

Recommandations en matière de fiabilité

Cette section contient des recommandations pour atteindre la résilience et la disponibilité. Chaque recommandation appartient à l’une des deux catégories suivantes :

  • Les éléments d’intégrité couvrent des domaines tels que les éléments de configuration et le bon fonctionnement des principaux composants de votre charge de travail Azure, tels que les paramètres de configuration des ressources Azure, les dépendances vis-à-vis d’autres services, etc.

  • Les éléments de risque couvrent des domaines tels que les exigences de disponibilité et de reprise d’activité, les tests, le monitoring, le déploiement et d’autres éléments qui, s’ils ne sont pas résolus, augmentent les risques de problèmes dans l’environnement.

Matrice de priorité des recommandations de fiabilité

Chaque recommandation est marquée conformément à la matrice de priorité suivante :

Image Priority Description
Élevé Correctif immédiat nécessaire.
Moyenne Corriger dans les 3 à 6 mois.
Faible Doit être examiné.

Résumé des recommandations en matière de fiabilité

Category Priorité Recommandation
Haute disponibilité Exécuter des charges de travail de production sur deux machines virtuelles ou plus à l’aide d’Azure Virtual Machine Scale Sets Flex
Déployer des machines virtuelles dans des zones de disponibilité ou utiliser Virtual Machine Scale Sets Flex avec des zones
Migrer des machines virtuelles à l’aide de groupes à haute disponibilité vers Virtual Machine Scale Sets Flex
Utiliser la fonctionnalité Disques managés pour les disques de machine virtuelle
Récupération d’urgence Répliquer les machines virtuelles à l’aide d’Azure Site Recovery
Sauvegarder des données sur vos machines virtuelles avec le service Sauvegarde Azure
Niveau de performance Héberger des données d’application et de base de données sur un disque de données
Les machines virtuelles de production doivent utiliser des disques SSD
Activer les performances réseau accélérées (AccelNet)
Quand AccelNet est activé, vous devez mettre à jour manuellement le pilote de carte d’interface réseau GuestOS
Gestion VM-9 : Surveiller les machines virtuelles à l’état Arrêté
Utiliser des configurations de maintenance pour la machine virtuelle
Sécurité Les machines virtuelles ne doivent pas avoir d’adresse IP publique directement associée
Les interfaces de réseau virtuel sont associées à un groupe de sécurité réseau
Le transfert IP ne doit être activé que pour les appliances virtuelles réseau
L’accès réseau au disque de machine virtuelle doit être défini sur « Désactiver l’accès public et activer l’accès privé »
Activer le chiffrement de disque et le chiffrement des données au repos par défaut
Mise en réseau Les serveurs DNS client doivent être configurés au niveau du réseau virtuel
Stockage Les disques partagés ne doivent être activés que sur les serveurs en cluster
Conformité Vérifier que vos machines virtuelles sont conformes aux stratégies Azure
Surveillance Activer VM Insights
Configurer les paramètres de diagnostic pour toutes les ressources Azure

Haute disponibilité

Exécuter des charges de travail de production sur deux machines virtuelles ou plus à l’aide de Virtual Machine Scale Sets Flex

Pour protéger les charges de travail d’application contre les temps d’arrêt en raison de l’indisponibilité temporaire d’un disque ou d’une machine virtuelle, il est recommandé d’exécuter les charges de travail de production sur au moins deux machines virtuelles à l’aide de Virtual Machine Scale Sets Flex.

Pour exécuter des charges de travail de production, vous pouvez utiliser :

  • Azure Virtual Machine Scale Sets pour créer et gérer un groupe de machines virtuelles à charge équilibrée. Le nombre d’instances de machine virtuelle peut augmenter ou diminuer automatiquement en fonction d’une demande ou d’un calendrier défini.

  • Zones de disponibilité. Pour plus d’informations sur les zones de disponibilité et les machines virtuelles, consultez Support des zones de disponibilité.

// Azure Resource Graph Query
// Find all VMs that are not associated with a VMSS Flex instance
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnull(properties.virtualMachineScaleSet.id)
| project recommendationId="vm-1", name, id, tags

Déployer des machines virtuelles dans des zones de disponibilité ou utiliser Virtual Machine Scale Sets Flex avec des zones*

Lorsque vous crées vos machines virtuelles, utilisez les zones de disponibilité pour protéger vos applications et données contre les défaillances peu probables du centre de données. Pour plus d’informations sur les zones de disponibilité pour les machines virtuelles, consultez Support des zones de disponibilité dans ce document.

Pour plus d’informations sur l’activation du support des zones de disponibilité lors de la création de votre machine virtuelle, consultez Création du support des zones de disponibilité.

Pour plus d’informations sur la migration de vos machines virtuelles existantes vers une prise en charge des zones de disponibilité, consultez Migrer vers la prise en charge des zones de disponibilité.

// Azure Resource Graph Query
// Find all VMs that are not assigned to a Zone
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnull(zones)
| project recommendationId="vm-2", name, id, tags, param1="No Zone"

Migrer des machines virtuelles à l’aide de groupes à haute disponibilité vers Virtual Machine Scale Sets Flex

Modernisez vos charges de travail en les migrant de machines virtuelles vers Virtual Machine Scale Sets Flex.

Avec Virtual Machine Scale Sets Flex, vous pouvez déployer vos machines virtuelles de deux manières :

  • Entre des zones
  • Dans la même zone, mais sur des domaines d’erreur (FD) et des domaines de mise à jour (UD) automatiquement.

Dans une application multiniveau, il est recommandé de placer chaque couche Application dans son propre Virtual Machine Scale Sets Flex.

// Azure Resource Graph Query
// Find all VMs using Availability Sets
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.availabilitySet)
| project recommendationId = "vm-3", name, id, tags, param1=strcat("availabilitySet: ",properties.availabilitySet.id)

Utiliser la fonctionnalité Disques managés pour les disques de machine virtuelle*

Pour bénéficier d’une meilleure fiabilité des machines virtuelles dans un groupe à haute disponibilité, utilisez des disques managés. Les disques managés sont suffisamment isolés les uns des autres pour éviter les points de défaillance uniques. Par ailleurs, les disques managés ne sont pas soumis aux limites d’IOPS des disques durs virtuels créés dans un compte de stockage.

// Azure Resource Graph Query
// Find all VMs that are not using Managed Disks
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnull(properties.storageProfile.osDisk.managedDisk)
| project recommendationId = "vm-5", name, id, tags

Récupération d’urgence

Répliquer les machines virtuelles à l’aide d’Azure Site Recovery

Lorsque vous répliquez des machines virtuelles Azure à l’aide de Site Recovery, tous les disques sont répliqués en continu et de manière asynchrone vers la région cible. Les points de récupération sont créés toutes les quelques minutes, ce qui vous donne un objectif de point de récupération (RPO) de l’ordre de quelques minutes. Vous pouvez effectuer des exercices de reprise d’activité autant de fois que vous le souhaitez sans impacter l’application de production ou la réplication en cours.

Pour savoir comment exécuter une simulation de récupération d’urgence, consultez Exécuter un test de basculement.

// Azure Resource Graph Query
// Find all VMs that do NOT have replication with ASR enabled
// Run query to see results.
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, id, tags
| join kind=leftouter (
    recoveryservicesresources
    | where type =~ 'Microsoft.RecoveryServices/vaults/replicationFabrics/replicationProtectionContainers/replicationProtectedItems'
    | where properties.providerSpecificDetails.dataSourceInfo.datasourceType =~ 'AzureVm'
    | project id=properties.providerSpecificDetails.dataSourceInfo.resourceId
    | extend name=strcat_array(array_slice(split(id, '/'), 8, -1), '/')
) on name
| where isnull(id1)
| project-away id1
| project-away name1
| project recommendationId = "vm-4", name, id, tags
| order by id asc

Sauvegarder des données sur vos machines virtuelles avec le service Sauvegarde Azure

Le service de sauvegarde Azure fournit des solutions simples, sécurisées et rentables pour sauvegarder vos données et les récupérer à partir du cloud Microsoft Azure. Pour plus d’informations, consultez Qu’est-ce que le service Sauvegarde Azure ?

// Azure Resource Graph Query
// Find all VMs that do NOT have Backup enabled
// Run query to see results.
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| project name, id, tags
| join kind=leftouter (
    recoveryservicesresources
    | where type =~ 'Microsoft.RecoveryServices/vaults/backupFabrics/protectionContainers/protectedItems'
    | where properties.dataSourceInfo.datasourceType =~ 'Microsoft.Compute/virtualMachines'
    | project idBackupEnabled=properties.sourceResourceId
    | extend name=strcat_array(array_slice(split(idBackupEnabled, '/'), 8, -1), '/')
) on name
| where isnull(idBackupEnabled)
| project-away idBackupEnabled
| project-away name1
| project recommendationId = "vm-7", name, id, tags
| order by id asc

Performances

Héberger des données d’application et de base de données sur un disque de données

Un disque de données est un disque managé attaché à une machine virtuelle. Utilisez le disque de données pour stocker des données d’application ou autres que vous souhaitez conserver. Les disques de données sont enregistrés en tant que disques SCSI et sont nommés avec la lettre de votre choix. L’hébergement de vos données sur un disque de données facilite la sauvegarde ou la restauration de vos données. Vous pouvez également migrer le disque sans avoir à déplacer l’ensemble de la machine virtuelle et du système d’exploitation. En outre, vous pouvez sélectionner une référence SKU de disque différente, avec un type, une taille et un niveau de performance différents qui répondent à vos besoins. Pour plus d’informations sur les disques de données, consultez Disques de données.

// Azure Resource Graph Query
// Find all VMs that only have OS Disk
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where array_length(properties.storageProfile.dataDisks) < 1
| project recommendationId = "vm-6", name, id, tags

Les machines virtuelles de production doivent utiliser des disques SSD

Les disques SSD Premium offrent une prise en charge des disques hautes performances et à faible latence pour les applications gourmandes en E/S et les charges de travail de production. Les disques SSD Standard constituent une option de stockage économique optimisée pour les charges de travail nécessitant des performances cohérentes à des niveaux d’IOPS bas.

Voici les recommandations :

  • Utilisez des disques HDD Standard pour les scénarios Dev/Test et les charges de travail moins critiques au coût le plus bas.
  • Utilisez des disques SSD Premium au lieu de disques HDD Standard avec vos machines virtuelles compatibles Premium. Pour toute machine virtuelle à une seule instance utilisant le stockage Premium pour tous les disques de système d’exploitation et de données, Azure garantit une connectivité de la machine virtuelle d’au moins 99,9 %.

Si vous souhaitez mettre à niveau des disques HDD Standard vers des disques SSD Premium, tenez compte des problèmes suivants :

  • La mise à niveau nécessite un redémarrage de la machine virtuelle. Ce processus prend de 3 à 5 minutes.
  • Si les VM sont des machines virtuelles en production stratégiques, il faut évaluer la disponibilité améliorée par rapport au coût des disques Premium.

Pour plus d’informations sur les disques managés et les types de disques Azure, consultez Types de disques managés Azure.

// Azure Resource Graph Query
// Find all disks with StandardHDD sku attached to VMs
Resources
| where type =~ 'Microsoft.Compute/disks'
| where sku.name == 'Standard_LRS' and sku.tier == 'Standard'
| where managedBy != ""
| project recommendationId = "vm-8", name, id, tags, param1=strcat("managedBy: ", managedBy)

Activer les performances réseau accélérées (AccelNet)

AccelNet permet d’opérer une virtualisation d’E/S d’une racine unique (SR-IOV) sur une machine virtuelle, ce qui améliore considérablement les performances réseau. Cette voie hautement performante court-circuite l’hôte à partir du chemin d’accès aux données, ce qui réduit la latence, l’instabilité et l’utilisation du processeur pour les charges de travail réseau les plus exigeantes sur les types de machines virtuelles pris en charge.

Pour plus d’informations sur les performances réseau accélérées, consultez Performances réseau accélérées

// Azure Resource Graph Query
// Find all VM NICs that do not have Accelerated Networking enabled
resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| mv-expand nic = properties.networkProfile.networkInterfaces
| project name, id, tags, lowerCaseNicId = tolower(nic.id), vmSize = tostring(properties.hardwareProfile.vmSize)
| join kind = inner (
    resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | where properties.enableAcceleratedNetworking == false
    | project nicName = split(id, "/")[8], lowerCaseNicId = tolower(id)
    )
    on lowerCaseNicId
| summarize nicNames = make_set(nicName) by name, id, tostring(tags), vmSize
| extend param1 = strcat("NicName: ", strcat_array(nicNames, ", ")), param2 = strcat("VMSize: ", vmSize)
| project recommendationId = "vm-10", name, id, tags, param1, param2
| order by id asc

Quand AccelNet est activé, vous devez mettre à jour manuellement le pilote de carte d’interface réseau GuestOS

Quand AccelNet est activé, l’interface Azure Réseau virtuel par défaut dans GuestOS est remplacée par une interface Mellanox. Par conséquent, le pilote de carte d’interface réseau GuestOS est fourni par Mellanox, un fournisseur tiers. Bien que les images de la Place de marché gérées par Microsoft soient proposées avec la dernière version des pilotes Mellanox, une fois la machine virtuelle déployée, vous devez mettre à jour manuellement le pilote de carte d’interface réseau GuestOS tous les six mois.

// cannot-be-validated-with-arg

Gestion

Passer en revue les machines virtuelles à l’état Arrêté

Les instances de machine virtuelle passent par différents états, y compris les états d’approvisionnement et d’alimentation. Si une machine virtuelle est à l’état Arrêté, elle peut rencontrer un problème ou n’est plus nécessaire et peut être supprimée pour réduire les coûts.

// Azure Resource Graph Query
// Find all VMs that are NOT running
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where properties.extended.instanceView.powerState.displayStatus != 'VM running'
| project recommendationId = "vm-9", name, id, tags

Utiliser des configurations de maintenance pour la machine virtuelle

Pour vous assurer que les mises à jour/interruptions de machine virtuelle sont effectuées dans un délai d'exécution planifié, utilisez les paramètres de configuration de maintenance pour planifier et gérer les mises à jour. Pour plus d’informations sur la gestion des mises à jour de machines virtuelles avec des configurations de maintenance, consultez Gestion des mises à jour de machine virtuelle avec Configurations de maintenance.

// Azure Resource Graph Query
// Find VMS that do not have maintenance configuration assigned
Resources
| extend resourceId = tolower(id)
| project name, location, type, id, tags, resourceId, properties
| where type =~ 'Microsoft.Compute/virtualMachines'
| join kind=leftouter (
maintenanceresources
| where type =~ "microsoft.maintenance/configurationassignments"
| project planName = name, type, maintenanceProps = properties
| extend resourceId = tostring(maintenanceProps.resourceId)
) on resourceId
| where isnull(maintenanceProps)
| project recommendationId = "vm-22",name, id, tags
| order by id asc

Sécurité

Les machines virtuelles ne doivent pas avoir d’adresse IP publique directement associée

Si une machine virtuelle nécessite une connectivité Internet sortante, il est recommandé d’utiliser NAT Gateway ou Pare-feu Azure. NAT Gateway ou Pare-feu Azure contribuent à renforcer la sécurité et la résilience du service, car les deux services bénéficient d’une disponibilité plus élevée et des ports SNAT (Source Network Address Translation). Pour la connectivité Internet entrante, il est recommandé d’utiliser une solution d’équilibrage de charge telle qu’Azure Load Balancer et Application Gateway.

// Azure Resource Graph Query
// Find all VMs with PublicIPs directly associated with them
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| project name, id, tags, nicId = nic.id
| extend nicId = tostring(nicId)
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | where isnotnull(properties.ipConfigurations)
    | mv-expand ipconfig=properties.ipConfigurations
    | extend publicIp = tostring(ipconfig.properties.publicIPAddress.id)
    | where publicIp != ""
    | project name, nicId = tostring(id), publicIp
) on nicId
| project recommendationId = "vm-12", name, id, tags
| order by id asc

Un groupe de sécurité réseau (NSG) est associé aux interfaces réseau des machines virtuelles*

Il est recommandé d’associer un groupe de sécurité réseau à un sous-réseau ou à une interface réseau, mais pas aux deux. Dans la mesure où les règles d’un groupe de sécurité réseau associé à un sous-réseau peuvent entrer en conflit avec les règles d’un groupe de sécurité réseau associé à une interface réseau, vous pouvez rencontre des problèmes de communication inattendus qui nécessitent une intervention. Pour plus d’informations, consultez Trafic intra-sous-réseau.

// Azure Resource Graph Query
// Provides a list of virtual machines and associated NICs that do have an NSG associated to them and also an NSG associated to the subnet.
Resources
| where type =~ 'Microsoft.Network/networkInterfaces'
| where isnotnull(properties.networkSecurityGroup)
| mv-expand ipConfigurations = properties.ipConfigurations, nsg = properties.networkSecurityGroup
| project nicId = tostring(id), subnetId = tostring(ipConfigurations.properties.subnet.id), nsgName=split(nsg.id, '/')[8]
| parse kind=regex subnetId with '/virtualNetworks/' virtualNetwork '/subnets/' subnet
    | join kind=inner (
        Resources
        | where type =~ 'Microsoft.Network/NetworkSecurityGroups' and isnotnull(properties.subnets)
        | project name, resourceGroup, subnet=properties.subnets
        | mv-expand subnet
        | project subnetId=tostring(subnet.id)
    ) on subnetId
    | project nicId
| join kind=leftouter (
    Resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | where isnotnull(properties.networkProfile.networkInterfaces)
    | mv-expand nic=properties.networkProfile.networkInterfaces
    | project vmName = name, vmId = id, tags, nicId = nic.id, nicName=split(nic.id, '/')[8]
    | extend nicId = tostring(nicId)
) on nicId
| project recommendationId = "vm-13", name=vmName, id = vmId, tags, param1 = strcat("nic-name=", nicName)

Le transfert IP ne doit être activé que pour les appliances virtuelles réseau

Le transfert IP permet à l’interface réseau de la machine virtuelle de :

  • Recevoir le trafic réseau qui n’est pas destiné à l’une des adresses IP assignées à l’une des configurations IP assignées à l’interface réseau.

  • Envoyez le trafic réseau avec une adresse IP source différente de celle assignée à l’une des configurations IP d’une interface réseau.

Le paramètre de transfert IP doit être activé pour chaque interface réseau attachée à la machine virtuelle recevant le trafic qui doit être transféré. Une machine virtuelle peut transférer le trafic, qu’une ou plusieurs interfaces réseau y soient attachées. Bien que le transfert IP soit un paramètre Azure, la machine virtuelle doit également exécuter une application capable de transférer le trafic, comme une application de pare-feu, d’optimisation WAN et d’équilibrage de charge.

Pour savoir comment activer ou désactiver le transfert IP, consultez Activer ou désactiver le transfert IP.

// Azure Resource Graph Query
// Find all VM NICs that have IPForwarding enabled. This feature is usually only required for Network Virtual Appliances
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| project name, id, tags, nicId = nic.id
| extend nicId = tostring(nicId)
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | where properties.enableIPForwarding == true
    | project nicId = tostring(id)
) on nicId
| project recommendationId = "vm-14", name, id, tags
| order by id asc

L’accès réseau au disque de machine virtuelle doit être défini sur « Désactiver l’accès public et activer l’accès privé »

Il est recommandé de définir l’accès réseau au disque de machine virtuelle sur « Désactiver l’accès public et activer l’accès privé » et de créer un point de terminaison privé. Pour savoir comment créer un point de terminaison privé, consultez Créer un point de terminaison privé.

// Azure Resource Graph Query
// Find all Disks with "Enable public access from all networks" enabled
resources
| where type =~ 'Microsoft.Compute/disks'
| where properties.publicNetworkAccess == "Enabled"
| project id, name, tags, lowerCaseDiskId = tolower(id)
| join kind = leftouter (
    resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)
    | join kind = fullouter (
        resources
        | where type =~ 'Microsoft.Compute/virtualMachines'
        | mv-expand dataDisks = properties.storageProfile.dataDisks
        | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)
        )
        on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId
    | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)
    )
    on lowerCaseDiskId
| summarize vmNames = make_set(vmName) by name, id, tostring(tags)
| extend param1 = iif(isempty(vmNames[0]), "VMName: n/a", strcat("VMName: ", strcat_array(vmNames, ", ")))
| project recommendationId = "vm-17", name, id, tags, param1
| order by id asc

Activer le chiffrement de disque et le chiffrement des données au repos par défaut

Il existe plusieurs types de chiffrement disponibles pour vos disques managés, y compris Azure Disk Encryption (ADE), le chiffrement côté serveur (SSE) et le chiffrement sur l’hôte.

  • Azure Disk Encryption vous aide à protéger et à préserver vos données de façon à répondre aux engagements de votre entreprise en matière de sécurité et de conformité.
  • Le chiffrement côté serveur du Stockage sur disque Azure (également appelé chiffrement au repos ou chiffrement du Stockage Azure) chiffre automatiquement les données stockées sur les disques managés Azure (disques de système d’exploitation et de données) et persistantes sur les clusters de stockage.
  • Le chiffrement sur l’hôte garantit que les données stockées sur l’hôte de machine virtuelle hébergeant votre machine virtuelle seront chiffrées au repos et chemineront chiffrées jusqu’aux clusters de stockage.
  • Le chiffrement de disque confidentiel lie les clés de chiffrement de disque au module de plateforme sécurisée (TPM) de la machine virtuelle et rend le contenu du disque protégé accessible uniquement à la machine virtuelle.

Pour plus d’informations sur les options de chiffrement de disque managé, consultez Vue d’ensemble des options de chiffrement de disque managé.

// under-development

Mise en réseau

Les serveurs DNS client doivent être configurés au niveau du réseau virtuel

Configurez le serveur DNS dans le réseau virtuel pour éviter les incohérences de résolution de noms dans l’environnement. Pour plus d’informations sur la résolution de noms pour les ressources dans les réseaux virtuels Azure, consultez Résolution de noms pour les réseaux virtuels et les services cloud.

// Azure Resource Graph Query
// Find all VM NICs that have DNS Server settings configured in any of the NICs
Resources
| where type =~ 'Microsoft.Compute/virtualMachines'
| where isnotnull(properties.networkProfile.networkInterfaces)
| mv-expand nic=properties.networkProfile.networkInterfaces
| project name, id, tags, nicId = nic.id
| extend nicId = tostring(nicId)
| join kind=inner (
    Resources
    | where type =~ 'Microsoft.Network/networkInterfaces'
    | project name, id, dnsServers = properties.dnsSettings.dnsServers
    | extend hasDns = array_length(dnsServers) >= 1
    | where hasDns != 0
    | project name, nicId = tostring(id)
) on nicId
| project recommendationId = "vm-15", name, id, tags
| order by id asc

Stockage

Les disques partagés ne doivent être activés que sur les serveurs en cluster

Disques partagés Azure est une fonctionnalité des disques managés Azure qui vous permet d’attacher simultanément un disque managé à plusieurs machines virtuelles. Lorsque vous attachez un disque managé à plusieurs machines virtuelles, vous pouvez déployer de nouvelles applications en cluster ou migrer des applications en cluster existantes vers Azure. Les disques partagés ne doivent être utilisés que dans les situations où le disque est affecté à plusieurs machines virtuelles membres d’un cluster.

Pour en savoir plus sur l’activation des disques partagés pour les disques managés, consultez Activer un disque partagé.

// Azure Resource Graph Query
// Find all Disks configured to be Shared. This is not an indication of an issue, but if a disk with this configuration is assigned to two or more VMs without a proper disk control mechanism (like a WSFC) it can lead to data loss
resources
| where type =~ 'Microsoft.Compute/disks'
| where isnotnull(properties.maxShares)
| project id, name, tags, lowerCaseDiskId = tolower(id), diskState = tostring(properties.diskState)
| join kind = leftouter (
    resources
    | where type =~ 'Microsoft.Compute/virtualMachines'
    | project osDiskVmName = name, lowerCaseOsDiskId = tolower(properties.storageProfile.osDisk.managedDisk.id)
    | join kind = fullouter (
        resources
        | where type =~ 'Microsoft.Compute/virtualMachines'
        | mv-expand dataDisks = properties.storageProfile.dataDisks
        | project dataDiskVmName = name, lowerCaseDataDiskId = tolower(dataDisks.managedDisk.id)
        )
        on $left.lowerCaseOsDiskId == $right.lowerCaseDataDiskId
    | project lowerCaseDiskId = coalesce(lowerCaseOsDiskId, lowerCaseDataDiskId), vmName = coalesce(osDiskVmName, dataDiskVmName)
    )
    on lowerCaseDiskId
| summarize vmNames = make_set(vmName) by name, id, tostring(tags), diskState
| extend param1 = strcat("DiskState: ", diskState), param2 = iif(isempty(vmNames[0]), "VMName: n/a", strcat("VMName: ", strcat_array(vmNames, ", ")))
| project recommendationId = "vm-16", name, id, tags, param1, param2
| order by id asc

Conformité

Vérifier que vos machines virtuelles sont conformes aux stratégies Azure

Il est important de sécuriser votre machine virtuelle (VM) pour les applications que vous exécutez. La sécurisation des machines virtuelles peut comprendre plusieurs services et fonctionnalités Azure qui garantissent un accès sécurisé à vos machines virtuelles et le stockage sécurisé des données. Pour plus d’informations sur la sécurisation de votre machine virtuelle et de vos applications, consultez Contrôles de conformité réglementaire d’Azure Policy pour les machines Virtuelles Azure.

// Azure Resource Graph Query
// Find all VMs in "NonCompliant" state with Azure Policies
PolicyResources
| where type =~ "Microsoft.PolicyInsights/policyStates" and properties.resourceType =~ "Microsoft.Compute/virtualMachines" and properties.complianceState =~ "NonCompliant"
| project
    policyAssignmentName = properties.policyAssignmentName,
    policyDefinitionName = properties.policyDefinitionName,
    lowerCasePolicyDefinitionIdOfPolicyState = tolower(properties.policyDefinitionId),
    lowerCaseVmIdOfPolicyState = tolower(properties.resourceId)
| join kind = leftouter (
    PolicyResources
    | where type =~ "Microsoft.Authorization/policyDefinitions"
    | project lowerCasePolicyDefinitionId = tolower(id), policyDefinitionDisplayName = properties.displayName
    )
    on $left.lowerCasePolicyDefinitionIdOfPolicyState == $right.lowerCasePolicyDefinitionId
| project policyAssignmentName, policyDefinitionName, policyDefinitionDisplayName, lowerCaseVmIdOfPolicyState
| join kind = leftouter (
    Resources
    | where type =~ "Microsoft.Compute/virtualMachines"
    | project vmName = name, vmId = id, vmTags = tags, lowerCaseVmId = tolower(id)
    )
    on $left.lowerCaseVmIdOfPolicyState == $right.lowerCaseVmId
| extend
    param1 = strcat("AssignmentName: ", policyAssignmentName),
    param2 = strcat("DefinitionName: ", policyDefinitionDisplayName),  // Align to Azure portal's term.
    param3 = strcat("DefinitionID: ", policyDefinitionName)            // Align to Azure portal's term.
| project recommendationId = "vm-18", name = vmName, id = vmId, tags = vmTags, param1, param2, param3

Surveillance

Activer VM Insights

Activez les insights de machine virtuelle pour obtenir une meilleure visibilité sur l'intégrité et les performances de votre machine virtuelle. Les insights de machine virtuelle vous fournissent des informations sur les performances et l’intégrité de vos machines virtuelles et groupes de machines virtuelles identiques, en surveillant leurs processus en cours d’exécution et leurs dépendances vis-à-vis d’autres ressources. Ils peuvent contribuer à fournir des performances et une disponibilité prévisibles des applications vitales en identifiant les goulots d’étranglement et les problèmes de réseau. Ils peuvent également vous aider à déterminer si le problème est lié à d’autres dépendances.

// Azure Resource Graph Query
// Check for VMs without Azure Monitoring Agent extension installed, missing Data Collection Rule or Data Collection Rule without performance enabled.
Resources
| where type == 'microsoft.compute/virtualmachines'
| project idVm = tolower(id), name, tags
| join kind=leftouter (
    InsightsResources
    | where type =~ "Microsoft.Insights/dataCollectionRuleAssociations" and id has "Microsoft.Compute/virtualMachines"
    | project idDcr = tolower(properties.dataCollectionRuleId), idVmDcr = tolower(substring(id, 0, indexof(id, "/providers/Microsoft.Insights/dataCollectionRuleAssociations/"))))
on $left.idVm == $right.idVmDcr
| join kind=leftouter (
    Resources
    | where type =~ "Microsoft.Insights/dataCollectionRules"
    | extend
        isPerformanceEnabled = iif(properties.dataSources.performanceCounters contains "Microsoft-InsightsMetrics" and properties.dataFlows contains "Microsoft-InsightsMetrics", true, false),
        isMapEnabled = iif(properties.dataSources.extensions contains "Microsoft-ServiceMap" and properties.dataSources.extensions contains "DependencyAgent" and properties.dataFlows contains "Microsoft-ServiceMap", true, false)//,
    | where isPerformanceEnabled or isMapEnabled
    | project dcrName = name, isPerformanceEnabled, isMapEnabled, idDcr = tolower(id))
on $left.idDcr == $right.idDcr
| join kind=leftouter (
    Resources
        | where type == 'microsoft.compute/virtualmachines/extensions' and (name contains 'AzureMonitorWindowsAgent' or name contains 'AzureMonitorLinuxAgent')
        | extend idVmExtension = tolower(substring(id, 0, indexof(id, '/extensions'))), extensionName = name)
on $left.idVm == $right.idVmExtension
| where isPerformanceEnabled != 1 or (extensionName != 'AzureMonitorWindowsAgent' and extensionName != 'AzureMonitorLinuxAgent')
| project recommendationId = "vm-20", name, id = idVm, tags, param1 = strcat('MonitoringExtension:', extensionName), param2 = strcat('DataCollectionRuleId:', idDcr), param3 = strcat('isPerformanceEnabled:', isPerformanceEnabled)

Configurer les paramètres de diagnostic pour toutes les ressources Azure

Les métriques de plateforme sont envoyées automatiquement à Azure Monitor Metrics par défaut et sans configuration. Les journaux de plateforme fournissent des informations de diagnostic et d’audit détaillées pour les ressources Azure et la plateforme Azure dont elles dépendent. Les types de journaux sont les suivants :

  • Les journaux de ressources qui ne sont pas collectés tant qu’ils ne sont pas routés vers une destination.
  • Les journaux d’activité qui existent en tant que tel, mais ils peuvent être acheminés vers d’autres emplacements.

Chaque ressource Azure requiert son propre paramètre de diagnostic, qui définit les critères suivants :

  • Sources Le type de données de métrique et de journal à envoyer aux destinations définies dans le paramètre. Les types disponibles varient selon le type de ressource.
  • Destinations : une ou plusieurs destinations d’envoi.

Un seul paramètre de diagnostic ne peut pas définir plus d’une destination. Si vous souhaitez envoyer des données à plus d’un type de destination (par exemple, deux espaces de travail Log Analytics), créez plusieurs paramètres. Chaque ressource peut avoir jusqu’à cinq paramètres de diagnostic.

Pour plus d’informations, consultez Paramètres de diagnostic dans Azure Monitor.

// Azure Resource Graph Query
// Find all Virtual Machines without diagnostic settings enabled/with diagnostic settings enabled but not configured both performance counters and event logs/syslogs.
resources
| where type =~ "microsoft.compute/virtualmachines"
| project name, id, tags, lowerCaseVmId = tolower(id)
| join kind = leftouter (
    resources
    | where type =~ "Microsoft.Compute/virtualMachines/extensions" and properties.publisher =~ "Microsoft.Azure.Diagnostics"
    | project
        lowerCaseVmIdOfExtension = tolower(substring(id, 0, indexof(id, "/extensions/"))),
        extensionType = properties.type,
        provisioningState = properties.provisioningState,
        storageAccount = properties.settings.StorageAccount,
        // Windows
        wadPerfCounters = properties.settings.WadCfg.DiagnosticMonitorConfiguration.PerformanceCounters.PerformanceCounterConfiguration,
        wadEventLogs = properties.settings.WadCfg.DiagnosticMonitorConfiguration.WindowsEventLog,
        // Linux
        ladPerfCounters = properties.settings.ladCfg.diagnosticMonitorConfiguration.performanceCounters.performanceCounterConfiguration,
        ladSyslog = properties.settings.ladCfg.diagnosticMonitorConfiguration.syslogEvents
    | extend
        // Windows
        isWadPerfCountersConfigured = iif(array_length(wadPerfCounters) > 0, true, false),
        isWadEventLogsConfigured = iif(isnotnull(wadEventLogs) and array_length(wadEventLogs.DataSource) > 0, true, false),
        // Linux
        isLadPerfCountersConfigured = iif(array_length(ladPerfCounters) > 0, true, false),
        isLadSyslogConfigured = isnotnull(ladSyslog)
    | project
        lowerCaseVmIdOfExtension,
        extensionType,
        provisioningState,
        storageAccount,
        isPerfCountersConfigured = case(extensionType =~ "IaaSDiagnostics", isWadPerfCountersConfigured, extensionType =~ "LinuxDiagnostic", isLadPerfCountersConfigured, false),
        isEventLogsConfigured = case(extensionType =~ "IaaSDiagnostics", isWadEventLogsConfigured, extensionType =~ "LinuxDiagnostic", isLadSyslogConfigured, false)
    )
    on $left.lowerCaseVmId == $right.lowerCaseVmIdOfExtension
| where isempty(lowerCaseVmIdOfExtension) or provisioningState !~ "Succeeded" or not(isPerfCountersConfigured and isEventLogsConfigured)
| extend
    param1 = strcat("DiagnosticSetting: ", iif(isnotnull(extensionType), strcat("Enabled, partially configured (", extensionType, ")"), "Not enabled")),
    param2 = strcat("ProvisioningState: ", iif(isnotnull(provisioningState), provisioningState, "n/a")),
    param3 = strcat("storageAccount: ", iif(isnotnull(storageAccount), storageAccount, "n/a")),
    param4 = strcat("PerformanceCounters: ", case(isnull(isPerfCountersConfigured), "n/a", isPerfCountersConfigured, "Configured", "Not configured")),
    param5 = strcat("EventLogs/Syslogs: ", case(isnull(isEventLogsConfigured), "n/a", isEventLogsConfigured, "Configured", "Not configured"))
| project recommendationId = "vm-21", name, id, tags, param1, param2, param3, param4, param5

Prise en charge des zones de disponibilité

Les zones de disponibilité Azure sont au moins trois groupes physiquement distincts de centres de données dans chaque région Azure. Les centres de données de chaque zone sont équipés d’une infrastructure réseau, de refroidissement et d’alimentation indépendante. En cas de défaillance de zone locale, les zones de disponibilité sont conçues de telle sorte que si une zone est affectée, les services, la capacité et la haute disponibilité de la région sont pris en charge par les deux autres zones.

Les défaillances sont aussi bien des défaillances logicielles et matérielles que des événements de type tremblements de terre, inondations et incendies. La tolérance aux défaillances est obtenue par la redondance et l’isolation logique des services Azure. Pour obtenir des informations détaillées sur les zones de disponibilité dans Azure, consultez Régions et zones de disponibilité.

Les services Azure compatibles avec les zones de disponibilité sont conçus pour fournir le niveau approprié de fiabilité et de flexibilité. Ils peuvent être configurés de deux façons. Un service peut être redondant interzone, avec une réplication automatique entre les zones, ou zonal, avec des instances épinglées à une zone spécifique. Vous pouvez également combiner ces approches. Pour plus d’informations sur l’architecture zonale et redondante interzone, consultez Recommandations pour l’utilisation de zones de disponibilité et de régions.

Les machines virtuelles prennent en charge les zones de disponibilité avec trois zones de disponibilité par région Azure prise en charge et sont également redondantes interzones et zonales. Pour plus d’informations, consultez Zones de disponibilité prises en charge. Le client est responsable de la configuration et de la migration de ses machines virtuelles pour la disponibilité.

Pour en savoir plus sur les options de préparation des zones de disponibilité, consultez :

Prérequis

Améliorations du SLA

Étant donné que les zones de disponibilité sont physiquement distinctes et fournissent une source d’alimentation, un réseau et un refroidissement distincts, les contrats SLA (contrats de niveau de service) augmentent. Pour plus d’informations, consultez le SLA pour Virtual Machines.

Créer une ressource avec les zones de disponibilité activées

Commencez par créer une machine virtuelle avec une zone de disponibilité activée à partir des options de déploiement ci-dessous :

Prise en charge du basculement zonal

Vous pouvez configurer des machines virtuelles pour basculer vers une autre zone à l’aide du service Site Recovery. Pour plus d’informations, consultez Récupération de site.

Tolérance de panne

Les machines virtuelles peuvent basculer vers un autre serveur dans un cluster, avec redémarrage du système d’exploitation de la machine virtuelle sur le nouveau serveur. Vous devez vous référer au processus de basculement pour la reprise d’activité après sinistre, la collecte de machines virtuelles dans la planification de la reprise et l’exécution d’exercices de reprise d’activité pour garantir la réussite de votre solution de tolérance de panne.

Pour plus d’informations, consultez les processus de récupération de site.

Expérience en cas de panne de zone

À l’occasion d’une panne à l’échelle d’une zone, vous devez vous attendre à une brève dégradation des performances, jusqu’à ce que la capacité d’auto-réparation du service de machine virtuelle rééquilibre la capacité sous-jacente afin de s’adapter aux zones saines. L’auto-réparation ne dépend pas de la restauration de zone ; on s’attend à ce que l’état de l’auto-réparation du service géré par Microsoft compense une zone perdue, en se servant de la capacité des autres zones.

Vous devez également vous préparer à la possibilité qu’il y ait une panne d’une région entière. Si une région entière est confrontée à une interruption de service, les copies localement redondantes de vos données sont temporairement indisponibles. Si la géoréplication est activée, trois autres copies de vos tables et objets blob Stockage Azure sont stockées dans une autre région. En cas de panne régionale totale ou de sinistre rendant la région primaire irrécupérable, Azure remappe toutes les entrées DNS sur la région géorépliquée.

Préparation aux pannes de zone et récupération

Nous vous fournissons les conseils suivants pour les machines virtuelles Azure durant une interruption de service sur l’ensemble de la région où votre application Machine virtuelle Azure est déployée :

Conception à faible latence

Les options Inter-régions (région secondaire), Inter-abonnement (préversion) et Inter-zonal (préversion) sont des options disponibles à prendre en compte lors de la conception d’une solution de machine virtuelle à faible latence. Pour plus d’informations sur ces options, consultez les méthodes de restauration prises en charge.

Important

En refusant le déploiement prenant en charge la zone, vous renoncez à la protection contre l’isolation des erreurs sous-jacentes. L’utilisation de références SKU qui ne prennent pas en charge les zones de disponibilité ou la désactivation de la configuration des zones de disponibilité force la dépendance aux ressources qui n’obéissent pas au placement et à la séparation des zones (y compris les dépendances sous-jacentes de ces ressources). Ces ressources ne doivent pas survivre à des scénarios de zone descendante. Les solutions qui tirent parti de ces ressources doivent définir une stratégie de récupération d’urgence et configurer une récupération de la solution dans une autre région.

Techniques de déploiement sécurisées

Lorsque vous optez pour l’isolation des zones de disponibilité, vous devez utiliser des techniques de déploiement sécurisées pour le code d’application et pour les mises à niveau d’application. Outre la configuration d’Azure Site Recovery implémentez l’une des techniques de déploiement sécurisées suivantes pour les machines virtuelles :

Comme Microsoft effectue régulièrement des mises à jour de maintenance planifiées, il peut y avoir de rares instances où ces mises à jour nécessitent un redémarrage de votre machine virtuelle pour appliquer les mises à jour requises à l’infrastructure sous-jacente. Pour plus d’informations, consultez Considérations relatives à la disponibilité lors de la maintenance planifiée.

Avant de mettre à niveau votre prochain ensemble de nœuds dans une autre zone, vous devez effectuer les tâches suivantes :

Migrer vers une prise en charge des zones de disponibilité

Pour savoir comment migrer une machine virtuelle vers la prise en charge des zones de disponibilité, consultez Migrer des machines virtuelles et des groupe de machines virtuelles identiques vers la prise en charge des zones de disponibilité.

Reprise d’activité et continuité d’activité entre régions

La récupération d’urgence (DR) consiste à récupérer après des évènements à fort impact, comme des catastrophes naturelles ou des échecs de déploiements, qui entraînent un temps d’arrêt et une perte de données. Quelle qu’en soit la cause, la meilleure solution en cas de sinistre est d’avoir un plan de DR bien défini et testé, et une conception d’application qui prend activement en charge la DR. Avant de commencer à réfléchir à la création de votre plan de récupération d’urgence, consultez Suggestions pour la conception d’une stratégie de récupération d’urgence.

En ce qui concerne la récupération d’urgence (DR), Microsoft utilise le modèle de responsabilité partagée. Dans un modèle de responsabilité partagée, Microsoft garantit que l’infrastructure de référence et les services de plateforme sont disponibles. En même temps, de nombreux services Azure ne répliquent pas automatiquement les données ou reviennent d’une région défaillante pour effectuer une réplication croisée vers une autre région activée. Pour ces services, vous êtes responsable de la configuration d’un plan de récupération d’urgence qui fonctionne pour votre charge de travail. La plupart des services qui s’exécutent sur des offres PaaS (Platform as a Service) Azure fournissent des fonctionnalités et des conseils pour prendre en charge la récupération d’urgence et vous pouvez utiliser fonctionnalités spécifiques au service pour prendre en charge la récupération rapide pour vous aider à développer votre plan de récupération d’urgence.

Vous pouvez utiliser la restauration inter-région pour restaurer des machines virtuelles Azure via des régions jumelées. Avec la restauration inter-région, vous pouvez restaurer toutes les machines virtuelles Azure pour le point de récupération sélectionné si la sauvegarde est effectuée dans la région secondaire. Pour plus d’informations sur la restauration interrégion, reportez-vous à l’entrée de ligne de table interrégion dans nos options de restauration.

Récupération d’urgence dans la zone géographique multi-région

En cas d’interruption de service à l’échelle de la région, Microsoft travaille avec diligence pour restaurer le service de machine virtuelle. Toutefois, vous devez toujours vous appuyer sur d’autres stratégies de sauvegarde propres à l’application pour atteindre le plus haut niveau de disponibilité. Pour plus d’informations, consultez la section consacrée aux stratégies de données pour une récupération d’urgence.

Détection, notification et gestion des pannes

L’infrastructure matérielle ou physique de la machine virtuelle peut échouer de manière inattendue. Les défaillances inattendus comprennent les défaillances du réseau local, du disque local ou au niveau du rack. Quand une défaillance de ce type est détectée, la plateforme Azure migre (répare) automatiquement votre machine virtuelle vers une machine physique intègre se trouvant dans le même centre de données. Lors de la procédure de réparation, les machines virtuelles subissent des temps d’arrêt (redémarrage) et, dans certains cas, une perte du lecteur temporaire. Le système d’exploitation attaché et les disques de données sont toujours conservés.

Pour plus d’informations sur les interruptions de service de machine virtuelle, consultez les conseils de récupération d’urgence.

Configurer la reprise d’activité et la détection des pannes

Lorsque vous configurez la récupération d’urgence pour les machines virtuelles, comprenez ce que fournit Azure Site Recovery. Activez la récupération d’urgence pour les machines virtuelles avec les méthodes ci-dessous :

Récupération d’urgence dans une zone géographique à région unique

Avec la configuration de la reprise d’activité, les machines virtuelles Azure sont répliquées continuellement vers une autre région cible. Si une panne se produit, vous pouvez basculer les machines virtuelles vers la région secondaire et y accéder à partir de cette région.

Lorsque vous répliquez des machines virtuelles Azure à l'aide de Site Recovery, tous leurs disques sont répliqués en continu et de manière asynchrone dans la région cible. Les points de récupération sont créés toutes les quelques minutes, ce qui vous donne un objectif de point de récupération (RPO) de l’ordre de quelques minutes. Vous pouvez effectuer des exercices de reprise d’activité autant de fois que vous le souhaitez sans impacter l’application de production ou la réplication en cours. Pour plus d’informations, consultez Effectuer un exercice de reprise d’activité sur Azure.

Pour plus d’informations, consultez Composants architecturaux de machines virtuelles Azure et association de régions.

Capacité et résilience proactive de la récupération d’urgence

Microsoft et ses clients opèrent selon le modèle de responsabilité partagée. La responsabilité partagée signifie que dans le cas d’une reprise d’activité après sinistre activée par le client (services sous la responsabilité du client), vous devez traiter la reprise d’activité de chaque service qu’il déploie et contrôle. Pour garantir une reprise proactive, vous devez toujours prédéployer les régions secondaires, car, à défaut de préallocation, la capacité n’est pas garantie au moment de l’impact.

Pour le déploiement de machines virtuelles, vous pouvez utiliser le mode d’orchestration flexible sur Virtual Machine Scale Sets. Toutes les tailles de machine virtuelle peuvent être utilisées avec le mode d’orchestration flexible. Le mode d’orchestration flexible garantit également une haute disponibilité (jusqu’à 1000 machines virtuelles) en répartissant les machines virtuelles entre différents domaines d’erreur dans une région ou dans une zone de disponibilité.

Étapes suivantes