Tillförlitlighet på virtuella datorer

Den här artikeln innehåller specifika tillförlitlighetsrekommendationer för virtuella datorer, samt detaljerad information om regional återhämtning för virtuella datorer med tillgänglighetszoner och haveriberedskap mellan regioner och affärskontinuitet.

En arkitekturöversikt över tillförlitlighet i Azure finns i Azures tillförlitlighet.

Tillförlitlighetsrekommendationer

Det här avsnittet innehåller rekommendationer för att uppnå återhämtning och tillgänglighet. Varje rekommendation ingår i någon av två kategorier:

  • Hälsoobjekt omfattar områden som konfigurationsobjekt och rätt funktion för de huvudkomponenter som utgör din Azure-arbetsbelastning, till exempel Konfigurationsinställningar för Azure-resurser, beroenden för andra tjänster och så vidare.

  • Riskobjekt omfattar områden som tillgänglighets- och återställningskrav, testning, övervakning, distribution och andra objekt som, om de lämnas olösta, ökar risken för problem i miljön.

Prioritetsmatris för tillförlitlighetsrekommendationer

Varje rekommendation markeras i enlighet med följande prioritetsmatris:

Bild Prioritet beskrivning
Högst Omedelbar korrigering krävs.
Medium Åtgärda inom 3–6 månader.
Lägst Måste granskas.

Sammanfattning av tillförlitlighetsrekommendationer

Kategori Prioritet Rekommendation
Hög tillgänglighet Köra produktionsarbetsbelastningar på två eller flera virtuella datorer med Azure Virtual Machine Scale Sets Flex
Distribuera virtuella datorer mellan tillgänglighetszoner eller använd Virtual Machine Scale Sets Flex med zoner
Migrera virtuella datorer med hjälp av tillgänglighetsuppsättningar till Skalningsuppsättningar för virtuella datorer Flex
Använda hanterade diskar för virtuella datordiskar
Haveriberedskap Replikera virtuella datorer med Azure Site Recovery
Säkerhetskopiera data på dina virtuella datorer med Azure Backup-tjänsten
Prestanda Värdprogram och databasdata på en datadisk
Virtuella produktionsdatorer ska använda SSD-diskar
Aktivera accelererat nätverk (AccelNet)
När AccelNet är aktiverat måste du manuellt uppdatera NIC-enheten för GuestOS
Hantering VM-9: Titta efter virtuella datorer i stoppat tillstånd
Använda underhållskonfigurationer för den virtuella datorn
Säkerhet VVM:er bör inte ha en direkt associerad offentlig IP-adress
Virtuella nätverksgränssnitt har en NSG associerad
IP-vidarebefordran bör endast aktiveras för virtuella nätverksinstallationer
Nätverksåtkomst till den virtuella datordisken ska vara inställd på "Inaktivera offentlig åtkomst och aktivera privat åtkomst"
Aktivera diskkryptering och vilande datakryptering som standard
Nätverk Kundens DNS-servrar ska konfigureras på nivån Virtuellt nätverk
Lagring Delade diskar ska endast aktiveras på klustrade servrar
Efterlevnad Se till att dina virtuella datorer är kompatibla med Azure-principer
Övervakning Aktivera VM Insights
Konfigurera diagnostikinställningar för alla Azure-resurser

Hög tillgänglighet

Köra produktionsarbetsbelastningar på två eller flera virtuella datorer med hjälp av Flex för vm-skalningsuppsättningar

För att skydda programarbetsbelastningar från driftstopp på grund av den tillfälliga otillgängligheten för en disk eller virtuell dator rekommenderar vi att du kör produktionsarbetsbelastningar på två eller flera virtuella datorer med Hjälp av Flex för skalningsuppsättningar för virtuella datorer.

Om du vill köra produktionsarbetsbelastningar kan du använda:

  • Skalningsuppsättningar för virtuella Azure-datorer för att skapa och hantera en grupp lastbalanserade virtuella datorer. Antalet VM-instanser kan automatiskt öka eller minska som svar på efterfrågan eller ett definierat schema.

  • Tillgänglighetszoner. Mer information om tillgänglighetszoner och virtuella datorer finns i Stöd för tillgänglighetszoner.

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

