Надежность в Виртуальные машины

В этой статье содержатся конкретные рекомендации по надежности для Виртуальные машины, а также подробные сведения о региональной устойчивости виртуальных машин с зонами доступности и аварийного восстановления между регионами и непрерывностью бизнес-процессов.

Общие сведения об архитектуре надежности в Azure см. в статье "Надежность Azure".

Рекомендации по надежности

В этом разделе содержатся рекомендации по обеспечению устойчивости и доступности. Каждая рекомендация входит в одну из двух категорий:

  • Элементы работоспособности охватывают такие области, как элементы конфигурации и правильная функция основных компонентов, составляющих рабочую нагрузку Azure, такие как параметры конфигурации ресурсов Azure, зависимости от других служб и т. д.

  • Элементы риска охватывают такие области, как требования к доступности и восстановлению, тестирование, мониторинг, развертывание и другие элементы, которые, если остались неразрешенными, повышают вероятность проблем в среде.

Матрица приоритетов рекомендаций по надежности

Каждая рекомендация помечается в соответствии со следующей матрицей приоритетов:

Изображения Приоритет Описание
Высокая Необходимо немедленное исправление.
Средняя Исправление в течение 3–6 месяцев.
Низкая Необходимо проверить.

Сводка рекомендаций по надежности

Категория Приоритет Рекомендация
Обеспечение высокого уровня доступности Выполнение рабочих нагрузок на двух или нескольких виртуальных машинах с помощью Azure Масштабируемые наборы виртуальных машин Flex
Развертывание виртуальных машин в зонах доступности или использование Масштабируемые наборы виртуальных машин Flex с зонами
Перенос виртуальных машин с помощью групп доступности в Масштабируемые наборы виртуальных машин Flex
Использование управляемых дисков для дисков виртуальных машин
Аварийное восстановление Репликация виртуальных машин с помощью Azure Site Recovery
Резервное копирование данных на виртуальных машинах с помощью службы Azure Backup
Производительность Размещение приложения и данных базы данных на диске данных
Рабочие виртуальные машины должны использовать диски SSD
Включение ускоренной сети (AccelNet)
При включении AccelNet необходимо вручную обновить диск сетевого адаптера GuestOS
Управление VM-9. Просмотр виртуальных машин в состоянии остановленного состояния
Использование конфигураций обслуживания для виртуальной машины
Безопасность Виртуальные машины не должны иметь общедоступный IP-адрес напрямую
Интерфейсы виртуальная сеть связаны с NSG
Ip-пересылка должна быть включена только для сетевых виртуальных устройств
Сетевой доступ к диску виртуальной машины должен иметь значение "Отключить общедоступный доступ и включить частный доступ".
Включение шифрования дисков и неактивных данных по умолчанию
Сеть Dns-серверы клиента должны быть настроены на уровне виртуальная сеть
Память Общие диски должны быть включены только на кластеризованных серверах
Соблюдение закона Убедитесь, что виртуальные машины соответствуют политикам Azure
Мониторинг Включение Аналитика виртуальной машины
Настройка параметров диагностики для всех ресурсов Azure

Высокая доступность

Выполнение рабочих нагрузок рабочей среды на двух или нескольких виртуальных машинах с помощью Масштабируемые наборы виртуальных машин Flex

Чтобы защитить рабочие нагрузки приложений от простоя из-за временной недоступности диска или виртуальной машины, рекомендуется запускать рабочие нагрузки на двух или нескольких виртуальных машинах с помощью Масштабируемые наборы виртуальных машин Flex.

Для выполнения рабочих нагрузок можно использовать следующее:

  • Azure Масштабируемые наборы виртуальных машин для создания группы виртуальных машин с балансировкой нагрузки и управления ими. Число экземпляров виртуальных машин может автоматически увеличиваться или уменьшаться в зависимости от спроса или по определенному расписанию.

  • Зоны доступности Дополнительные сведения о зонах доступности и виртуальных машинах см. в разделе "Поддержка зоны доступности".

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

