Share via


Confiabilidad en Virtual Machines

Este artículo contiene recomendaciones específicas de fiabilidad para Virtual Machines, además de información detallada sobre la resistencia regional de máquinas virtuales con zonas de disponibilidad, y recuperación ante desastres y continuidad empresarial entre regiones.

Para obtener información arquitectónica general sobre la fiabilidad de Azure, consulte Fiabilidad de Azure.

Recomendaciones sobre la confiabilidad

Esta sección contiene recomendaciones para lograr la resistencia y la disponibilidad. Cada recomendación se divide en una de las dos categorías:

  • Los elementos de mantenimiento abarcan áreas como los elementos de configuración y el funcionamiento correcto de los principales componentes que se encargan de su carga de trabajo de Azure, como la configuración de recursos de Azure, dependencias de otros servicios, etc.

  • Los elementos de riesgo abarcan áreas como los requisitos de disponibilidad y recuperación, pruebas, supervisión, implementación y otros elementos que, si se dejan sin resolver, aumentarán la probabilidad de que surjan problemas en el entorno.

Matriz de prioridad de recomendaciones de fiabilidad

Cada recomendación se marca según la siguiente matriz de prioridad:

Imagen Prioridad Descripción
Alto Se necesita corrección inmediata.
Media Corregir en un plazo de entre 3 y 6 meses.
Bajo Necesita revisión.

Resumen de recomendaciones de fiabilidad

Category Priority Recomendación
Alta disponibilidad Ejecute cargas de trabajo de producción en dos o más máquinas virtuales mediante Azure Virtual Machine Scale Sets Flex
Implemente máquinas virtuales entre zonas de disponibilidad o uso de VMSS Flex con zonas
Migre máquinas virtuales mediante conjuntos de disponibilidad a Virtual Machine Scale Sets Flex
Uso de discos administrados para los discos de las máquinas virtuales
Recuperación ante desastres Replique máquinas virtuales con Azure Site Recovery
Haga copias de seguridad en las máquinas virtuales con el servicio de Azure Backup
Rendimiento Hospede aplicaciones y datos de bases de datos en un disco de datos
Las máquinas virtuales de producción deberían usar discos SSD
Habilite las redes aceleradas (AccelNet)
Cuando AccelNet esté habilitado, debe actualizar manualmente el controlador NIC de GuestOS
Administración VM-9: vigile que no haya máquinas virtuales en estado Detenido
Use configuraciones de mantenimiento para la máquina virtual
Seguridad Las máquinas virtuales no deberían tener una IP pública asociada directamente
Las interfaces de red virtuales tienen un NSG asociado
El reenvío de IP solo debería habilitarse para dispositivos de red virtuales
El acceso de red al disco de máquina virtual debería estar establecido en “Deshabilitar el acceso público y habilitar el acceso privado”
Habilite el cifrado del disco y de los datos en reposo de forma predeterminada
Redes Los servidores DNS de los clientes deberían estar configurados en el nivel de red virtual
Storage Los discos compartidos solo deberían habilitarse en servidores en clúster
Cumplimiento Compruebe que las máquinas virtuales cumplan con las directivas de Azure
Supervisión Habilitar VM Insights
Configuración de las opciones de diagnóstico para todos los recursos de Azure

Alta disponibilidad

Ejecute cargas de trabajo de producción en dos o más máquinas virtuales mediante Virtual Machine Scale Sets Flex

Para proteger las cargas de trabajo de la aplicación de posibles tiempos de inactividad por falta temporal de disponibilidad de un disco o máquina virtual, se recomienda ejecutar las cargas de trabajo de producción en dos o más máquinas virtuales mediante Virtual Machine Scale Sets Flex.

Para ejecutar cargas de trabajo de producción, puede usar:

  • Azure Virtual Machine Scale Sets para crear y administrar un grupo de máquinas virtuales con carga equilibrada. El número de instancias de máquina virtual puede aumentar o disminuir automáticamente según la demanda, o de acuerdo a una programación definida.

  • Zonas de disponibilidad. Para más información sobre las zona de disponibilidad y las máquinas virtuales, consulte Compatibilidad de zonas de disponibilidad.

// 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

