Использование расширения "Работоспособности приложений" с Масштабируемые наборы виртуальных машин

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

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

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

Для работы с этой статьей нужны знания в следующих областях:

  • Расширениями виртуальной машины Azure.
  • Изменение Масштабируемые наборы виртуальных машин

Внимание

Расширение работоспособности приложений ожидает получения согласованного ответа пробы на настроенный порт tcp или путь http/https запроса для метки виртуальной машины как работоспособной. Если приложение не запущено на виртуальной машине или не удается настроить ответ пробы, виртуальная машина будет отображаться как неработоспособное (состояния работоспособности двоичных файлов) или неизвестные (богатые состояния работоспособности).

Примечание.

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

Когда использовать расширение "Работоспособность приложения"

Расширение работоспособности приложений развертывается в экземпляре масштабируемого набора виртуальных машин и сообщает о работоспособности приложений из экземпляра масштабируемого набора. Модуль проверяет конечную точку локального приложения и обновляет состояние работоспособности на основе ответов TCP/HTTP(S), полученных от приложения. Это состояние работоспособности используется Azure для запуска восстановления неработоспособных экземпляров и определения того, имеет ли экземпляр право на операции обновления.

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

Двоичные и богатые состояния работоспособности

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

Функции Двоичные состояния работоспособности Богатые состояния здоровья
Доступные состояния работоспособности Два доступных состояния: работоспособность, неработоспособная Четыре доступных состояния: работоспособность, неработоспособная, инициализация, неизвестно1
Отправка сигналов работоспособности Сигналы работоспособности отправляются через коды ответов HTTP/HTTPS или TCP-подключения. Сигналы работоспособности по протоколу HTTP/HTTPS отправляются через код отклика пробы и текст ответа. Сигналы работоспособности через протокол TCP остаются неизменными из двоичных состояний работоспособности.
Определение неработоспособных экземпляров Экземпляры автоматически попадают в состояние неработоспособного состояния, если здоровый сигнал не получен от приложения. Неработоспособный экземпляр может указать либо проблему с конфигурацией расширения (например, недоступной конечной точкой), либо проблему с приложением (например, код состояния, отличный от 200). Экземпляры будут переходить только в неработоспособное состояние, если приложение выдает неработоспособныйответ пробы. Пользователи отвечают за реализацию пользовательской логики для идентификации и флага экземпляров с неработоспособными приложениями2. Экземпляры с неправильными параметрами расширения (например, недоступная конечная точка) или недопустимые ответы пробы работоспособности будут соответствовать неизвестному состоянию2.
Инициализация состояния для вновь созданных экземпляров Состояние инициализации недоступно. Недавно созданные экземпляры могут занять некоторое время, прежде чем поселиться в устойчивом состоянии. Состояние инициализации позволяет вновь созданным экземплярам урегулироваться в устойчивом состоянии работоспособности, прежде чем сделать экземпляр подходящим для последовательного обновления или операций восстановления экземпляров.
Протокол HTTP/HTTPS Поддерживается Поддерживается
Протокол TCP. Поддерживается Ограниченная поддержка— неизвестное состояние недоступно в протоколе TCP. См . таблицу протокола rich Health State для поведения состояния работоспособности в TCP.

1 Неизвестное состояние недоступно в протоколе TCP. 2 Применимо только для протокола HTTP/HTTPS. Протокол TCP будет соответствовать тому же процессу выявления неработоспособных экземпляров, что и в двоичных состояниях работоспособности .

В общем случае следует использовать двоичные состояния работоспособности, если:

  • Вы не заинтересованы в настройке пользовательской логики для идентификации и флага неработоспособного экземпляра
  • Не требуется инициализация льготного периода для только что созданных экземпляров

Если следует использовать богатые состояния работоспособности:

  • Вы отправляете сигналы работоспособности через протокол HTTP/HTTPS и может отправлять сведения о работоспособности через текст ответа пробы
  • Вы хотите использовать пользовательскую логику для идентификации и маркировки неработоспособных экземпляров
  • Вы хотите задать льготный период инициализации для вновь созданных экземпляров, чтобы они поселились в устойчивом состоянии работоспособности, прежде чем сделать экземпляр подходящим для последовательного обновления или восстановления экземпляров

Двоичные состояния работоспособности

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

Протокол HTTP/HTTPS

Протокол Состояние работоспособности Description
http/https Работоспособно Чтобы отправить здоровый сигнал, приложение должно вернуть код ответа 200.
http/https Unhealthy Экземпляр будет помечен как неработоспособный , если код ответа 200 не получен от приложения.

Протокол TCP

Протокол Состояние работоспособности Description
TCP Работоспособно Чтобы отправить здоровый сигнал, необходимо сделать успешное подтверждение с предоставленной конечной точкой приложения.
TCP Unhealthy Экземпляр будет помечен как неработоспособный , если произошел сбой или неполное подтверждение с предоставленной конечной точкой приложения.