Развертывание виртуальных машин в зонах доступности или использование Масштабируемые наборы виртуальных машин Flex с зонами*

При создании виртуальных машин используйте зоны доступности для защиты приложений и данных от маловероятного сбоя центра обработки данных. Дополнительные сведения о зонах доступности для виртуальных машин см. в этом документе.

Сведения о том, как включить поддержку зон доступности при создании виртуальной машины, см. в статье "Создание поддержки зоны доступности".

Сведения о переносе существующих виртуальных машин в поддержку зоны доступности см. в разделе "Миграция в поддержку зоны доступности".

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

Перенос виртуальных машин с помощью групп доступности в Масштабируемые наборы виртуальных машин Flex

Модернизация рабочих нагрузок путем переноса их из виртуальных машин в Масштабируемые наборы виртуальных машин Flex.

С помощью Масштабируемые наборы виртуальных машин Flex можно развернуть виртуальные машины одним из двух способов:

  • Между зонами
  • В той же зоне, но в доменах сбоя (FD) и доменах обновления (UD) автоматически.

В N-уровневом приложении рекомендуется поместить каждый уровень приложений в собственный Масштабируемые наборы виртуальных машин 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)

Использование управляемых дисков для дисков виртуальных машин*

Чтобы повысить надежность виртуальных машин в группе доступности, используйте управляемые диски. Управляемые диски достаточно изолированы друг от друга, чтобы избежать отдельных точек сбоя. Кроме того, управляемые диски не подлежат ограничениям операций ввода-вывода в секунду виртуальных жестких дисков, созданных в учетной записи хранения.

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

Аварийное восстановление

Репликация виртуальных машин с помощью Azure Site Recovery

При реплика реплика виртуальных машин Azure с помощью Site Recovery все диски виртуальных машин постоянно реплика в целевом регионе асинхронно. Точки восстановления создаются каждые несколько минут, что обеспечивает целевую точку восстановления (RPO) в порядке минут. Можно выполнять аварийное восстановление столько раз, сколько требуется. Это не повлияет на рабочее приложение или текущую репликацию.

Сведения о выполнении аварийного восстановления см. в статье "Запуск тестовой отработки отказа".

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

Резервное копирование данных на виртуальных машинах с помощью службы Azure Backup

Служба Azure Backup предоставляет простые, безопасные и экономичные решения для резервного копирования и восстановления данных из облака Microsoft Azure. Дополнительные сведения см. в статье "Что такое служба архивации 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

Производительность

Размещение приложения и данных базы данных на диске данных

Диск данных — это управляемый диск, подключенный к виртуальной машине. Используйте диск данных для хранения данных приложения или других данных, которые необходимо сохранить. Диски данных регистрируются как диски SCSI и обозначаются любой указанной буквой. Размещение данных на диске данных упрощает резервное копирование или восстановление данных. Вы также можете перенести диск, не переместив всю виртуальную машину и операционную систему. Кроме того, вы можете выбрать другой номер SKU диска с различным типом, размером и производительностью, которые соответствуют вашим требованиям. Дополнительные сведения о дисках данных см. в разделе "Диски данных".

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

Рабочие виртуальные машины должны использовать диски SSD

Диски SSD уровня "Премиум" обеспечивают высокую производительность и поддержку дисков с низкой задержкой для приложений и рабочих нагрузок с большим количеством операций ввода-вывода. Диски SSD уровня "Стандартный" — это экономичный вариант хранения, оптимизированный для рабочих нагрузок, которые требуют согласованной производительности на более низких уровнях операций ввода-вывода в секунду.

Рекомендуется:

  • Используйте диски HDD уровня "Стандартный" для сценариев разработки и тестирования и менее критически важных рабочих нагрузок с минимальными затратами.
  • Используйте диски SSD уровня "Премиум" вместо дисков HDD уровня "Стандартный" с виртуальными машинами с поддержкой класса "Премиум". Для любой виртуальной машины с одним экземпляром, использующим хранилище класса Premium для всех дисков операционной системы и дисков данных, Azure гарантирует подключение к виртуальной машине не менее 99,9%.