Distribuera virtuella datorer mellan tillgänglighetszoner eller använd Virtual Machine Scale Sets Flex med zoner*

När du skapar dina virtuella datorer använder du tillgänglighetszoner för att skydda dina program och data mot osannolika datacenterfel. Mer information om tillgänglighetszoner för virtuella datorer finns i Stöd för tillgänglighetszoner i det här dokumentet.

Information om hur du aktiverar stöd för tillgänglighetszoner när du skapar den virtuella datorn finns i Skapa stöd för tillgänglighetszoner.

Information om hur du migrerar dina befintliga virtuella datorer till stöd för tillgänglighetszoner finns i Migrera till stöd för tillgänglighetszoner.

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

Migrera virtuella datorer med hjälp av tillgänglighetsuppsättningar till Skalningsuppsättningar för virtuella datorer Flex

Modernisera dina arbetsbelastningar genom att migrera dem från virtuella datorer till Virtual Machine Scale Sets Flex.

Med Flex för vm-skalningsuppsättningar kan du distribuera dina virtuella datorer på något av två sätt:

  • Över zoner
  • I samma zon, men över feldomäner (FD) och uppdatera domäner (UD) automatiskt.

I ett N-nivåprogram rekommenderar vi att du placerar varje programnivå i sin egen 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)

Använda hanterade diskar för virtuella datordiskar*

Använd hanterade diskar för att ge bättre tillförlitlighet för virtuella datorer i en tillgänglighetsuppsättning. Hanterade diskar är tillräckligt isolerade från varandra för att undvika enskilda felpunkter. Hanterade diskar omfattas inte heller av IOPS-gränserna för virtuella hårddiskar som skapats i ett lagringskonto.

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

Haveriberedskap

Replikera virtuella datorer med Azure Site Recovery

När du replikerar virtuella Azure-datorer med Site Recovery replikeras alla virtuella datordiskar kontinuerligt till målregionen asynkront. Återställningspunkterna skapas med några minuters mellanrum, vilket ger dig ett mål för återställningspunkt (RPO) i storleksordningen minuter. Du kan utföra haveriberedskapstest så många gånger du vill, utan att påverka produktionsprogrammet eller den pågående replikeringen.

Information om hur du kör ett haveriberedskapstest finns i Köra ett redundanstest.

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

Säkerhetskopiera data på dina virtuella datorer med Azure Backup-tjänsten

Azure Backup tillhandahåller enkla, säkra och kostnadseffektiva lösningar för att säkerhetskopiera dina data och återställa dem från Microsoft Azure-molnet. Mer information finns i Vad är Azure Backup-tjänsten.

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

Prestanda

Värdprogram och databasdata på en datadisk

En datadisk är en hanterad disk som är ansluten till en virtuell dator. Använd datadisken för att lagra programdata eller andra data som du behöver behålla. Datadiskar registreras som SCSI-enheter och är märkta med en bokstav som du väljer. Att vara värd för dina data på en datadisk gör det enkelt att säkerhetskopiera eller återställa dina data. Du kan också migrera disken utan att behöva flytta hela den virtuella datorn och operativsystemet. Du kan också välja en annan disk-SKU med olika typ, storlek och prestanda som uppfyller dina krav. Mer information om datadiskar finns i Datadiskar.

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

Virtuella produktionsdatorer ska använda SSD-diskar

Premium SSD-diskar erbjuder högpresterande diskstöd med låg latens för I/O-intensiva program och produktionsarbetsbelastningar. Standard SSD-diskar är ett kostnadseffektivt lagringsalternativ som är optimerat för arbetsbelastningar som behöver konsekventa prestanda på lägre IOPS-nivåer.

Vi rekommenderar att du:

  • Använd Standard HDD-diskar för Dev/Test-scenarier och mindre kritiska arbetsbelastningar till lägsta kostnad.
  • Använd Premium SSD-diskar i stället för Standard HDD-diskar med dina premiumkompatibla virtuella datorer. För alla virtuella datorer med en enskild instans med premiumlagring för alla operativsystemdiskar och datadiskar garanterar Azure VM-anslutning på minst 99,9 %.