Implemente máquinas virtuales entre zonas de disponibilidad o use Virtual Machine Scale Sets Flex con zonas*

Al crear máquinas virtuales, use zonas de disponibilidad para proteger las aplicaciones y los datos frente a errores improbables del centro de datos. Para saber más sobre las zonas de disponibilidad para máquinas virtuales, consulte Compatibilidad de zonas de disponibilidad en este documento.

Para saber cómo habilitar la compatibilidad de zonas de disponibilidad al crear una máquina virtual, consulte crear compatibilidad de zonas de disponibilidad.

Para obtener información sobre cómo migrar las máquinas virtuales existentes a la compatibilidad con zonas de disponibilidad, consulte Migración a la compatibilidad con zonas de disponibilidad.

// 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"

Migración de máquinas virtuales mediante conjuntos de disponibilidad a Virtual Machine Scale Sets Flex

Modernice las cargas de trabajo mediante la migración de máquinas virtuales a Virtual Machine Scale Sets Flex.

Con Virtual Machine Scale Sets Flex, puede implementar las máquinas virtuales de una de estas dos maneras:

  • Entre zonas
  • En la misma zona, pero entre dominio de error (FD) y dominios de actualización (UD) automáticamente.

En una aplicación de n niveles, se recomienda que coloque cada capa de aplicación en su propio conjunto de 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)

Use discos administrados para los discos de las máquinas virtuales*

Para mejorar la fiabilidad de las máquinas virtuales en un conjunto de disponibilidad, use discos administrados. Los discos administrados están lo suficientemente aislados entre sí como para evitar puntos únicos de error. Además, los discos administrados no están sujetos a los límites de IOPS de los discos duros virtuales creados en una cuenta de almacenamiento.

// 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

Recuperación ante desastres

Replique máquinas virtuales con Azure Site Recovery

Al replicar máquinas virtuales de Azure con Site Recovery, todos los discos de máquina virtual se replican continuamente de forma asincrónica en la región de destino. Los puntos de recuperación se crean cada pocos minutos, lo que proporciona un objetivo de punto de recuperación (RPO) en minutos. Puede realizar tantos simulacros de recuperación ante desastres como desee, sin que afecte a la aplicación de producción ni a la replicación en curso.

Para aprender a ejecutar un simulacro de recuperación ante desastres, consulte Ejecución de una conmutación por error de prueba.

// 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

Haga copias de seguridad en las máquinas virtuales con el servicio de Azure Backup

El servicio Azure Backup proporciona soluciones sencillas, seguras y rentables tanto para realizar copias de seguridad de datos de la nube de Microsoft Azure como para recuperarlos. Para más información, consulte ¿Qué es el servicio de Azure Backup?.

// 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

Rendimiento

Hospede aplicaciones y datos de bases de datos en un disco de datos

Un disco de datos es un disco administrado que está conectado a una máquina virtual. Use el disco de datos para almacenar los datos de aplicación u otros datos que necesite conservar. Los discos de datos se registran como unidades SCSI y se etiquetan con una letra elegida por usted. Hospedar los datos en un disco de datos facilita la copia de seguridad o restauración de datos. También puede migrar el disco sin tener que mover toda la máquina virtual y el sistema operativo. Además, puede seleccionar una SKU de disco diferente, con un tipo, tamaño y rendimiento diferentes que cumplan sus requisitos. Para saber más sobre los discos de datos, consulte Discos de datos.

// 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

Las máquinas virtuales de producción deberían usar discos SSD

Los discos SSD prémium ofrecen alto rendimiento y baja latencia para las aplicaciones y cargas de trabajo que requieren un elevado número de operaciones de E/S. Los discos SSD estándar son una opción de almacenamiento rentable y optimizada para cargas de trabajo que necesiten un rendimiento constante con un volumen de IOPS inferior.

Se recomienda que no haga lo siguiente:

  • Use discos HDD estándar para escenarios de desarrollo y pruebas, y cargas de trabajo menos críticas a un costo más bajo.
  • Use discos SSD prémium en lugar de discos HDD estándar en sus máquinas virtuales de capacidades prémium. Para cada instancia única de máquina virtual que use almacenamiento prémium para todos sus discos de datos y de sistema operativo, Azure garantiza una conectividad de al menos el 99,9 %.