Если вы хотите обновить диски SSD уровня "Стандартный" до уровня "Премиум", рассмотрите следующие проблемы:

  • Для обновления требуется перезагрузка виртуальной машины, и выполнение этого процесса занимает 3–5 минут.
  • Если виртуальные машины являются критически важными для рабочих виртуальных машин, оцените улучшенную доступность по стоимости дисков класса Premium.

Дополнительные сведения об управляемых дисках и типах дисков Azure см. в разделе "Типы управляемых дисков 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)

Включение ускоренной сети (AccelNet)

AccelNet обеспечивает виртуализацию одно корневых операций ввода-вывода (SR-IOV) для виртуальной машины, что значительно повышает производительность сети. Этот высокопроизводительный метод обеспечивает обход узла на пути к данным, что уменьшает задержку, дрожание и нагрузку ЦП. Он предназначен для ресурсоемких рабочих нагрузок сети на виртуальных машинах поддерживаемых типов.

Дополнительные сведения об ускоренной сети см. в разделе "Ускорение сети"

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

Если AccelNet включена, необходимо вручную обновить драйвер сетевого адаптера GuestOS

Если AccelNet включен, интерфейс Azure виртуальная сеть по умолчанию в GuestOS заменяется на интерфейс Mellanox. В результате драйвер сетевого адаптера GuestOS предоставляется от Mellanox, стороннего поставщика. Хотя образы Marketplace, поддерживаемые корпорацией Майкрософт, предоставляются с последней версией драйверов Mellanox, после развертывания виртуальной машины необходимо вручную обновлять драйвер сетевой карты GuestOS каждые шесть месяцев.

// cannot-be-validated-with-arg

Управление

Проверка виртуальных машин в остановленном состоянии

Экземпляры виртуальных машин проходят через различные состояния, включая подготовку и состояния питания. Если виртуальная машина находится в остановленном состоянии, виртуальная машина может столкнуться с проблемой или больше не требуется и может быть удалена для снижения затрат.

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

Использование конфигураций обслуживания для виртуальной машины

Чтобы убедиться, что обновления и прерывания виртуальных машин выполняются в запланированном интервале времени, используйте параметры конфигурации обслуживания для планирования обновлений и управления ими. Дополнительные сведения об управлении обновлениями виртуальных машин с конфигурациями обслуживания см. в разделе "Управление обновлениями виртуальных машин с помощью конфигураций обслуживания".

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

Безопасность

Виртуальные машины не должны напрямую связываться с общедоступным IP-адресом

Если для виртуальной машины требуется исходящее подключение к Интернету, рекомендуется использовать шлюз NAT или Брандмауэр Azure. Шлюз NAT или Брандмауэр Azure помогают повысить безопасность и устойчивость службы, так как обе службы имеют более высокий уровень доступности и порты преобразования сетевых адресов (SNAT). Для входящего подключения к Интернету рекомендуется использовать решение для балансировки нагрузки, например Azure Load Balancer и Шлюз приложений.

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

Сетевые интерфейсы виртуальной машины связаны с группой безопасности сети (NSG)*

Рекомендуется связать группу безопасности сети с подсетью или сетевым интерфейсом, но не обоими. Так как правила в группе безопасности сети, связанной с подсетью, могут конфликтовать с правилами в группе безопасности сети, связанной с сетевым интерфейсом, могут возникнуть непредвиденные проблемы связи, требующие устранения неполадок. Дополнительные сведения см. в разделе "Трафик внутри подсети".

// 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-пересылка должна быть включена только для виртуальных сетевых (модуль)

Благодаря IP-пересылке сетевой интерфейс виртуальной машины может:

  • Получать сетевой трафик, не предназначенный для одного из IP-адресов, назначенных какой-либо IP-конфигурации, которая назначена сетевому интерфейсу.

  • Отправьте сетевой трафик с другим исходным IP-адресом, чем один, назначенный одной из конфигураций IP-адресов сетевого интерфейса.