Om du vill uppgradera från Standard HDD till Premium SSD-diskar bör du överväga följande problem:

  • Uppgraderingen kräver en omstart av den virtuella datorn och den här processen tar 3–5 minuter att slutföra.
  • Om virtuella datorer är verksamhetskritiska virtuella produktionsdatorer utvärderar du den förbättrade tillgängligheten mot kostnaden för premiumdiskar.

Mer information om azure-hanterade diskar och disktyper finns i Typer av Azure-hanterade diskar.

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

Aktivera accelererat nätverk (AccelNet)

AccelNet möjliggör enkel rot-I/O-virtualisering (SR-IOV) till en virtuell dator, vilket avsevärt förbättrar nätverksprestandan. Med den här högpresterande sökvägen kringgås värden från datasökvägen, vilket minskar svarstiden, jitter och processoranvändningen för de mest krävande nätverksbelastningarna på VM-typer som stöds.

Mer information om accelererat nätverk finns i Accelererat nätverk

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

När AccelNet är aktiverat måste du manuellt uppdatera NIC-drivrutinen för GuestOS

När AccelNet är aktiverat ersätts standardgränssnittet för Azure Virtual Network i GuestOS för ett Mellanox-gränssnitt. Därför tillhandahålls GuestOS NIC-drivrutinen från Mellanox, en tredjepartsleverantör. Även om Marketplace-avbildningar som underhålls av Microsoft erbjuds med den senaste versionen av Mellanox-drivrutiner, måste du uppdatera GuestOS NIC-drivrutinen var sjätte månad när den virtuella datorn har distribuerats.

// cannot-be-validated-with-arg

Hantering

Granska virtuella datorer i stoppat tillstånd

Vm-instanser går igenom olika tillstånd, inklusive etablering och energitillstånd. Om en virtuell dator är i ett stoppat tillstånd kan den virtuella datorn drabbas av ett problem eller inte längre behövs och kan tas bort för att minska kostnaderna.

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

Använda underhållskonfigurationer för den virtuella datorn

Använd underhållskonfigurationsinställningar för att schemalägga och hantera uppdateringar för att säkerställa att vm-uppdateringar/avbrott utförs inom en planerad tidsram. Mer information om hur du hanterar vm-uppdateringar med underhållskonfigurationer finns i Hantera VM-uppdateringar med underhållskonfigurationer.

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

Säkerhet

Virtuella datorer bör inte ha en direkt associerad offentlig IP-adress

Om en virtuell dator kräver utgående Internetanslutning rekommenderar vi att du använder NAT Gateway eller Azure Firewall. NAT Gateway eller Azure Firewall bidrar till att öka säkerheten och motståndskraften för tjänsten, eftersom båda tjänsterna har högre tillgänglighet och SNAT-portar (Source Network Address Translation). För inkommande Internetanslutning rekommenderar vi att du använder en belastningsutjämningslösning som Azure Load Balancer och 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

Nätverksgränssnitt för virtuella datorer har en nätverkssäkerhetsgrupp (NSG) associerad*

Vi rekommenderar att du associerar en NSG till ett undernät eller ett nätverksgränssnitt, men inte båda. Eftersom regler i en NSG som är associerade med ett undernät kan vara i konflikt med regler i en NSG som är associerad med ett nätverksgränssnitt, kan du ha oväntade kommunikationsproblem som kräver felsökning. Mer information finns i Intra-Undernätstrafik.

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

IP-vidarebefordran bör endast aktiveras för virtuella nätverksinstallationer

Ip-vidarebefordran gör att nätverksgränssnittet för virtuella datorer kan:

  • Ta emot nätverkstrafik som inte är avsedd för någon av de IP-adresser som tilldelats någon av de IP-konfigurationer som tilldelats nätverksgränssnittet.

  • Skicka nätverkstrafik med en annan käll-IP-adress än den som tilldelats till en av nätverksgränssnittets IP-konfigurationer.