Si quiere actualizar de discos HDD estándar a discos SSD prémium, considere los siguientes puntos:

  • La actualización requiere reiniciar la máquina virtual y este proceso tarda de 3 a 5 minutos en completarse.
  • Si las máquinas virtuales de la lista son máquinas virtuales de producción críticas para la misión, debe sopesar la mejora de la disponibilidad frente al costo de los discos prémium.

Para más información sobre los discos administrados de Azure y los tipos de discos, consulte Tipos de discos administrados de 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)

Habilite las redes aceleradas (AccelNet)

AccelNet habilita la virtualización de E/S de raíz única (SR-IOV) en una máquina virtual, lo que mejora considerablemente su rendimiento en la red. Este método de alto rendimiento omite el host de la ruta de acceso de datos, lo que reduce la latencia, la inestabilidad y el uso de la CPU para las cargas de trabajo de red más exigentes en los tipos de VM admitidos.

Para más información sobre las redes aceleradas, consulte Redes aceleradas

// 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

Cuando AccelNet esté habilitado, debe actualizar manualmente el controlador NIC de GuestOS

Con AccelNet, la interfaz predeterminada de Azure Virtual Network en GuestOS se reemplaza por una interfaz Mellanox. Como resultado, el controlador NIC de GuestOS lo proporciona Mellanox, un proveedor de terceros. Aunque las imágenes de Marketplace mantenidas por Microsoft se ofrecen con la versión más reciente de los controladores Mellanox, una vez implementada la máquina virtual, deberá actualizar manualmente el controlador NIC de GuestOS cada seis meses.

// cannot-be-validated-with-arg

Administración

Revise las máquinas virtuales en estado detenido

Las instancias de máquina virtual pasan por diferentes estados, incluidos los estados de aprovisionamiento y energía. Si una máquina virtual está en estado Detenido, podría estar teniendo una incidencia o ya no ser necesaria y haberse quitado para reducir costos.

// 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

Use configuraciones de mantenimiento para la máquina virtual

Para asegurarse de que las actualizaciones o interrupciones de la máquina virtual se realizan en un periodo de tiempo planeado, use la configuración de mantenimiento para programar y administrar las actualizaciones. Para más información sobre cómo administrar las actualizaciones de máquinas virtuales con configuraciones de mantenimiento, consulte Administración de actualizaciones de máquinas virtuales con configuraciones de mantenimiento.

// 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

Seguridad

Las máquinas virtuales no deberían tener una IP pública asociada directamente

Si una máquina virtual requiere conectividad saliente a Internet, se recomienda usar NAT Gateway o Azure Firewall. NAT Gateway y Azure Firewall ayudan a aumentar la seguridad y resistencia del servicio, ya que ambos tienen una disponibilidad mayor y puertos de traducción de direcciones de red de origen (SNAT). Para la conectividad entrante de Internet, se recomienda usar una solución de equilibrio de carga, como Azure Load Balancer y 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

Las interfaces de red de máquinas virtuales tienen asociado un grupo de seguridad de red (NSG)*

Se recomienda asociar un NSG a una subred o a una interfaz de red, pero no a ambas. Ya que las reglas de un NSG asociado a una subred pueden entrar en conflicto con las reglas de un NSG asociado a una interfaz de red, puede tener problemas de comunicación inesperados que necesitarían solución. Para más información, consulte Tráfico dentro de la subred.

// 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)

El reenvío de IP solo debería habilitarse para dispositivos de red virtuales

El reenvío IP permite a la interfaz de red de la máquina virtual:

  • Recibir tráfico de red no destinado a una de las direcciones IP asignadas a cualquiera de las configuraciones de IP asignadas a la interfaz de red.

  • Enviar tráfico de red con una dirección IP de origen diferente de la asignada a una de las configuraciones de IP de la interfaz de red.

La configuración de reenvío de IP debe habilitarse para cada interfaz de red conectada a la máquina virtual que recibe el tráfico a reenviar. Una máquina virtual puede reenviar el tráfico si tiene tanto una como varias interfaces de red conectadas. Aunque el reenvío IP es una configuración de Azure, la máquina virtual también debe ejecutar una aplicación capaz de reenviar el tráfico, como aplicaciones de firewall, de optimización de WAN o de equilibrio de carga.