Параметр перенаправления IP-адресов должен быть включен для каждого сетевого интерфейса, подключенного к виртуальной машине, получающего трафик, который необходимо перенаправлять. Виртуальная машина может перенаправлять трафик, имеющий несколько сетевых интерфейсов или один сетевой интерфейс, подключенный к нему. Хотя IP-пересылка — это параметр Azure, виртуальная машина также должна запускать приложение, которое может перенаправить трафик, например брандмауэр, оптимизацию глобальной сети и приложения балансировки нагрузки.

Сведения о включении или отключении IP-пересылки см. в разделе "Включение или отключение 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

Сетевой доступ к диску виртуальной машины должен иметь значение "Отключить общедоступный доступ и включить частный доступ".

Рекомендуется задать сетевой доступ к виртуальной машине для параметра "Отключить общедоступный доступ и включить частный доступ" и создать частную конечную точку. Сведения о создании частной конечной точки см. в статье "Создание частной конечной точки".

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

Включение шифрования дисков и неактивных данных по умолчанию

Для управляемых дисков доступно несколько типов шифрования, включая Шифрование дисков Azure (ADE), шифрование на стороне сервера (SSE) и шифрование на узле.

  • Шифрование дисков Azure помогает защитить данные согласно корпоративным обязательствам по обеспечению безопасности и соответствия.
  • Шифрование Хранилища дисков Azure на стороне сервера (также называется шифрованием неактивных данных или шифрованием службы хранилища Azure) автоматически шифрует данные, хранящиеся на управляемых дисках Azure (дисках операционной системы и данных), при сохранении их в кластерах хранилища.
  • Шифрование на узле гарантирует, что данные, хранящиеся на узле виртуальной машины, где размещена ваша виртуальная машина, шифруются при хранении и передаются в зашифрованном виде в службу хранилища.
  • Шифрование конфиденциальных дисков привязывает ключи шифрования дисков к доверенному платформенного модуля виртуальной машины и делает защищенное содержимое диска доступным только для виртуальной машины.

Дополнительные сведения о параметрах шифрования управляемых дисков см. в разделе "Общие сведения о параметрах шифрования управляемых дисков".

// under-development

Сеть

DNS-серверы должны быть настроены на уровне виртуальная сеть

Настройте DNS-сервер в виртуальная сеть, чтобы избежать несоответствия разрешения имен в среде. Дополнительные сведения о разрешении имен для ресурсов в виртуальных сетях 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

Хранилище

Общие диски должны быть включены только на кластеризованных серверах

Общие диски Azure — это функция управляемых дисков Azure, которая позволяет подключать управляемый диск к нескольким виртуальным машинам одновременно. При подключении управляемого диска к нескольким виртуальным машинам можно развернуть новые или перенести существующие кластеризованные приложения в Azure. Общие диски следует использовать только в тех случаях, когда диск назначается нескольким членам виртуальной машины кластера.

Дополнительные сведения о включении общих дисков для управляемых дисков см. в разделе "Включение общего диска".

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

Соблюдение закона

Убедитесь, что виртуальные машины соответствуют политикам Azure

Очень важно обеспечить безопасность виртуальной машины для выполняемых приложений. Для защиты виртуальных машин можно применить одну или несколько служб или функций Azure, которые обеспечивают безопасный доступ к виртуальным машинам и безопасное хранение данных. Дополнительные сведения о том, как обеспечить безопасность виртуальной машины и приложений, см. в Политика Azure элементах управления соответствием нормативным требованиям для 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

Наблюдение

Включение Аналитика виртуальной машины

