Confiabilidade nas Máquinas Virtuais
Este artigo contém recomendações de confiabilidade específicas para Máquinas Virtuais, bem como informações detalhadas sobre a resiliência regional de VM com zonas de disponibilidade e recuperação de desastre entre regiões e continuidade do negócio.
Para ter uma visão geral arquitetônica da confiabilidade no Azure, confira Confiabilidade do Azure.
Recomendações de confiabilidade
Essa seção contém recomendações para obter resiliência e disponibilidade. Cada recomendação se enquadra em uma das duas categorias:
Os itens de integridade abrangem áreas como itens de configuração e a função adequada dos principais componentes que compõem a carga de trabalho do Azure, como configurações de recursos do Azure, dependências de outros serviços e assim por diante.
Os itens de risco abrangem áreas como requisitos de disponibilidade e recuperação, teste, monitoramento, implantação e outros itens que, se deixados não resolvidos, aumentam as chances de problemas no ambiente.
Matriz de prioridade de recomendações de confiabilidade
Cada recomendação é marcada de acordo com a seguinte matriz de prioridade:
Imagem | Prioridade | Descrição |
---|---|---|
Alto | Correção imediata necessária. | |
Médio | Correção dentro de 3 a 6 meses. | |
Baixo | Precisa de revisão. |
Resumo das recomendações de confiabilidade
Alta disponibilidade
Executar cargas de trabalho de produção em duas ou mais VMs usando o VMSS (Conjuntos de Dimensionamento de Máquinas Virtuais do Microsoft Azure) Flex
Para proteger as cargas de trabalho do aplicativo contra o tempo de inatividade devido à indisponibilidade temporária de um disco ou VM, recomendamos executar cargas de trabalho de produção em duas ou mais VMs usando o Conjuntos de Dimensionamento de Máquinas Virtuais Flex.
Para executar cargas de trabalho de produção, você pode usar:
Os Conjuntos de Dimensionamento de Máquinas Virtuais do Microsoft Azure permitem criar e gerenciar um grupo de VMs com balanceamento de carga. O número de instâncias de VM pode aumentar ou diminuir automaticamente em resposta à demanda ou a um agendamento definido.
Zonas de disponibilidades. Para obter informações sobre zonas de disponibilidade e VMs, consulte Suporte à zonas de Disponibilidade.
// 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
Implantar VMs entre zonas de disponibilidade ou usar os Conjuntos de Dimensionamento de Máquinas Virtuais*
Ao criar suas VMs, use zonas de disponibilidade para proteger seus aplicativos e dados contra falhas indesejadas de datacenter. Para obter mais informações sobre zonas de disponibilidade para VMs, consulte Suporte à zona de disponibilidade nesse documento.
Para obter informações sobre como habilitar o suporte a zonas de disponibilidade ao criar sua VM, consulte criar suporte à zona de disponibilidade.
Para obter informações sobre como migrar suas VMs existentes para o suporte à zona de disponibilidade, consulte migrar para a zona de disponibilidade.
// 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"
Migrar VMs usando conjuntos de disponibilidade para Conjuntos de Dimensionamento de Máquinas Virtuais Flex
Modernize suas cargas de trabalho migrando-as de VMs para Conjuntos de Dimensionamento de Máquinas Virtuais Flex.
Com o Conjuntos de Dimensionamento de Máquinas Virtuais Flex, você pode implantar suas VMs de uma das duas maneiras:
- Entre zonas
- Na mesma zona, mas em FDs (domínios de falha) e domínios de atualização (UD) automaticamente.
Em um aplicativo de N camadas, é recomendável colocar cada camada de aplicativo em seu próprio Conjuntos de Dimensionamento de Máquinas Virtuais 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)
Usar discos gerenciados para discos de VM*
Para fornecer melhor confiabilidade para VMs em um conjunto de disponibilidade, use discos gerenciados. Os discos gerenciados estão suficientemente isolados uns dos outros para evitar pontos únicos de falha. Além disso, os discos gerenciados não estão sujeitos a limites de IOPS de VHDs criados em uma conta de armazenamento.
// 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
Recuperação de desastre
Replique VMs usando o Azure Site Recovery
Quando você replicar VMs do Azure usando o Azure Site Recovery, todos os discos de VM serão replicados continuamente para a região de destino assincronamente. Os pontos de recuperação são criados a cada poucos minutos, o que fornece um RPO (Objetivo de Ponto de Recuperação) na ordem dos minutos. Você pode realizar simulações de recuperação de desastre quantas vezes quiser sem afetar o aplicativo de produção ou a replicação contínua.
Para saber como executar uma análise de recuperação de desastre, consulte Executar um failover de teste.
// 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
Fazer backup de dados em suas VMs com o serviço de Backup do Azure
O serviço de Backup do Azure fornece soluções simples, seguras e econômicas para fazer backup de seus dados e recuperá-los da nuvem do Microsoft Azure. Para obter mais informações, consulte O que é o serviço de Backup do 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
Desempenho
Hospedar dados de aplicativo e de banco de dados em um disco de dados
Um disco de dados é um disco gerenciado anexado a uma VM. Use o disco de dados para armazenar dados do aplicativo ou outros dados importantes. Discos de dados são registrados como unidades SCSI e rotulados com a letra que você escolher. Hospedar seus dados em um disco de dados facilita o backup ou a restauração deles. Você também pode migrar o disco sem precisar mover toda a VM e o Sistema Operacional. Além disso, você pode selecionar um SKU de disco diferente, com tipo, tamanho e desempenho diferentes que atendam aos seus requisitos. Para obter mais informações sobre discos de dados, consulte Discos de Dados.
// 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
As VMs de produção devem usar discos SSD
Os discos SSD Premium dão suporte a discos de alto desempenho e baixa latência para aplicativos com uso intensivo de E/S e cargas de trabalho de produção. Os discos SSD Standard são uma opção econômica de armazenamento otimizado para cargas de trabalho que necessitam de desempenho consistente em níveis de IOPS mais baixos.
É recomendável que você faça o seguinte:
- Use discos HDD Standard para cenários de Desenvolvimento/Teste e cargas de trabalho menos críticas com o menor custo.
- Use discos SSD Premium em vez de discos HDD Standard com suas VMs com capacidade premium. Para qualquer VM de Instância Única usando armazenamento premium para todos os discos de dados e de sistema operacional, o Azure garante a Conectividade de Máquina Virtual de pelo menos 99,9%.
Se você quiser atualizar do HDD Standard para discos SSD Premium, considere os seguintes problemas:
- A atualização requer uma reinicialização da VM e esse processo leva 3 a 5 minutos para ser concluído.
- Se as VMs na lista forem VMs de produção críticas, avalie os benefícios da disponibilidade aprimorada confrontando-os com o custo de discos Premium.
Para obter mais informações sobre discos gerenciados do Azure e tipos de discos, consulte Tipos de disco gerenciado do 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)
Habilitar a rede acelerada (AccelNet)
A AccelNet permite SR-IOV (virtualização de E/S de raiz única) para uma VM, melhorando muito seu desempenho de rede. Esse caminho de alto desempenho ignora o host do caminho de dados, o que reduz a latência, a tremulação e a utilização da CPU para as cargas de trabalho de rede mais exigentes nos tipos de VM compatíveis.
Para obter mais informações sobre rede acelerada, confira Rede acelerada
// 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
Quando a AccelNet está habilitada, você deve atualizar manualmente o driver NIC GuestOS
Quando a AccelNet está habilitada, a interface de Rede Virtual padrão do Azure no GuestOS é substituída por uma interface Mellanox. Como resultado, o driver NIC GuestOS é fornecido pela Mellanox, fornecedora de terceiros. Embora as imagens do Marketplace mantidas pela Microsoft sejam oferecidas com a versão mais recente dos drivers Mellanox, depois que a VM é implantada, você precisa atualizar manualmente o driver NIC GuestOS a cada seis meses.
// cannot-be-validated-with-arg
Gerenciamento
Examinar VMs no estado parado
As instâncias de VM passam por estados diferentes, incluindo estados de provisionamento e energia. Se uma VM estiver em um estado parado, a VM pode estar enfrentando um problema ou pode não ser mais necessária e poderá ser removida para ajudar a reduzir os custos.
// 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
Usar configurações de manutenção para a VM
Para garantir que as atualizações/interrupções da VM sejam feitas em um período planejado, use as definições de configuração de manutenção para agendar e gerenciar atualizações. Para obter mais informações sobre como gerenciar atualizações de VM com configurações de manutenção, consulte Gerenciando atualizações de VM com Configurações de Manutenção.
// 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
Segurança
As VMs não devem ter um IP público associado diretamente
Se uma VM exigir conectividade com a Internet de saída, é recomendável que você use o Gateway da NAT ou o Firewall do Azure. O Gateway da NAT ou o Firewall do Azure ajudam a aumentar a segurança e a resiliência do serviço, pois ambos os serviços têm disponibilidade maior e portas SNAT (Conversão de Endereços de Rede de Origem). Para conectividade com a Internet de entrada, é recomendável que você use uma solução de balanceamento de carga, como o Azure Load Balancer e o Gateway de Aplicativo.
// 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
Os adaptadores de rede da VM têm um NSG (Grupo de Segurança de Rede) associado*
É recomendável associar um NSG a uma sub-rede ou a um adaptador de rede, mas não a ambos. Como as regras em um NSG associado a uma sub-rede podem entrar em conflito com as regras em um NSG associado a um adaptador de rede, você pode ter problemas de comunicação inesperados que exigem a solução de problemas. Para obter mais informações, consulte Tráfego intra-sub-rede.
// 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)
O encaminhamento de IP só deve ser habilitado para soluções de virtualização de rede
O encaminhamento de IP permite que o adaptador de rede da máquina virtual:
Receba o tráfego de rede não destinado a um dos endereços IP atribuídos a qualquer uma das configurações de IP atribuídas ao adaptador de rede.
Envie o tráfego de rede com um endereço IP de origem diferente daquele atribuído a uma das configurações de IP do adaptador de rede.
A seguinte configuração de IP deve ser habilitada para cada interface de rede conectada à VM que recebe o tráfego que a VM precisa encaminhar. Uma VM poderá encaminhar tráfego se tiver vários adaptadores de rede ou um único adaptador de rede conectado a ela. Embora o encaminhamento de IP seja uma configuração do Azure, a VM também deve executar um aplicativo capaz de encaminhar o tráfego, como, por exemplo, firewall, otimização de WAN e aplicativos de balanceamento de carga.
Para saber como habilitar ou desabilitar o encaminhamento de IP, consulte Habilitar ou desabilitar o encaminhamento de 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
O acesso à rede para o disco da VM deve ser definido como “Desabilitar o acesso público e habilitar o acesso privado”
É recomendável definir o acesso à rede de disco da VM como "Desabilitar o acesso público e habilitar o acesso privado" e criar um ponto de extremidade privado. Para saber como criar um ponto de extremidade privado, confira Criar um ponto de extremidade 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
Habilitar a criptografia de disco e a criptografia de dados inativos por padrão
Há vários tipos de criptografia disponíveis para seus discos gerenciados, incluindo ADE (Azure Disk Encryption), SSE (criptografia do lado do servidor) e criptografia no host.
- O Azure Disk Encryption ajuda a proteger seus dados e a atender aos compromissos de conformidade e segurança da sua organização.
- A criptografia do servidor do Armazenamento em Disco do Azure (também conhecida como criptografia de dados inativos ou criptografia do Armazenamento do Azure) criptografa automaticamente os dados armazenados nos discos gerenciados do Azure (SO e discos de dados) quando eles persistem nos clusters de armazenamento.
- A criptografia no host assegura que os dados armazenados no host da VM que hospeda sua VM sejam criptografados inativo e os fluxos sejam criptografados para os clusters de armazenamento.
- A criptografia de disco confidencial associa chaves de criptografia de disco ao TPM da VM e torna o conteúdo do disco protegido acessível somente para a VM.
Para obter mais informações sobre as opções de criptografia de disco gerenciado, consulte Visão geral das opções de criptografia de disco gerenciado.
// under-development
Rede
Os servidores DNS devem ser configurados no nível da Rede Virtual
Configure o Servidor DNS na Rede Virtual para evitar inconsistências de resolução de nomes em todo o ambiente. Para obter mais informações sobre a resolução de nomes para recursos em redes virtuais do Azure, consulte Resolução de nomes para VMs e serviços de nuvem.
// 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
Armazenamento
Os discos compartilhados só devem ser habilitados em servidores clusterizados
Os discos compartilhados do Azure são um recurso para os discos gerenciados do Azure, que permitem anexar um disco gerenciado a várias VMs simultaneamente. Anexar um disco gerenciado a várias VMs permite implantar novos aplicativos clusterizados ou migrar os existentes para o Azure. Os discos compartilhados só devem ser usados nas situações em que o disco é atribuído a mais de um membro de VM de um cluster.
Para saber mais sobre como habilitar discos compartilhados para discos gerenciados, consulte Habilitar disco compartilhado.
// 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
Conformidade
Verifique se suas VMs estão em conformidade com as Políticas do Azure
É importante proteger a sua máquina virtual (VM) para os aplicativos que são executados. Proteger suas VMs pode incluir um ou mais serviços do Azure e recursos que abrangem o acesso seguro a suas máquinas virtuais e armazenamento seguro de seus dados. Para obter mais informações sobre como manter sua VM e aplicativos seguros, consulte Controles de Conformidade Regulatória do Azure Policy para as Máquinas Virtuais do 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
Monitoramento
Habilitar insights da VM
Habilite o VM Insights para obter mais visibilidade na integridade e no desempenho de seu conjunto de dimensionamento de máquinas virtuais. O VM Insights fornece informações sobre o desempenho e a integridade de suas VMs e conjuntos de dimensionamento de máquinas virtuais, monitorando seus processos em execução e dependências em outros recursos. O VM Insights pode ajudar a fornecer desempenho e disponibilidade previsíveis de aplicativos vitais identificando gargalos de desempenho e problemas de rede. Os Insights podem ajudar a entender se um problema está relacionado a outras dependências.
// 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)
Definir configurações de diagnóstico para todos os recursos do Azure
As métricas de plataforma são enviadas automaticamente e sem configuração para métricas do Azure Monitor. Os logs de plataforma apresentam informações detalhadas de diagnóstico e auditoria para recursos do Azure e para a plataforma do Azure da qual eles dependem e são um dos tipos a seguir:
- Os logs de recursos que não são coletados até que sejam roteados para um destino.
- Os logs de atividades que existem por conta própria, mas podem ser roteados para outros locais.
Cada recurso do Azure requer sua própria configuração de diagnóstico, o que define os seguintes critérios:
- Fontes o tipo de dados de log e métrica a ser enviado aos destinos definidos na configuração. Os tipos disponíveis variam de acordo com o tipo de recurso.
- Destinos: um ou mais destinos para envio.
Uma única configuração de diagnóstico pode definir apenas um de cada um dos destinos. Se desejar enviar dados para mais de um tipo de destino específico (por exemplo, dois workspaces do Log Analytics diferentes), crie várias configurações. Cada recurso pode ter até cinco configurações de diagnóstico.
Para mais informações, confira Configurações de diagnóstico no 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
Suporte à zona de disponibilidade
As zonas de disponibilidade do Azure são pelo menos três grupos de datacenters separados fisicamente em cada região do Azure. Os datacenters dentro de cada zona são equipados com energia, resfriamento e infraestrutura de rede independentes. Em caso de falha de uma zona local, as zonas de disponibilidade foram projetadas de modo que, se uma zona é afetada, os serviços regionais, a capacidade e a alta disponibilidade têm suporte nas duas zonas restantes.
As falhas podem variar de falhas de software e hardware a eventos como terremotos, inundações e incêndios. A tolerância a falhas é obtida devido à redundância e ao isolamento lógico dos serviços do Azure. Para obter informações detalhadas sobre as zonas de disponibilidade no Azure, confira Regiões e zonas de disponibilidade.
Os serviços habilitados para zonas de disponibilidade do Azure foram projetados para fornecer o nível ideal de resiliência e flexibilidade. Eles podem ser configurados de duas maneiras. Eles podem ter redundância de zona, com replicação automática entre zonas, ou podem ser zonais, com instâncias fixadas em uma zona específica. Você também pode combinar essas abordagens. Para obter mais informações sobre a arquitetura zonal versus com redundância de zona, confira Recomendações para usar zonas e regiões de disponibilidade.
As máquinas virtuais dão suporte a zonas de disponibilidade com três zonas de disponibilidade por região do Azure com suporte e também são com redundância de zona e zonal. Para obter mais informações, confira suporte a zonas de disponibilidade. O cliente é responsável por configurar e migrar suas máquinas virtuais para disponibilidade.
Para saber mais sobre as opções de preparação da zona de disponibilidade, confira:
- Confira as opções de disponibilidade para VMs
- Revise o serviço de zona de disponibilidade e o suporte à região
- Migrar VMs existentes para zonas de disponibilidade
Pré-requisitos
Os SKUs de sua máquina virtual devem estar disponíveis nas zonas de sua região. Para revisar quais regiões dão suporte a zonas de disponibilidade, confira a lista de regiões com suporte.
Os SKUs de sua VM devem estar disponíveis nas zonas de sua região. Para verificar a disponibilidade da SKU de VM, use um dos seguintes métodos:
- Use o PowerShell para verificar a disponibilidade da SKU de VM.
- Use a CLI do Azure para verificar a disponibilidade da SKU de VM.
- Acesse Serviços fundamentais.
Aprimoramentos do SLA
Como as zonas de disponibilidade são fisicamente separadas e fornecem fonte de energia, rede e refrigeração distintas, os SLAs (Contratos de nível de serviço) aumentam. Para saber mais, confira SLA para máquinas virtuais.
Criar um recurso com zonas de disponibilidade habilitadas
Comece criando uma máquina virtual (VM) com a zona de disponibilidade habilitada nas seguintes opções de implantação abaixo:
Suporte a failover zonal
Você pode configurar máquinas virtuais para fazer failover em outra zona usando o serviço Site Recovery. Para obter mais informações, confira Site Recovery.
Tolerância a falhas
As máquinas virtuais podem fazer failover para outro servidor em um cluster, com o sistema operacional da VM reiniciando no novo servidor. Você deve consultar o processo de failover para recuperação de desastre, reunindo máquinas virtuais no planejamento de recuperação e executando exercícios de recuperação de desastre para garantir que sua solução de tolerância a falhas seja bem-sucedida.
Para obter mais informações, confira os processos de recuperação de sites.
Experiência de zona inoperante
Durante uma interrupção em toda a zona, você deve esperar uma breve degradação do desempenho, até que a autocorreção do serviço de máquina virtual reequilibre a capacidade subjacente para se ajustar às zonas íntegras. A autorrecuperação não depende da restauração da zona; espera-se que o estado de auto correção de serviço gerenciado pela Microsoft compense uma zona perdida, usando a capacidade de outras zonas.
Você também deve se preparar para a possibilidade de interrupção de uma região inteira. Se houver uma interrupção de serviço em uma região inteira, as cópias localmente redundantes de seus dados ficarão temporariamente indisponíveis. Se a replicação geográfica estiver habilitada, três cópias adicionais de seus blobs e tabelas de Armazenamento do Microsoft Azure serão armazenadas em uma região diferente. Quando há uma interrupção regional completa ou um desastre no qual a região primária não é recuperável, o Azure remapeia todas as entradas DNS para a região replicada geograficamente.
Preparação e recuperação de interrupção de zona
A orientação a seguir é fornecida para máquinas virtuais do Azure durante uma interrupção do serviço de toda a região onde seu aplicativo de máquina virtual do Azure é implantado:
- Configure o Azure Site Recovery para suas VMs
- Verifique o status do Painel de Integridade do Serviço do Azure se o Azure Site Recovery não tiver sido configurado
- Revise como o Serviço de Backup do Azure funciona para VMs
- Confira a matriz de suporte para backups da VM do Azure
- Determine qual opção e cenário de restauração da VM funciona melhor para seu ambiente
Design de baixa latência
Entre Regiões (região secundária), Assinatura Integrada (versão prévia) e Zona Integrada (versão prévia) são opções disponíveis a serem consideradas ao projetar uma solução de máquina virtual de baixa latência. Para obter mais informações sobre essas opções, confira os métodos de restauração com suporte.
Importante
Ao recusar a implantação com reconhecimento de zona, você abre mão da proteção contra o isolamento de falhas subjacentes. O uso de SKUs que não dão suporte a zonas de disponibilidade ou a recusa da configuração da zona de disponibilidade força a dependência de recursos que não obedecem ao posicionamento e à separação da zona (incluindo dependências subjacentes desses recursos). Não se deve esperar que esses recursos sobrevivam a cenários de zona inativa. As soluções que alavancam tais recursos devem definir uma estratégia de recuperação de desastre e configurar uma recuperação da solução em outra região.
Técnicas de implantação segura
Ao optar pelo isolamento de zonas de disponibilidade, utilize técnicas de implantação seguras para código de aplicativo e atualizações de aplicativos. Além de configurar o Azure Site Recovery e implementar qualquer uma das seguintes técnicas de implantação seguras para VMs:
Como a Microsoft executa atualizações de manutenção planejadas periodicamente, pode haver casos raros em que essas atualizações exijam uma reinicialização de sua máquina virtual para aplicar as atualizações necessárias à infraestrutura subjacente. Para saber mais, confira as considerações de disponibilidade durante a manutenção agendada.
Antes de atualizar o próximo conjunto de nós em outra zona, você deve executar as seguintes tarefas:
- Verifique o Painel de Integridade do Serviço do Azure para obter o status do serviço de máquinas virtuais das regiões esperadas.
- Verifique se a replicação está habilitada em suas VMs.
Migrar para o suporte às zonas de disponibilidade
Para saber como migrar uma VM para o suporte à zona de disponibilidade, consulte Migrar Máquinas Virtuais e Conjuntos de Dimensionamento de Máquinas Virtuais para o suporte à zona de disponibilidade.
- Mover uma VM para outro grupo de recursos ou outra assinatura
- Azure Resource Mover
- Mover as VMs do Azure para as zonas de disponibilidade
- Mover recursos de configuração da manutenção de região
Recuperação de desastre entre regiões e continuidade dos negócios
A DR (recuperação de desastre) trata da recuperação após eventos de alto impacto, como desastres naturais ou implantações com falha, que resultam em tempo de inatividade e perda de dados. Seja qual for a causa, a melhor solução para um desastre é um plano de DR bem definido e testado e um design de aplicativo que dê suporte ativo à DR. Antes de começar a pensar em criar seu plano de recuperação de desastre, confira Recomendações para criar uma estratégia de recuperação de desastre.
Quando o assunto é DR, a Microsoft usa o modelo de responsabilidade compartilhada. Em um modelo de responsabilidade compartilhada, a Microsoft garante que a infraestrutura de linha de base e os serviços de plataforma estejam disponíveis. Ao mesmo tempo, muitos serviços do Azure não replicam dados automaticamente nem retornam de uma região com falha para a replicação cruzada em outra região habilitada. Para esses serviços, você é responsável por configurar um plano de recuperação de desastre que funcione para sua carga de trabalho. A maioria dos serviços executados nas ofertas de PaaS (plataforma como serviço) do Azure fornece recursos e diretrizes para dar suporte à DR. Além disso, você pode usar recursos específicos do serviço para dar suporte a uma recuperação rápida, a fim de ajudar a desenvolver seu plano de DR.
Você pode usar a restauração Entre Regiões para restaurar VMs do Azure por meio de regiões emparelhadas. Com a restauração Entre Regiões, você pode restaurar todas as VMs do Azure para o ponto de recuperação selecionado se o backup for feito na região secundária. Para obter mais informações sobre a restauração Entre Regiões, consulte a entrada da tabela Entre Regiões em nossas opções de restauração.
Recuperação de desastre na geografia de várias regiões
No caso de uma interrupção de serviço em toda a região, a Microsoft trabalha diligentemente para restaurar o serviço da máquina virtual. Porém, você ainda deve contar com outras estratégias de backup específicas ao aplicativo para chegar ao nível mais alto de disponibilidade. Para obter mais informações, consulte a seção sobre Estratégias de Dados para Recuperação de Desastre.
Detecção, notificação e gerenciamento de interrupção
O hardware ou a infraestrutura física da máquina virtual podem falhar inesperadamente. As falhas inesperadas podem incluir falhas na rede local, falhas no disco local ou outras falhas no nível de rack. Quando detectada, a plataforma do Azure migra automaticamente (repara) a máquina virtual para um computador físico íntegro no mesmo datacenter. Durante o procedimento de recuperação, as máquinas virtuais ficarão inativas (reinicialização) e, em alguns casos, perderão a unidade temporária. O sistema operacional e os discos de dados anexados são sempre preservados.
Para obter informações mais detalhadas sobre interrupções de serviço de máquina virtual, confira asdiretrizes de recuperação de desastre.
Configurar a recuperação de desastre e a detecção de interrupções
Ao configurar a recuperação de desastre para máquinas virtuais, entenda o que o Azure Site Recovery fornece. Habilite a recuperação de desastre para máquinas virtuais com os métodos abaixo:
- Configure a recuperação de desastre para uma região do Azure secundária para uma VM do Azure
- Criar um cofre dos Serviços de Recuperação
- Habilite a recuperação de desastre para máquinas virtuais do Linux
- Habilite a recuperação de desastre para máquinas virtuais do Windows
- Failover de máquinas virtuais para outra região
- Failover de máquinas virtuais para a região primária
Recuperação de desastre na geografia de região única
Com a recuperação de desastre configurada, as VMs do Azure são replicadas de maneira contínua para outra região de destino. Se ocorrer uma interrupção, você poderá fazer failover das VMs para a região secundária e acessá-las nela.
Quando você replicar VMs do Azure usando a Recuperação de Site, todos os discos de VM serão replicados continuamente para a região de destino assincronamente. Os pontos de recuperação são criados a cada poucos minutos, o que concede um RPO (Objetivo de Ponto de Recuperação) na ordem dos minutos. Você pode realizar simulações de recuperação de desastre quantas vezes quiser sem afetar o aplicativo de produção ou a replicação contínua. Para saber mais, confira Realizar uma análise detalhada da recuperação de desastre para o Azure.
Para obter mais informações, confira componentes arquitetônicos de VMs do Azure e emparelhamento de região.
Capacidade e resiliência proativa de recuperação de desastre
A Microsoft e seus clientes operam ao abrigo do Modelo de Responsabilidade Compartilhada. A responsabilidade compartilhada significa que, para DR habilitada pelo cliente (serviços responsáveis pelo cliente), você deve abordar a DR para qualquer serviço que implemente e controle. Para garantir que a recuperação seja proativa, você sempre deve pré-implantar secundárias porque não há garantia de capacidade no momento do impacto para aqueles que não foram pré-alocados.
Para implantar máquinas virtuais, você pode usar o modo de orquestração flexível em Conjuntos de Dimensionamento de Máquinas Virtuais. Todos os tamanhos da VM podem ser usados com o modo de orquestração flexível. O modo de orquestração flexível também oferece garantias de alta disponibilidade (até 1000 VMs), distribuindo VMs por domínios de falha em uma região ou dentro de uma zona de disponibilidade.