К некоторым сценариям, которые могут привести к неработоспособному состоянию , относятся:

  • Когда конечная точка приложения возвращает код состояния, отличный от 200
  • Если в экземплярах виртуальной машины не настроена конечная точка приложения, обеспечивая состояние работоспособности приложения
  • конечная точка приложения настроена неправильно;
  • Когда конечная точка приложения недоступна

Богатые состояния здоровья

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

Протокол HTTP/HTTPS

Протокол Состояние работоспособности Description
http/https Работоспособно Чтобы отправить здоровыйсигнал, приложение должно вернуть ответ пробы: Код ответа пробы: состояние 2xx, текст отклика пробы:{"ApplicationHealthState": "Healthy"}
http/https Unhealthy Чтобы отправить неработоспособный сигнал, приложение должно вернуть ответ пробы с кодом ответа пробы: состояние 2xx, текст отклика пробы:{"ApplicationHealthState": "Unhealthy"}
http/https Инициализация Экземпляр автоматически вводит состояние инициализации во время начала расширения. Дополнительные сведения см. в разделе "Инициализация состояния".
http/https Неизвестно Неизвестное состояние может возникать в следующих сценариях: если код состояния, отличный от 2xxx, возвращается приложением, когда время ожидания запроса пробы истекает, когда конечная точка приложения недоступна или неправильно настроена, когда отсутствует или недопустимое значение предоставляется ApplicationHealthState в тексте ответа или когда срок действия льготного периода истекает. Дополнительные сведения см. в разделе "Неизвестное состояние".

Протокол TCP

Протокол Состояние работоспособности Description
TCP Работоспособно Чтобы отправить здоровый сигнал, необходимо сделать успешное подтверждение с предоставленной конечной точкой приложения.
TCP Unhealthy Экземпляр будет помечен как неработоспособный , если произошел сбой или неполное подтверждение с предоставленной конечной точкой приложения.
TCP Инициализация Экземпляр автоматически вводит состояние инициализации во время начала расширения. Дополнительные сведения см. в разделе "Инициализация состояния".

Инициализация состояния

Это состояние относится только к богатым состояниям здравоохранения. Состояние инициализации происходит только один раз во время начала расширения и может быть настроено параметрами gracePeriod расширения и numberOfProbes.

При запуске расширения работоспособность приложения останется в состоянии инициализации до тех пор, пока не произойдет одно из двух сценариев:

  • То же состояние работоспособности (работоспособное или неработоспособное) сообщается последовательное число раз, как настроено с помощью numberOfProbes.
  • Срок gracePeriod действия истекает

Если одно и то же состояние работоспособности (работоспособное или неработоспособное) сообщается последовательно, работоспособность приложения переходит из состояния инициализации и в сообщаемое состояние работоспособности (работоспособное или неработоспособное).

Пример

Если numberOfProbes = 3, это означает:

  • Чтобы перейти от инициализации к работоспособному состоянию: расширение работоспособности приложения должно получать три последовательных сигналов работоспособности через протокол HTTP/HTTPS или TCP
  • Для перехода с инициализации в неработоспособное состояние: расширение работоспособности приложения должно получать три последовательных неработоспособных сигнала через протокол HTTP/HTTPS или TCP

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

  • Протокол HTTP/HTTPS: работоспособность приложения переходит от инициализации к неизвестному
  • ПРОТОКОЛ TCP: работоспособность приложения переходит от инициализации к неработоспособной

Неизвестное состояние

Это состояние относится только к богатым состояниям здравоохранения. Неизвестное состояние сообщается только для проб http или https и выполняется в следующих сценариях:

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

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

В следующей таблице показана интерпретация состояния работоспособности для скользящего обновления и восстановления экземпляров:

Состояние работоспособности Интерпретация последовательного обновления Триггер восстановления экземпляра
Инициализация Дождитесь того, как состояние будет находиться в работоспособном, неработоспособном или неизвестном No
Работоспособно Работоспособно No
Unhealthy Unhealthy Да
Неизвестно Unhealthy Да

Схема расширения для двоичных состояний работоспособности

В следующем коде JSON показана схема расширения "Работоспособность приложения". Для расширения требуется как минимум запрос "HTTP", "HTTPS" или "TCP" с указанным портом или путем запроса, соответственно.

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "1.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1
          }
        }
      }
    ]
  }
} 

Значения свойств

Имя. Значение и пример Тип данных
версия_API 2018-10-01 Дата
издатель Microsoft.ManagedServices строка
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) строка
typeHandlerVersion 1.0 строка

Настройки