Включите Аналитика виртуальной машины, чтобы получить больше сведений о работоспособности и производительности виртуальной машины. Виртуальная машина Аналитика предоставляет сведения о производительности и работоспособности виртуальных машин и масштабируемых наборов виртуальных машин, отслеживая их выполняемые процессы и зависимости от других ресурсов. Аналитика виртуальных машин может помочь обеспечить прогнозируемую производительность и доступность жизненно важных приложений, определив узкие места производительности и проблемы с сетью. Аналитика также поможет понять, связана ли проблема с другими зависимостями.

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

Настройка параметров диагностики для всех ресурсов Azure

Метрики платформы автоматически отправляются в метрики Azure Monitor по умолчанию и без дополнительной настройки. Журналы платформы предоставляют подробные диагностические и аудиты для ресурсов Azure и платформы Azure, от которых они зависят, и являются одним из следующих типов:

  • Журналы ресурсов, которые не собираются, пока они не перенаправляются в место назначения.
  • Журналы действий, которые существуют самостоятельно, но могут быть перенаправлены в другие расположения.

Для каждого ресурса Azure требуется собственный параметр диагностики, который определяет следующие критерии:

  • Источники Типа данных метрик и журналов для отправки в назначения, определенные в параметре. Доступные типы зависят от типа ресурса.
  • Назначения — одно или несколько мест назначения.

Один параметр диагностики может определять не более одного назначения каждого типа. Если необходимо отправить данные в места назначения нескольких типов (например, в две разные рабочие области Log Analytics), создайте несколько параметров. Каждый ресурс может иметь до пяти параметров диагностики.

Дополнительные сведения см. в разделе "Параметры диагностики" в 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

Поддержка зоны доступности

Зоны доступности Azure — это по крайней мере три физически отдельные группы центров обработки данных в каждом регионе Azure. Центры обработки данных в каждой зоне оснащены независимой питанием, охлаждения и сетевой инфраструктурой. В случае сбоя локальной зоны зоны зоны создаются таким образом, чтобы при возникновении влияния одной зоны, региональных служб, емкости и высокой доступности поддерживались остальными двумя зонами.

Сбои могут варьироваться от сбоев программного обеспечения и оборудования до таких событий, как землетрясения, наводнения и пожары. Устойчивость к сбоям достигается с избыточностью и логической изоляцией служб Azure. Дополнительные сведения о зонах доступности в Azure см. в разделе "Регионы и зоны доступности".

Службы с поддержкой зон доступности Azure предназначены для обеспечения правильного уровня надежности и гибкости. Их можно настроить двумя способами. Они могут быть избыточными по зонам с автоматическим реплика tion между зонами или зональными экземплярами, закрепленными в определенной зоне. Эти подходы также можно объединить. Дополнительные сведения об зональной архитектуре, избыточной между зонами, см. в Рекомендации использования зональных зон и регионов.

Виртуальные машины поддерживают зоны доступности с тремя зонами доступности для каждого поддерживаемого региона Azure, а также являются зональными и избыточными по зонам. Дополнительные сведения см. в разделе поддержки зон доступности. Клиент отвечает за настройку и перенос виртуальных машин для доступности.

Дополнительные сведения о параметрах готовности зоны доступности см. в следующем разделе:

Необходимые компоненты

Улучшения обслуживания

Так как зоны доступности физически отделены и обеспечивают различные источники питания, сеть и охлаждение, соглашения об уровне обслуживания (соглашения об уровне обслуживания) увеличиваются. Дополнительные сведения см. в статье о соглашении об уровне обслуживания для виртуальных машин.

Создание ресурса с включенными зонами доступности

Начало работы с созданием виртуальной машины с включенной зоной доступности из следующих вариантов развертывания:

Поддержка зональной отработки отказа

Виртуальные машины можно настроить для отработки отказа в другую зону с помощью службы Site Recovery. Дополнительные сведения см. в разделе Site Recovery.

Отказоустойчивость

Виртуальные машины могут выполнять отработку отказа на другой сервер в кластере с перезапуском операционной системы виртуальной машины на новом сервере. Вы должны обратиться к процессу отработки отказа для аварийного восстановления, сбору виртуальных машин в планировании восстановления и выполнении детализации аварийного восстановления, чтобы убедиться, что их решение отказоустойчивости выполнено успешно.