Para saber cómo habilitar o deshabilitar el reenvío de IP, consulte Habilitar o deshabilitar el reenvío 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

El acceso de red al disco de máquina virtual debería estar establecido en “Deshabilitar el acceso público y habilitar el acceso privado”

Se recomienda establecer el acceso de red de disco de máquina virtual en “Deshabilitar el acceso público y habilitar el privado” y crear un punto de conexión privado. Para información sobre cómo crear un punto de conexión privado, consulte Creación de un punto de conexión privado.

// 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

Habilite el cifrado del disco y de los datos en reposo de forma predeterminada

Hay varios tipos de cifrado disponibles para los discos administrados, incluidos Azure Disk Encryption (ADE), el cifrado del lado servidor (SSE) y el cifrado en el host.

  • Azure Disk Encryption ayuda a custodiar y proteger sus datos con el fin de satisfacer los compromisos de cumplimiento y seguridad de su organización.
  • El cifrado de servidor de Azure Disk Storage (también denominado cifrado en reposo o cifrado de Azure Storage) cifra automáticamente los datos almacenados en discos administrados de Azure (discos de datos y del sistema operativo) al guardarlos en los clústeres de almacenamiento.
  • El cifrado en el host garantiza que los datos almacenados en el host de máquina virtual que hospeda la máquina virtual se cifran en reposo y se transmiten cifrados a los clústeres de almacenamiento.
  • El cifrado de discos confidenciales enlaza las claves de cifrado de disco al TPM de la máquina virtual y hace que el contenido de disco protegido solo esté accesible para la máquina virtual.

Para más información sobre las opciones de cifrado de disco administrado, consulte Información general sobre las opciones de cifrado de disco administrado.

// under-development

Redes

Los servidores DNS deberían estar configurados en el nivel de red virtual

Configure el servidor DNS en la red virtual para evitar inconsistencias de resolución de nombres en todo el entorno. Para más información sobre la resolución de nombres para recursos en redes virtuales de Azure, consulte Resolución de nombres para recursos y máquinas virtuales Azure.

// 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

Storage

Los discos compartidos solo deberían habilitarse en servidores en clúster

Los discos compartidos de Azure son una característica de los discos administrados de Azure que permite conectar un disco administrado a varias máquinas virtuales al mismo tiempo. Cuando adjunta un disco administrado a varias máquinas virtuales, puede implementar nuevas aplicaciones en clúster o migrar las existentes a Azure. Los discos compartidos solo se deben usar en aquellas situaciones en las que el disco se asigna a más de un miembro de máquina virtual de un clúster.

Para más información sobre cómo habilitar discos compartidos para discos administrados, consulte Habilitar disco compartido.

// 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

Cumplimiento normativo

Compruebe que las máquinas virtuales cumplan con las directivas de Azure

Es importante proteger la máquina virtual (VM) para las aplicaciones que se ejecutan. Proteger las máquinas virtuales puede suponer que se incluyan uno o varios servicios y características de Azure que abarcan un acceso seguro a las máquinas virtuales y al almacenamiento seguro de los datos. Para más información sobre cómo proteger la máquina virtual y las aplicaciones, consulte Controles de cumplimiento regulatorio de Azure Policy para Azure Virtual Machines.

// 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

Supervisión

Habilitar VM Insights

Habilite VM Insights para obtener más visibilidad del estado y rendimiento de las máquinas virtuales. VM Insights informa sobre el rendimiento y el estado de las máquinas virtuales y los conjuntos de escalado de máquinas virtuales, supervisando sus procesos en ejecución y las dependencias de otros recursos. VM Insights le ayuda a ofrecer un rendimiento predecible y la disponibilidad de las aplicaciones vitales mediante la identificación de cuellos de botella de rendimiento y problemas de red. Insights también puede ayudarle a entender si un problema está relacionado con otras dependencias.

// 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)

Configuración de las opciones de diagnóstico para todos los recursos de Azure

