Использование расширения "Работоспособности приложений" с azure Виртуальные машины
Мониторинг работоспособности приложения является важным сигналом для управления виртуальными машинами. Azure Виртуальные машины поддерживает автоматическое исправление гостевой виртуальной машины, которое зависит от мониторинга работоспособности отдельных экземпляров для безопасного обновления виртуальных машин.
В этой статье описывается, как использовать два типа расширения "Работоспособность приложений", "Двоичные состояния работоспособности" или "Богатые состояния работоспособности" для мониторинга работоспособности приложений, развернутых на виртуальных машинах 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
отсутствующее или недопустимое значение - Срок действия льготного периода
Схема расширения для двоичных состояний работоспособности
В следующем коде 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 |
Развертывание расширение "Работоспособность приложения"
Существует несколько способов развертывания расширения "Работоспособность приложений" на виртуальных машинах, как описано в следующих примерах.
Двоичные состояния работоспособности
В следующем примере в виртуальную машину под управлением Windows добавляется расширение "Работоспособное приложение" с именем myHealthExtension .
Этот пример также можно использовать для изменения существующего расширения с расширенных состояний работоспособности на двоичное работоспособность, выполнив вызов PATCH вместо PUT.
PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/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
для изменения уже развернутого расширения.
Богатые состояния здоровья
Следующий пример добавляет расширение Application Health — Rich States (с именем myHealthExtension) в виртуальную машину под управлением Windows.
Этот пример также можно использовать для обновления существующего расширения с двоичного файла до расширенных состояний работоспособности, выполнив вызов PATCH вместо PUT.
PUT on `/subscriptions/subscription_id/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/extensions/myHealthExtension?api-version=2018-10-01`
{
"name": "myHealthExtension",
"location": "<location>",
"properties": {
"publisher": "Microsoft.ManagedServices",
"type": "ApplicationHealthWindows",
"autoUpgradeMinorVersion": true,
"typeHandlerVersion": "2.0",
"settings": {
"requestPath": "</requestPath>",
"intervalInSeconds": <intervalInSeconds>,
"numberOfProbes": <numberOfProbes>,
"gracePeriod": <gracePeriod>
}
}
}
Используйте PATCH
для изменения уже развернутого расширения.
Устранение неполадок
Нужна помощь в настройке ответа пробы
Примеры работоспособности приложения см. в примерах ответов пробы работоспособности, создаваемых локальной конечной точке.
Просмотр VMHealth
GET https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/instanceView?api-version=2023-07-01
Пример ответа (см. объект vmHealth для последнего состояния работоспособности виртуальной машины)
"vmHealth": {
"status": {
"code": "HealthState/unknown",
"level": "Warning",
"displayStatus": "The VM health is unknown",
"time": "2023-12-04T22:25:39+00:00"
}
}
Журнал выходных данных выполнения расширения
Выходные данные выполнения расширения регистрируются в файле, расположенном в следующих каталогах:
C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension
Журналы также периодически записывают состояние работоспособности приложения.