Дополнительные сведения см. в процессах восстановления сайта.

Взаимодействие с зонами вниз

Во время сбоя на уровне зоны следует ожидать краткого снижения производительности, пока служба виртуальной машины самостоятельно не перебалансирует базовую емкость, чтобы адаптироваться к здоровым зонам. Самовосстановление не зависит от восстановления зоны; Ожидается, что управляемое корпорацией Майкрософт состояние самовосстановления компенсирует потерянную зону, используя емкость из других зон.

Вы также должны подготовиться к возможности сбоя всего региона. Если для всего региона произошло нарушение работы службы, локальные избыточные копии данных временно будут недоступны. Если включена гео реплика tion, в другом регионе хранятся три другие копии служба хранилища Azure больших двоичных объектов и таблиц. Когда произошел полный региональный сбой или авария, в которой основной регион не может восстановиться, Azure перенаправляет все записи DNS в гео-реплика заданном регионе.

Подготовка и восстановление сбоя зоны

Следующие рекомендации предоставляются для виртуальных машин Azure во время сбоя службы всего региона, в котором развертывается приложение виртуальной машины Azure:

Проектирование низкой задержки

Кросс-регион (дополнительный регион), кросс-подписка (предварительная версия) и межзональный (предварительная версия) доступны для рассмотрения при разработке решения виртуальной машины с низкой задержкой. Дополнительные сведения об этих параметрах см. в поддерживаемых методах восстановления.

Важно!

Отказ от развертывания с поддержкой зон позволяет защититься от изоляции базовых сбоев. Использование номеров SKU, которые не поддерживают зоны доступности или отказ от конфигурации зоны доступности, принудительно зависят от ресурсов, которые не подчиняются размещению и разделению зон (включая базовые зависимости этих ресурсов). Эти ресурсы не должны быть ожидаемыми, чтобы выжить в сценариях уменьшения зоны. Решения, использующие такие ресурсы, должны определять стратегию аварийного восстановления и настраивать восстановление решения в другом регионе.

методы развертывания Сейф

При выборе изоляции зон доступности следует использовать безопасные методы развертывания для кода приложения и обновлений приложений. Помимо настройки Azure Site Recovery и реализации любого из следующих методов безопасного развертывания для виртуальных машин:

Так как корпорация Майкрософт периодически выполняет запланированные обновления обслуживания, могут возникать редкие случаи, когда эти обновления требуют перезагрузки виртуальной машины для применения необходимых обновлений к базовой инфраструктуре. Дополнительные сведения см . в рекомендациях по доступности во время запланированного обслуживания.

Перед обновлением следующего набора узлов в другой зоне необходимо выполнить следующие задачи:

Поддержка перехода на зоны доступности

Сведения о переносе виртуальной машины в поддержку зоны доступности см. в статье "Миграция Виртуальные машины и Масштабируемые наборы виртуальных машин в поддержку зоны доступности".

Аварийное восстановление между регионами и непрерывность бизнес-процессов

Аварийное восстановление (АВАРИЙНОе восстановление) заключается в восстановлении из событий высокой нагрузки, таких как стихийные бедствия или неудачные развертывания, которые приводят к простою и потере данных. Независимо от причины, лучшее средство для аварийного восстановления является хорошо определенным и проверенным планом аварийного восстановления и проектом приложения, который активно поддерживает аварийное восстановление. Прежде чем начать думать о создании плана аварийного восстановления, ознакомьтесь с Рекомендации для разработки стратегии аварийного восстановления.