Las métricas de plataforma se envían automáticamente a las métricas de Azure Monitor, de manera predeterminada y sin configurar. Los registros de plataforma proporcionan información detallada de diagnóstico y auditoría para los recursos de Azure y la plataforma Azure de la que dependen. Pertenecen a uno de los siguientes tipos:

  • Registros de recursos, que no se recopilan hasta que se enrutan a un destino.
  • Registros de actividad, que existen por su cuenta pero pueden enrutarse a otras ubicaciones.

Cada recurso de Azure necesita su propia configuración de diagnóstico, que establece los siguientes criterios:

  • Orígenes, el tipo de datos de métricas y registros para enviar a destinos definidos en la configuración. Los tipos disponibles varían según el tipo de recurso.
  • Destinos: uno o más destinos a los que enviar.

Cada configuración de diagnóstico puede definir un único destino. Si quiere enviar datos a más de un tipo de destino determinado (por ejemplo, dos áreas de trabajo de Log Analytics diferentes), cree varias configuraciones. Cada recurso puede tener hasta cinco configuraciones de diagnóstico.

Para más información, consulte Configuración de diagnóstico en 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

Compatibilidad de zonas de disponibilidad

Las zonas de disponibilidad de Azure son al menos tres grupos de centros de datos físicamente independientes dentro de cada región de Azure. Los centros de datos de cada zona están equipados con infraestructura de alimentación, refrigeración y red independientes. En el caso de un error en la zona local, las zonas de disponibilidad están diseñadas de manera que, si se ve afectada una zona, los servicios, la capacidad y la alta disponibilidad regionales serán proporcionadas por las dos zonas restantes.

Estos errores pueden abarcar desde errores de software y hardware hasta eventos como terremotos, inundaciones e incendios. La tolerancia a los errores se logra con la redundancia y el aislamiento lógico de los servicios de Azure. Para más información sobre las zonas de disponibilidad en Azure, consulte Regiones y zonas de disponibilidad.

Los servicios habilitados para zonas de disponibilidad de Azure están diseñados para proporcionar el nivel adecuado de confiabilidad y flexibilidad. Se pueden configurar de dos maneras. Pueden tener redundancia de zona, con una replicación automática entre zonas o ser zonales, con instancias ancladas a una zona específica. También puede combinar ambos enfoques. Para más información sobre la arquitectura zonal frente a la arquitectura con redundancia de zona, consulte Recomendaciones para el uso de zonas de disponibilidad y regiones.

Las máquinas virtuales admiten zonas de disponibilidad con tres zonas de disponibilidad por región de Azure admitida y también son zonales y tienen redundancia de zona. Para más información, consulte elsoporte para zonas de disponibilidad. El cliente es responsable de configurar y migrar sus máquinas virtuales para la disponibilidad.

Para obtener más información sobre las opciones de preparación de la zona de disponibilidad, consulte:

Prerrequisitos

Mejoras de SLA

Dado que las zonas de disponibilidad son físicamente independientes y proporcionan distintas fuentes de alimentación, red y refrigeración, los Acuerdos de Nivel de Servicio (acuerdos de nivel de servicio) incrementan. Para obtener más información, consulte Acuerdo de Nivel de Servicio para máquinas virtuales.

Creación de un recurso con zonas de disponibilidad habilitadas

Para empezar, cree una máquina virtual (VM) con la zona de disponibilidad habilitada desde las siguientes opciones de implementación:

Compatibilidad con la conmutación por error zonal

Puede configurar máquinas virtuales para la conmutación por error a otra zona mediante el servicio Site Recovery. Para obtener más información, consulte Site Recovery.

Tolerancia a errores

Las máquinas virtuales pueden conmutar por error a otro servidor de un clúster, reiniciando el sistema operativo de la máquina virtual en el nuevo servidor. Debe hacer referencia al proceso de conmutación por error para la recuperación ante desastres, recopilar máquinas virtuales en el planeamiento de la recuperación y ejecutar simulacros de recuperación ante desastres para asegurarse de que su solución de tolerancia a errores sea correcta.

Para obtener más información, consulte los procesos de Site Recovery.

Experiencia a nivel de zona