Inställningen FÖR IP-vidarebefordring måste vara aktiverad för att varje nätverksgränssnitt som är kopplat till den virtuella datorn som tar emot trafik ska vidarebefordras. En virtuell dator kan vidarebefordra trafik oavsett om den har flera nätverksgränssnitt eller ett enda nätverksgränssnitt som är kopplat till den. Ip-vidarebefordran är en Azure-inställning, men den virtuella datorn måste också köra ett program som kan vidarebefordra trafiken, till exempel brandvägg, WAN-optimering och belastningsutjämningsprogram.

Information om hur du aktiverar eller inaktiverar IP-vidarebefordran finns i Aktivera eller inaktivera IP-vidarebefordran.

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

Nätverksåtkomst till den virtuella datordisken ska vara inställd på "Inaktivera offentlig åtkomst och aktivera privat åtkomst"

Vi rekommenderar att du anger åtkomst till disknätverk för virtuella datorer till "Inaktivera offentlig åtkomst och aktivera privat åtkomst" och skapa en privat slutpunkt. Information om hur du skapar en privat slutpunkt finns i Skapa en privat slutpunkt.

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

Aktivera diskkryptering och vilande datakryptering som standard

Det finns flera typer av kryptering för dina hanterade diskar, inklusive Azure Disk Encryption (ADE), SSE (Server-Side Encryption) och kryptering på värden.

  • Azure Disk Encryption hjälper till att skydda dina data så att din verksamhet uppfyller både interna och externa krav och åtaganden.
  • Kryptering på serversidan för Azure Disk Storage (kallas även kryptering i vila eller Azure Storage-kryptering) krypterar automatiskt data som lagras på Azure-hanterade diskar (OPERATIVSYSTEM och datadiskar) när de bevaras i lagringskluster.
  • Kryptering på värden säkerställer att data som lagras på den virtuella datorvärden som är värd för den virtuella datorn krypteras i vila och att flöden krypteras till lagringskluster.
  • Konfidentiell diskkryptering binder diskkrypteringsnycklar till den virtuella datorns TPM och gör det skyddade diskinnehållet endast tillgängligt för den virtuella datorn.

Mer information om krypteringsalternativ för hanterade diskar finns i Översikt över krypteringsalternativ för hanterade diskar.

// under-development

Nätverk

DNS-servrar ska konfigureras på nivån Virtuellt nätverk

Konfigurera DNS-servern i det virtuella nätverket för att undvika inkonsekvens för namnmatchning i hela miljön. Mer information om namnmatchning för resurser i virtuella Azure-nätverk finns i Namnmatchning för virtuella datorer och molntjänster.

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

Lagring

Delade diskar ska endast aktiveras på klustrade servrar

Azure-delade diskar är en funktion i Azure-hanterade diskar som gör att du kan ansluta en hanterad disk till flera virtuella datorer samtidigt. När du kopplar en hanterad disk till flera virtuella datorer kan du antingen distribuera nya eller migrera befintliga klustrade program till Azure. Delade diskar bör endast användas i de situationer där disken har tilldelats till mer än en VM-medlem i ett kluster.

Mer information om hur du aktiverar delade diskar för hanterade diskar finns i Aktivera delad disk.

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

Efterlevnad

Se till att dina virtuella datorer är kompatibla med Azure-principer

Det är viktigt att skydda den virtuella datorn (VM) för de program som du kör. Att skydda dina virtuella datorer kan innehålla en eller flera Azure-tjänster och funktioner som omfattar säker åtkomst till dina virtuella datorer och säker lagring av dina data. Mer information om hur du skyddar din virtuella dator och dina program finns i Kontroller för regelefterlevnad i Azure Policy för virtuella Azure-datorer.

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

Övervakning

Aktivera VM Insights

Aktivera VM Insights för att få mer insyn i den virtuella datorns hälsa och prestanda. MED VM Insights får du information om prestanda och hälsotillstånd för dina virtuella datorer och vm-skalningsuppsättningar genom att övervaka deras processer och beroenden för andra resurser. VM Insights kan hjälpa till att leverera förutsägbara prestanda och tillgänglighet för viktiga program genom att identifiera flaskhalsar i prestanda och nätverksproblem. Insikter kan också hjälpa dig att förstå om ett problem är relaterat till andra beroenden.

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