Когда дело доходит до аварийного восстановления, корпорация Майкрософт использует модель общей ответственности. В модели общей ответственности корпорация Майкрософт гарантирует, что доступны базовые службы инфраструктуры и платформы. В то же время многие службы Azure не автоматически реплика te данные или возвращаются из неудающегося региона, чтобы перекрестно реплика te в другой включенный регион. Для этих служб вы несете ответственность за настройку плана аварийного восстановления, который работает для рабочей нагрузки. Большинство служб, работающих на платформе Azure как услуга (PaaS), предоставляют функции и рекомендации для поддержки аварийного восстановления, и вы можете использовать специальные функции службы для поддержки быстрого восстановления для разработки плана аварийного восстановления .

Восстановление между регионами можно использовать для восстановления виртуальных машин Azure с помощью парных регионов. При восстановлении между регионами можно восстановить все виртуальные машины Azure для выбранной точки восстановления, если резервное копирование выполняется в дополнительном регионе. Дополнительные сведения о восстановлении между регионами см. в записи строки таблицы между регионами в наших параметрах восстановления.

Аварийное восстановление в географическом регионе с несколькими регионами

В случае сбоя службы на уровне региона корпорация Майкрософт старательно работает над восстановлением службы виртуальной машины. Однако для обеспечения высокого уровня доступности необходимо использовать другие стратегии резервного копирования для конкретного приложения. Дополнительные сведения см. в разделе о стратегиях аварийного восстановления данных.

Обнаружение сбоев, уведомление и управление

Оборудование или физическая инфраструктура для виртуальной машины может неожиданно завершиться ошибкой. Непредвиденные сбои могут включать сбои локальной сети, сбои локального диска или другие сбои на уровне стойки. При выявлении таких сбоев платформа Azure автоматически переносит виртуальную машину на работоспособный физический компьютер в том же центре обработки данных. Во время восстановления работоспособности виртуальной машины возникает простой (перезагрузка), а в некоторых случаях отключается временный диск. Подключенные диски ОС и диски данных всегда сохраняются.

Дополнительные сведения о сбоях службы виртуальных машин см . в руководстве по аварийному восстановлению.

Настройка аварийного восстановления и обнаружения сбоев

При настройке аварийного восстановления для виртуальных машин понять, что предоставляет Azure Site Recovery. Включите аварийное восстановление для виртуальных машин с помощью следующих методов:

Аварийное восстановление в географическом регионе с одним регионом

При установке аварийного восстановления виртуальные машины Azure непрерывно реплика te в другой целевой регион. В случае сбоя вы сможете выполнить для таких виртуальных машин отработку отказа в дополнительный регион и получать доступ к ним в этом регионе.

При репликации виртуальных машин Azure с помощью Site Recovery все диски виртуальных машин непрерывно и асинхронно реплицируются в целевой регион. Точки восстановления создаются каждые несколько минут, которые предоставляют целевой объект точки восстановления (RPO) в порядке минут. Можно выполнять аварийное восстановление столько раз, сколько требуется. Это не повлияет на рабочее приложение или текущую репликацию. См. дополнительные сведения об отработке аварийного восстановления в Azure.

Дополнительные сведения см. в статье об архитектурных компонентах виртуальных машин Azure и связывании регионов.

Устойчивость емкости и упреждающего аварийного восстановления

Корпорация Майкрософт и ее клиенты работают в рамках модели общей ответственности. Общая ответственность означает, что для аварийного восстановления с поддержкой клиентов (службы, отвечающие за клиентов), необходимо обратиться к аварийному аварийному восстановления для любой службы, которую они развертывают и контролируют. Чтобы обеспечить упреждающее восстановление, всегда следует предварительно развертывать вторичные файлы, так как не гарантируется возможность во время воздействия для тех, кто не был предварительно расположен.

Для развертывания виртуальных машин можно использовать гибкий режим оркестрации в Масштабируемые наборы виртуальных машин. Все размеры виртуальных машин можно использовать с гибким режимом оркестрации. Режим гибкой оркестрации также обеспечивает гарантии высокой доступности (до 1000 виртуальных машин), распространяя виртуальные машины по доменам сбоя в пределах региона или в пределах зоны доступности.

Следующие шаги