Durante una interrupción en toda la zona, es de esperar una breve degradación del rendimiento hasta que la recuperación automática del servicio de máquina virtual vuelva a equilibrar la capacidad subyacente para ajustarse a las zonas en buen estado. Esta recuperación automática no depende de la restauración de la zona. Se espera que el estado de recuperación automática del servicio administrado por Microsoft compense por una zona perdida mediante el uso de la capacidad de otras zonas.

También debe prepararse para la posibilidad de que haya una interrupción de toda una región. Si una región completa experimentara una interrupción del servicio, las copias con redundancia local de los datos estarían temporalmente no disponibles. Si la replicación geográfica está habilitada, se almacenan en otra región tres copias de los blobs y las tablas de Azure Storage. En caso de una interrupción completa en una región o de un desastre en el que la región primaria no sea recuperable, Azure reasignará todas las entradas DNS a la región de replicación geográfica.

Preparación y recuperación de interrupciones de zona

Se proporcionan las siguientes orientaciones para las máquinas virtuales de Azure en el caso de una interrupción del servicio en toda una región donde se ha implementado la aplicación de máquina virtual de Azure:

Diseño de baja latencia

Entre regiones (región secundaria), Entre suscripciones (versión preliminar) y Entre zonas (versión preliminar) están disponibles para tener en cuenta al diseñar una solución de máquina virtual de baja latencia. Para obtener más información sobre estas opciones, consulte los métodos de restauración admitidos.

Importante

Al no participar en la implementación compatible con la zona, se prescinde de la protección frente al aislamiento de los errores subyacentes. Al usar SKU que no admiten zonas de disponibilidad o no participar en la configuración de zona de disponibilidad, esto provoca que la dependencia de los recursos no obedezca a la selección de ubicación y separación de zonas (incluidas las dependencias subyacentes de estos recursos). No se debe esperar que estos recursos sobrevivan a escenarios de zona inactiva. Las soluciones que aprovechan estos recursos deben definir una estrategia de recuperación ante desastres y configurar una recuperación de la solución en otra región.

Técnicas de implementación segura

Al optar por el aislamiento de zonas de disponibilidad, debe usar técnicas de implementación seguras para el código y las actualizaciones de la aplicación. Además de configurar Azure Site Recovery e implementar cualquiera de las siguientes técnicas de implementación seguras para máquinas virtuales:

A medida que Microsoft realiza periódicamente actualizaciones de mantenimiento planeadas, puede haber instancias poco frecuentes cuando estas actualizaciones requieren un reinicio de la máquina virtual para aplicar las actualizaciones necesarias a la infraestructura subyacente. Para obtener más información, consulte consideraciones sobre disponibilidad durante el mantenimiento programado.

Antes de actualizar el siguiente conjunto de nodos de otra zona, debe realizar las siguientes tareas:

  • Compruebe el panel de Azure Service Health para ver el estado del servicio de máquinas virtuales para las regiones esperadas.
  • Asegúrese de que la replicación esté habilitada en las máquinas virtuales.

Soporte técnico para la migración a la zona de disponibilidad

Para obtener información sobre cómo migrar a la compatibilidad con zonas de disponibilidad, consulte Migración de Virtual Machines y Virtual Machine Scale Sets a la compatibilidad con zonas de disponibilidad.

Recuperación ante desastres entre regiones y continuidad empresarial

La recuperación ante desastres (DR) consiste en recuperarse de eventos de alto impacto, como desastres naturales o implementaciones con errores, lo que produce tiempo de inactividad y pérdida de datos. Independientemente de la causa, el mejor remedio para un desastre es un plan de recuperación ante desastres bien definido y probado y un diseño de aplicaciones que apoye activamente la recuperación ante desastres. Antes de empezar a pensar en la creación del plan de recuperación ante desastres, vea Recomendaciones para diseñar una estrategia de recuperación ante desastres.