Konfigurera diagnostikinställningar för alla Azure-resurser

Plattformsmått skickas automatiskt till Azure Monitor-mått som standard och utan konfiguration. Plattformsloggar innehåller detaljerad diagnostik- och granskningsinformation för Azure-resurser och den Azure-plattform som de är beroende av och är en av följande typer:

  • Resursloggar som inte samlas in förrän de dirigeras till ett mål.
  • Aktivitetsloggar som finns på egen hand men som kan dirigeras till andra platser.

Varje Azure-resurs kräver en egen diagnostikinställning, som definierar följande villkor:

  • Källor Typen av mått och loggdata som ska skickas till de mål som definieras i inställningen. De tillgängliga typerna varierar beroende på resurstyp.
  • Mål: Ett eller flera mål att skicka till.

En enda diagnostikinställning kan inte definiera fler än ett av vart och ett av målen. Om du vill skicka data till mer än en av en viss måltyp (till exempel två olika Log Analytics-arbetsytor) skapar du flera inställningar. Varje resurs kan ha upp till fem diagnostikinställningar.

Mer information finns i Diagnostikinställningar i 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

Stöd för tillgänglighetszon

Azure-tillgänglighetszoner är minst tre fysiskt separata grupper av datacenter i varje Azure-region. Datacenter i varje zon är utrustade med oberoende infrastruktur för ström, kylning och nätverk. Om det uppstår ett fel i den lokala zonen är tillgänglighetszoner utformade så att regionala tjänster, kapacitet och hög tillgänglighet stöds av de återstående två zonerna om den ena zonen påverkas.

Fel kan vara allt från programvaru- och maskinvarufel till händelser som jordbävningar, översvämningar och bränder. Tolerans mot fel uppnås med redundans och logisk isolering av Azure-tjänster. Mer detaljerad information om tillgänglighetszoner i Azure finns i Regioner och tillgänglighetszoner.

Azure-tillgänglighetszoner-aktiverade tjänster är utformade för att ge rätt nivå av tillförlitlighet och flexibilitet. De kan konfigureras på två sätt. De kan vara antingen zonredundanta, med automatisk replikering mellan zoner eller zoninstanser, med instanser fästa på en specifik zon. Du kan också kombinera dessa metoder. Mer information om zon- och zonredundant arkitektur finns i Rekommendationer för användning av tillgänglighetszoner och regioner.

Virtuella datorer har stöd för tillgänglighetszoner med tre tillgänglighetszoner per Azure-region som stöds och är även zonredundanta och zonindeliga. Mer information finns i stöd för tillgänglighetszoner. Kunden ansvarar för att konfigurera och migrera sina virtuella datorer för tillgänglighet.

Mer information om beredskapsalternativ för tillgänglighetszoner finns i:

Förutsättningar

  • SKU:erna för den virtuella datorn måste vara tillgängliga mellan zonerna i för din region. Information om vilka regioner som stöder tillgänglighetszoner finns i listan över regioner som stöds.

  • Dina VM-SKU:er måste vara tillgängliga i zonerna i din region. Om du vill söka efter SKU-tillgänglighet för virtuella datorer använder du någon av följande metoder:

    • Använd PowerShell för att kontrollera SKU-tillgängligheten för virtuella datorer.
    • Använd Azure CLI för att kontrollera SKU-tillgängligheten för virtuella datorer.
    • Gå till Grundläggande tjänster.

Förbättringar av serviceavtal

Eftersom tillgänglighetszoner är fysiskt åtskilda och ger distinkta energikällor, nätverk och kylning ökar serviceavtalen (serviceavtal). Mer information finns i Serviceavtal för Virtual Machines.

Skapa en resurs med tillgänglighetszoner aktiverade

Kom igång genom att skapa en virtuell dator (VM) med tillgänglighetszonen aktiverad från följande distributionsalternativ nedan:

Stöd för zonbaserad redundans

Du kan konfigurera virtuella datorer för redundansväxling till en annan zon med hjälp av Site Recovery-tjänsten. Mer information finns i Site Recovery.