Имя. Значение и пример Тип данных
protocol http или https или tcp строка
port Необязательно, если используется протокол http или https; обязательно, если используется протокол tcp INT
requestPath Обязательно, если используется протокол http или https; недопустимо, если используется протокол tcp строка
intervalInSeconds Необязательно, значение по умолчанию — 5 секунд. Это интервал между каждой пробой работоспособности. Например, если интервалInSeconds == 5, проба будет отправляться в локальную конечную точку приложения каждые 5 секунд. INT
numberOfProbes Необязательно, значение по умолчанию — 1. Это число последовательных проб, необходимых для изменения состояния работоспособности. Например, если numberOfProbles == 3, вам потребуется 3 последовательных сигналов "Работоспособность" для изменения состояния работоспособности с "Неработоспособное" в состояние "Работоспособность". Это же требование применяется к изменению состояния работоспособности в состояние "Неработоспособное". INT

Схема расширения для расширенных состояний работоспособности

В следующем формате JSON показана схема расширения "Богатые состояния работоспособности". Для расширения требуется как минимум запрос http или https с соответствующим портом или путем запроса соответственно. Также поддерживаются пробы TCP, но не смогут задать ApplicationHealthState его в теле ответа пробы и не будет иметь доступа к неизвестному состоянию.

{
  "extensionProfile" : {
     "extensions" : [
      {
        "name": "HealthExtension",
        "properties": {
          "publisher": "Microsoft.ManagedServices",
          "type": "<ApplicationHealthLinux or ApplicationHealthWindows>",
          "autoUpgradeMinorVersion": true,
          "typeHandlerVersion": "2.0",
          "settings": {
            "protocol": "<protocol>",
            "port": <port>,
            "requestPath": "</requestPath>",
            "intervalInSeconds": 5,
            "numberOfProbes": 1,
            "gracePeriod": 600
          }
        }
      }
    ]
  }
} 

Значения свойств

Имя. Значение и пример Тип данных
версия_API 2018-10-01 Дата
издатель Microsoft.ManagedServices строка
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) строка
typeHandlerVersion 2.0 строка

Настройки

Имя. Значение и пример Тип данных
protocol http или https или tcp строка
port Необязательно, если используется протокол http или https; обязательно, если используется протокол tcp INT
requestPath Обязательно, если используется протокол http или https; недопустимо, если используется протокол tcp строка
intervalInSeconds Необязательно, значение по умолчанию — 5 секунд. Это интервал между каждой пробой работоспособности. Например, если интервалInSeconds == 5, проба будет отправляться в локальную конечную точку приложения каждые 5 секунд. INT
numberOfProbes Необязательно, значение по умолчанию — 1. Это число последовательных проб, необходимых для изменения состояния работоспособности. Например, если numberOfProbles == 3, вам потребуется 3 последовательных сигналов "Здоровый" для изменения состояния работоспособности с "Неработоспособно"/"Неизвестно" в состояние "Работоспособно". Это же требование применяется к изменению состояния работоспособности на состояние "Неработоспособное" или "Неизвестно". INT
gracePeriod Необязательный, по умолчанию = intervalInSeconds * numberOfProbes; максимальный льготный период составляет 7200 секунд INT

Развертывание расширение "Работоспособность приложения"

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

Двоичные состояния работоспособности

В следующем примере расширение "Работоспособность приложения" (с именем myHealthExtension) добавляется в атрибут extensionProfile в модели масштабируемого набора на основе Windows.

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

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>", 
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "1.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>"
    }
  }
}

Используйте PATCH для изменения уже развернутого расширения.

Обновите виртуальные машины, чтобы установить расширение.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

Богатые состояния здоровья

В следующем примере добавляется расширение "Работоспособность приложений — богатые состояния " (с именем myHealthExtension) в extensionProfile модель масштабируемого набора масштабируемого набора Windows.

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

PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachineScaleSets/myScaleSet/extensions/myHealthExtension?api-version=2018-10-01`
{
  "name": "myHealthExtension",
  "location": "<location>",
  "properties": {
    "publisher": "Microsoft.ManagedServices",
    "type": "ApplicationHealthWindows",
    "autoUpgradeMinorVersion": true,
    "typeHandlerVersion": "2.0",
    "settings": {
      "protocol": "<protocol>",
      "port": <port>,
      "requestPath": "</requestPath>",
      "intervalInSeconds": <intervalInSeconds>,
      "numberOfProbes": <numberOfProbes>,
      "gracePeriod": <gracePeriod>
    }
  }
}

Используйте PATCH для изменения уже развернутого расширения.

Обновите виртуальные машины, чтобы установить расширение.

POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
  "instanceIds": ["*"]
}

Устранение неполадок

Просмотр VMHealth — один экземпляр

Get-AzVmssVM 
  -InstanceView `
  -ResourceGroupName <rgName> `
  -VMScaleSetName <vmssName> `
  -InstanceId <instanceId> 

Просмотр VMHealth — пакетный вызов

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

GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`

Состояние работоспособности не отображается

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

Журнал выходных данных выполнения расширения

Выходные данные выполнения расширения регистрируются в файле, расположенном в следующих каталогах:

C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension

Журналы также периодически записывают состояние работоспособности приложения.

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

Узнайте, как развернуть приложение на Масштабируемые наборы виртуальных машин.