En lo que respecta a la recuperación ante desastres, Microsoft usa el modelo de responsabilidad compartida. En un modelo de responsabilidad compartida, Microsoft garantiza que la infraestructura de línea base y los servicios de plataforma estén disponibles. Al mismo tiempo, muchos servicios de Azure no replican automáticamente datos ni se revierten desde una región con errores para realizar la replicación cruzada en otra región habilitada. Para esos servicios, usted es el responsable de configurar un plan de recuperación ante desastres que funcione para la carga de trabajo. La mayoría de los servicios que se ejecutan en ofertas de plataforma como servicio (PaaS) de Azure proporcionan características e instrucciones para admitir la recuperación ante desastres y puede usar características específicas del servicio para admitir la recuperación rápida para ayudar a desarrollar el plan de recuperación ante desastres.

Puede usar la restauración entre regiones para restaurar máquinas virtuales de Azure a través de regiones emparejadas. Con la restauración entre regiones, puede restaurar todas las VM de Azure del punto de recuperación seleccionado si la copia de seguridad se realiza en la región secundaria. Para obtener más información sobre la restauración entre regiones, consulte la entrada de fila de tabla Entre regiones en nuestras opciones de restauración.

Recuperación ante desastres en la geografía de varias regiones

En el caso de una interrupción del servicio en toda la región, Microsoft trabaja diligentemente para restaurar el servicio de máquina virtual. Sin embargo, debe confiar en otras estrategias de copia de seguridad específicas de la aplicación para lograr el máximo nivel de disponibilidad. Para obtener más información, consulte la sección sobre las estrategias de datos para la recuperación ante desastres.

Detección, notificación y administración de interrupciones

El hardware o la infraestructura física de la máquina virtual pueden producir un error inesperado. Los errores inesperados pueden incluir errores de la red local, errores de los discos locales u otros errores de nivel de bastidor. Cuando se detecta, la plataforma de Azure migra (recupera) automáticamente la máquina virtual a una máquina física en estado correcto en el mismo centro de datos. Durante el procedimiento de recuperación, las máquinas virtuales experimentan tiempos de inactividad (reinicio) y, en algunos casos, pérdidas de la unidad temporal. El sistema operativo y los discos de datos asociados siempre se conservan.

Para obtener información más detallada sobre las interrupciones del servicio de máquina virtual, consulte la guía de recuperación ante desastres.

Configuración de la recuperación ante desastres y la detección de interrupciones

Al configurar la recuperación ante desastres para máquinas virtuales, comprenda lo que proporciona Azure Site Recovery. Habilite la recuperación ante desastres para máquinas virtuales con estos métodos:

Recuperación ante desastres en una sola región geográfica

Con la configuración de la recuperación ante desastres, las máquinas virtuales de Azure se replican continuamente en una región de destino diferente. Si se produce una interrupción, puede conmutar por error las máquinas virtuales en la región secundaria y acceder a ellas desde allí.

Al replicar máquinas virtuales de Azure con Site Recovery, todos los discos de máquina virtual se replican continuamente de forma asincrónica en la región de destino. Los puntos de recuperación se crean cada pocos minutos, lo que le concede un objetivo de punto de recuperación (RPO) en minutos. Puede realizar tantos simulacros de recuperación ante desastres como desee, sin que afecte a la aplicación de producción ni a la replicación en curso. Para más información, consulte Ejecución de un simulacro de recuperación ante desastres en Azure.

Para obtener más información, consulte componentes de arquitectura de máquinas virtuales de Azure y emparejamiento de regiones.

Capacidad y resistencia proactiva de la recuperación ante desastres

Microsoft y sus clientes operan bajo el modelo de responsabilidad compartida. La responsabilidad compartida significa que en el caso de la DR habilitada por el cliente (servicios responsabilidad del cliente), debe abordar la DR para cualquier servicio que implemente y controle. Para asegurarse de que la recuperación sea proactiva, debe siempre implementar previamente regiones secundarias, ya que no hay ninguna garantía de que haya capacidad en el momento del impacto para aquellos que no las hayan asignado previamente.

Para implementar máquinas virtuales, puede usar el modo de orquestación flexible en Virtual Machine Scale Sets. Todos los tamaños de máquina virtual se pueden usar con el modo de orquestación flexible. El modo de orquestación flexible también ofrece garantías de alta disponibilidad (hasta 1 000 máquinas virtuales) mediante la propagación de máquinas virtuales entre dominios de error en una región o en una zona de disponibilidad.

Pasos siguientes