Feltolerans

Virtuella datorer kan redundansväxla till en annan server i ett kluster, där den virtuella datorns operativsystem startas om på den nya servern. Du bör referera till redundansväxlingsprocessen för haveriberedskap, insamling av virtuella datorer i återställningsplanering och körning av haveriberedskapstest för att säkerställa att feltoleranslösningen lyckas.

Mer information finns i site recovery-processerna.

Zon-ned-upplevelse

Under ett zonomfattande avbrott bör du förvänta dig en kort försämring av prestanda tills den virtuella datortjänstens självåterställning balanserar om den underliggande kapaciteten för att anpassa sig till felfria zoner. Självåterställning är inte beroende av zonåterställning. Det förväntas att självåterställningstillståndet för Microsoft-hanterad tjänst kompenserar för en förlorad zon med hjälp av kapacitet från andra zoner.

Du bör också förbereda dig för möjligheten att det uppstår ett avbrott i en hel region. Om det uppstår ett avbrott i tjänsten för en hel region skulle de lokalt redundanta kopiorna av dina data tillfälligt vara otillgängliga. Om geo-replikering är aktiverat lagras tre andra kopior av dina Azure Storage-blobbar och tabeller i en annan region. När det uppstår ett fullständigt regionalt avbrott eller ett haveri där den primära regionen inte kan återställas, mappas alla DNS-poster till den geo-replikerade regionen igen.

Förberedelse och återställning av zonstopp

Följande vägledning ges för virtuella Azure-datorer under tjänststörningar i hela regionen där ditt virtuella Azure-datorprogram distribueras:

Design med låg svarstid

Mellan regioner (sekundär region), Korsprenumeration (förhandsversion) och Korszon (förhandsversion) är tillgängliga alternativ att tänka på när du utformar en lösning för en virtuell dator med låg latens. Mer information om de här alternativen finns i de återställningsmetoder som stöds.

Viktigt!

Genom att välja bort zonmedveten distribution avstår du från skydd mot isolering av underliggande fel. Användning av SKU:er som inte stöder tillgänglighetszoner eller som avanmäler sig från konfiguration av tillgänglighetszoner tvingar beroendet av resurser som inte följer zonplacering och separation (inklusive underliggande beroenden för dessa resurser). Dessa resurser bör inte förväntas överleva zon-down-scenarier. Lösningar som utnyttjar sådana resurser bör definiera en strategi för haveriberedskap och konfigurera en återställning av lösningen i en annan region.

Valv distributionstekniker

När du väljer isolering av tillgänglighetszoner bör du använda säkra distributionstekniker för programkod och programuppgraderingar. Förutom att konfigurera Azure Site Recovery och implementera någon av följande säkra distributionstekniker för virtuella datorer:

Eftersom Microsoft regelbundet utför planerade underhållsuppdateringar kan det finnas sällsynta instanser när dessa uppdateringar kräver en omstart av den virtuella datorn för att tillämpa nödvändiga uppdateringar på den underliggande infrastrukturen. Mer information finns i tillgänglighetsöverväganden under schemalagt underhåll.

Innan du uppgraderar nästa uppsättning noder i en annan zon bör du utföra följande uppgifter:

Migrera till stöd för tillgänglighetszoner

Information om hur du migrerar en virtuell dator till stöd för tillgänglighetszoner finns i Migrera virtuella datorer och Vm-skalningsuppsättningar till stöd för tillgänglighetszoner.

Haveriberedskap och affärskontinuitet mellan regioner

Haveriberedskap handlar om att återställa från händelser med hög påverkan, till exempel naturkatastrofer eller misslyckade distributioner som resulterar i driftstopp och dataförlust. Oavsett orsak är den bästa lösningen för en katastrof en väldefinierad och testad DR-plan och en programdesign som aktivt stöder DR. Innan du börjar fundera på att skapa en haveriberedskapsplan kan du läsa Rekommendationer för att utforma en strategi för haveriberedskap.

När det gäller dr använder Microsoft modellen för delat ansvar. I en modell med delat ansvar ser Microsoft till att baslinjeinfrastrukturen och plattformstjänsterna är tillgängliga. Samtidigt replikerar många Azure-tjänster inte automatiskt data eller återgår från en misslyckad region för att korsreparera till en annan aktiverad region. För dessa tjänster ansvarar du för att konfigurera en haveriberedskapsplan som fungerar för din arbetsbelastning. De flesta tjänster som körs på PaaS-erbjudanden (Plattform som en tjänst) i Azure ger funktioner och vägledning för att stödja DR och du kan använda tjänstspecifika funktioner för att stödja snabb återställning för att utveckla din DR-plan.

Du kan använda återställning mellan regioner för att återställa virtuella Azure-datorer via kopplade regioner. Med återställning mellan regioner kan du återställa alla virtuella Azure-datorer för den valda återställningspunkten om säkerhetskopieringen görs i den sekundära regionen. Mer information om återställning mellan regioner finns i tabellradposten Mellan regioner i våra återställningsalternativ.

Haveriberedskap i geografi för flera regioner

Vid avbrott i tjänsten för hela regionen arbetar Microsoft flitigt med att återställa den virtuella datortjänsten. Du måste dock fortfarande förlita dig på andra programspecifika säkerhetskopieringsstrategier för att uppnå den högsta tillgänglighetsnivån. Mer information finns i avsnittet om datastrategier för haveriberedskap.

Identifiering, avisering och hantering av avbrott

Maskinvara eller fysisk infrastruktur för den virtuella datorn kan misslyckas oväntat. Oväntade fel kan vara lokala nätverksfel, lokala diskfel eller andra fel på racknivå. När den identifieras migrerar Azure-plattformen automatiskt (läker) den virtuella datorn till en felfri fysisk dator i samma datacenter. Återställningsprocessen medför driftavbrott (omstart) på virtuella datorer och i vissa fall förlust av den temporära enheten. Anslutna operativsystems- och datadiskar bevaras alltid.

Mer detaljerad information om avbrott i tjänsten för virtuella datorer finns i vägledning för haveriberedskap.

Konfigurera haveriberedskap och avbrottsidentifiering

När du konfigurerar haveriberedskap för virtuella datorer ska du förstå vad Azure Site Recovery tillhandahåller. Aktivera haveriberedskap för virtuella datorer med metoderna nedan:

Haveriberedskap i geografi för en region

Med konfiguration av haveriberedskap replikerar virtuella Azure-datorer kontinuerligt till en annan målregion. Om ett avbrott inträffar kan du redundansväxla virtuella datorer till den sekundära regionen och komma åt dem därifrån.

När du replikerar virtuella Azure-datorer med Site Recovery replikeras alla virtuella datordiskar kontinuerligt till målregionen asynkront. Återställningspunkterna skapas med några minuters mellanrum, vilket ger dig ett mål för återställningspunkt (RPO) i storleksordningen minuter. Du kan utföra haveriberedskapstest så många gånger du vill, utan att påverka produktionsprogrammet eller den pågående replikeringen. Mer information finns i Köra ett haveriberedskapstest till Azure.

Mer information finns i Arkitekturkomponenter för virtuella Azure-datorer och regionparning.

Återhämtning av kapacitet och proaktiv haveriberedskap

Microsoft och dess kunder arbetar under modellen för delat ansvar. Delat ansvar innebär att för kundaktiverade DR (kundansvariga tjänster) måste du kontakta DR för alla tjänster som de distribuerar och kontrollerar. För att säkerställa att återställningen är proaktiv bör du alltid fördistribuera sekundärfiler eftersom det inte finns någon garanti för kapacitet vid tidpunkten för påverkan för dem som inte har förallokerat.

För att distribuera virtuella datorer kan du använda flexibelt orkestreringsläge på VM-skalningsuppsättningar. Alla VM-storlekar kan användas med flexibelt orkestreringsläge. Flexibelt orkestreringsläge ger också garantier för hög tillgänglighet (upp till 1 000 virtuella datorer) genom att sprida virtuella datorer mellan feldomäner antingen inom en region eller inom en tillgänglighetszon.

Nästa steg