Uso de la extensión Estado de la aplicación con Azure Virtual Machines
Supervisar el estado de la aplicación es una señal importante para administrar y actualizar las máquinas virtuales. Azure Virtual Machines proporciona compatibilidad con la aplicación de revisiones automática de invitado de máquina virtual, que depende del seguimiento de estado de las instancias individuales para actualizar de forma segura las máquinas virtuales.
En este artículo se describe cómo usar los dos tipos de la extensión Estado de la aplicación, Binary Health States o Rich Health States, para supervisar el estado de las aplicaciones implementadas en máquinas virtuales de Azure.
El seguimiento de estado de la aplicación también está disponible en conjuntos de escalado de máquinas virtuales y ayuda a habilitar funcionalidades como las actualizaciones graduales, actualizaciones automáticas de imágenes de sistema operativo y reparaciones automáticas de instancias. Para experimentar estas funcionalidades con las ventajas agregadas de escalado, disponibilidad y flexibilidad en los conjuntos de escalado, puede asociar la máquina virtual a un conjunto de escalado existente o crear un nuevo conjunto de escalado.
Requisitos previos
En este artículo se da por supuesto que está familiarizado con las extensiones de máquinas virtuales de Azure.
Precaución
La extensión Estado de la aplicación espera recibir una respuesta de sondeo coherente en el puerto tcp
configurado o la ruta de acceso http/https
de la solicitud para etiquetar una máquina virtual como Correcta. Si no se ejecuta ninguna aplicación en la máquina virtual o no puede configurar una respuesta de sondeo, la máquina virtual se mostrará como Incorrecto (Binary Health States) o Desconocido (Rich Health States). Consulte ejemplos de estado de la aplicación para obtener ejemplos de respuestas de sondeo de estado que se emiten a un punto de conexión local.
Cuándo se debe usar la extensión Estado de la aplicación
La extensión Estado de la aplicación informa sobre el estado de la aplicación desde dentro de la máquina virtual. La extensión, de la que se hace un sondeo en un punto de conexión de la aplicación local, actualiza el estado de mantenimiento en función de las respuestas TCP/HTTP(S) recibidas de la aplicación. Azure usa este estado de mantenimiento para supervisar y detectar errores de aplicación de revisiones durante la aplicación de revisiones automática de invitado de máquina virtual.
La extensión informa sobre el estado desde dentro de una máquina virtual y se puede usar en situaciones donde no se puede usar un sondeo externo, como los sondeos de estado de Azure Load Balancer.
La extensión Estado de la aplicación es una señal proporcionada por el cliente sobre el estado de la aplicación que se ejecuta dentro de la máquina virtual. Esta extensión es diferente del estado de los recursos, que es una señal proporcionada por la plataforma que se usa para notificar eventos de nivel de servicio que afectan al rendimiento de la máquina virtual.
Binary Health States frente a Rich Health States
Las extensiones Estado de la aplicación tienen dos opciones disponibles: Binary Health States y Rich Health States. En la tabla siguiente se resaltan algunas diferencias clave entre ambas opciones. Consulte el final de esta sección para obtener recomendaciones generales.
Características | Binary Health States | Rich Health States |
---|---|---|
Estados de mantenimiento disponibles | Dos estados disponibles: Correcto, Incorrecto | Cuatro estados disponibles: Correcto, Incorrecto, Inicializando, Desconocido1 |
Envío de señales de mantenimiento | Las señales de mantenimiento se envían a través de códigos de respuesta HTTP/HTTPS o conexiones TCP. | Las señales de mantenimiento en el protocolo HTTP/HTTPS se envían a través del código de respuesta de sondeo y el cuerpo de la respuesta. Las señales de mantenimiento a través del protocolo TCP permanecen sin cambios con respecto a Binary Health States. |
Identificación de instancias Incorrectas | El estado de las instancias será Incorrecto de forma automática si no se recibe una señal de estado Correcto de la aplicación. Una instancia Incorrecto puede indicar un problema con la configuración de la extensión (por ejemplo, un punto de conexión inaccesible) o un problema con la aplicación (por ejemplo, código de estado distinto de 200). | El estado de las instancias solo será Incorrecto si la aplicación emite una respuesta de sondeo incorrecta. Los usuarios son responsables de implementar la lógica personalizada para identificar y marcar instancias con aplicaciones Incorrectas2. El estado de las instancias con una configuración de extensión incorrecta (por ejemplo, un punto de conexión inaccesible) o respuestas de sondeo de estado no válidas será Desconocido2. |
Estado Inicializando de las instancias recién creadas | El estado Inicializando no está disponible. Las instancias recién creadas pueden tardar algún tiempo en establecerse en un estado estable. | Inicializar el estado permite a las instancias recién creadas establecerse en un estado de mantenimiento estable antes de exponer el estado de mantenimiento como Correcto, Incorrecto o Desconocido. |
Protocolo HTTP/HTTPS | Compatible | Compatible |
Protocolo TCP | Compatible | Compatibilidad limitada: el estado Desconocido no está disponible en el protocolo TCP. Consulte la tabla de protocolos de Rich Health States para conocer los comportamientos del estado de mantenimiento en TCP. |
1 El estado Desconocido no está disponible en el protocolo TCP. 2 Solo es aplicable para el protocolo HTTP/HTTPS. El protocolo TCP seguirá el mismo proceso de identificación de las instancias con estado Incorrecto que en Binary Health States.
Utilice Binary Health States si:
- No está interesado en configurar la lógica personalizada para identificar y marcar una instancia incorrecta
- No necesita un período de gracia de inicialización para las instancias recién creadas
Utilice Rich Health States si:
- Envía señales de mantenimiento a través del protocolo HTTP/HTTPS y puede enviar información sobre el estado a través del cuerpo de la respuesta de sondeo
- Le gustaría usar la lógica personalizada para identificar y marcar instancias incorrectas
- Desea establecer un período de gracia de inicialización que permita que las instancias recién creadas se establezcan en un estado de mantenimiento estable.
Binary Health States
Los informes de Binary Health States contienen dos estados de mantenimiento, Correcto e Incorrecto. En las tablas siguientes se proporciona una breve descripción de cómo se configuran los estados de mantenimiento.
Protocolo HTTP/HTTPS
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
HTTP/HTTPS | Healthy | Para enviar una señal Correcto, se espera que la aplicación devuelva un código de respuesta 200. |
HTTP/HTTPS | Unhealthy (Incorrecto) | La instancia se marca con el estado Incorrecto si no se recibe un código de respuesta 200 de la aplicación. |
Protocolo TCP
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
TCP | Healthy | Para enviar una señal Correcta, se debe realizar un protocolo de enlace correcto con el punto de conexión de la aplicación proporcionado. |
TCP | Unhealthy (Incorrecto) | La instancia se marca con el estado Incorrecto si se produce un protocolo de enlace con errores o incompleto con el punto de conexión de la aplicación proporcionado. |
Entre algunos de los escenarios comunes que pueden dar lugar a un estado Incorrecto se incluyen los siguientes:
- Cuando el punto de conexión de la aplicación devuelve un código de estado distinto de 200
- Cuando no hay ningún punto de conexión de la aplicación configurado dentro de las instancias de máquina virtual para proporcionar el estado de mantenimiento de la aplicación
- Cuando el punto de conexión de la aplicación no está configurado correctamente
- Cuando no se puede tener acceso al punto de conexión de la aplicación
Rich Health States
Los informes de Rich Health States contienen cuatro estados de mantenimiento, Inicializando, Correcto, Incorrecto y Desconocido. En las tablas siguientes se proporciona una breve descripción de cómo se configura cada estado de mantenimiento.
Protocolo HTTP/HTTPS
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
HTTP/HTTPS | Healthy | Para enviar una señal Correcta, se espera que la aplicación devuelva una respuesta de sondeo con: código de respuesta de sondeo: estado 2xx, cuerpo de respuesta del sondeo: {"ApplicationHealthState": "Healthy"} |
HTTP/HTTPS | Unhealthy (Incorrecto) | Para enviar una señal Incorrecta, se espera que la aplicación devuelva una respuesta de sondeo con: código de respuesta de sondeo: estado 2xx, cuerpo de respuesta del sondeo: {"ApplicationHealthState": "Unhealthy"} |
HTTP/HTTPS | Inicializando | La instancia entra automáticamente en un estado Inicializando a la hora de inicio de la extensión. Para obtener más información, consulte Estado Inicializando. |
HTTP/HTTPS | Desconocido | Un estado Desconocido puede producirse en los escenarios siguientes: cuando la aplicación devuelve un código de estado distinto de 2xx, cuando la solicitud de sondeo agota el tiempo de espera, cuando el punto de conexión de la aplicación es inaccesible o está incorrectamente configurado, cuando se proporciona un valor que falta o no es válido para ApplicationHealthState en el cuerpo de la respuesta o cuando expira el período de gracia. Para obtener más información, consulte Estado Desconocido. |
Protocolo TCP
Protocolo | Estado de mantenimiento | Descripción |
---|---|---|
TCP | Healthy | Para enviar una señal Correcta, se debe realizar un protocolo de enlace correcto con el punto de conexión de la aplicación proporcionado. |
TCP | Unhealthy (Incorrecto) | La instancia se marca con el estado Incorrecto si se produce un protocolo de enlace con errores o incompleto con el punto de conexión de la aplicación proporcionado. |
TCP | Inicializando | La instancia entra automáticamente en un estado Inicializando a la hora de inicio de la extensión. Para obtener más información, consulte Estado Inicializando. |
Estado Inicializando
Este estado solo se aplica a Rich Health States. El estado Inicializando solo se produce una vez a la hora de inicio de la extensión y se puede configurar mediante los valores gracePeriod
y numberOfProbes
de la extensión.
Durante el inicio de la extensión, el estado de la aplicación permanecerá como Inicializando hasta que se produzca uno de estos dos escenarios:
- El mismo estado de mantenimiento (Correcto o Incorrecto) se notifica un número consecutivo de veces, tal como se configura a través de numberOfProbes
gracePeriod
expira
Si el mismo estado de mantenimiento (Correcto o Incorrecto) se notifica de forma consecutiva, el estado de la aplicación cambia de Inicializando al estado de mantenimiento notificado (Correcto o Incorrecto).
Ejemplo
Si numberOfProbes
= 3, significa lo siguiente:
- Para pasar del estado Inicializando a Correcto: la extensión Estado de la aplicación debe recibir tres señales Correctas consecutivas a través del protocolo HTTP/HTTPS o TCP
- Para pasar del estado Inicializando a Incorrecto: la extensión Estado de la aplicación debe recibir tres señales Incorrectas consecutivas a través del protocolo HTTP/HTTPS o TCP
Si gracePeriod
expira antes de que la aplicación notifique un estado de mantenimiento consecutivo, el estado de la instancia se determinará de la siguiente manera:
- Protocolo HTTP/HTTPS: el estado de la aplicación cambia de Inicializando a Desconocido.
- Protocolo TCP: el estado de la aplicación cambia de Inicializando a Incorrecto.
Estado desconocido.
El estado Desconocido solo se aplica a Rich Health States. Este estado solo se notifica para sondeos http
o https
y se produce en los escenarios siguientes:
- Cuando la aplicación devuelve un código de estado distinto de 2xx
- Cuando la solicitud de sondeo agota el tiempo de espera
- Cuando el punto de conexión de la aplicación es inaccesible o está incorrectamente configurado
- Cuando se proporciona un valor que falta o no es válido para
ApplicationHealthState
en el cuerpo de la respuesta - Cuando expira el período de gracia
Esquema de extensión para Binary Health States
En el siguiente JSON, se muestra el esquema para la extensión de Estado de la aplicación. La extensión requiere como mínimo una solicitud "tcp", "http" o "https"con un puerto asociado o una ruta de acceso de solicitud, respectivamente.
{
"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
}
}
}
]
}
}
Valores de propiedad
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
apiVersion | 2018-10-01 o superior |
date |
publisher | Microsoft.ManagedServices |
string |
type | ApplicationHealthLinux Linux, ApplicationHealthWindows (Windows) |
string |
typeHandlerVersion | 1.0 |
string |
Configuración
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
protocol | http , https o tcp |
string |
port | Opcional cuando el protocolo es http o https , u obligatorio cuando el protocolo es tcp . |
int |
requestPath | Obligatorio cuando el protocolo es http o https , o no se permite cuando el protocolo es tcp . |
string |
intervalInSeconds | Opcional, el valor predeterminado es 5 segundos. Este valor es el intervalo entre cada sondeo de estado. Por ejemplo, si intervalInSeconds == 5, se enviará un sondeo al punto de conexión de la aplicación local una vez cada 5 segundos. | int |
numberOfProbes | Opcional, el valor predeterminado es 1. Este valor es el número de sondeos consecutivos necesarios para que cambie el estado de mantenimiento. Por ejemplo, si numberOfProbles == 3, necesitará 3 señales "Healthy" consecutivas para cambiar el estado de mantenimiento de "Unhealthy" a "Healthy". Se aplica el mismo requisito para cambiar el estado de mantenimiento al estado "Unhealthy". | int |
Esquema de extensión para Rich Health States
En el siguiente JSON, se muestra el esquema para la extensión Rich Health States. La extensión requiere como mínimo una solicitud "http" o "https"con un puerto asociado o una ruta de acceso de solicitud, respectivamente. También se admiten sondeos TCP, pero no podrán establecer ApplicationHealthState
mediante el cuerpo de la respuesta de sondeo y no tendrán acceso al estado Desconocido.
{
"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
}
}
}
]
}
}
Valores de propiedad
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
apiVersion | 2018-10-01 o superior |
date |
publisher | Microsoft.ManagedServices |
string |
type | ApplicationHealthLinux Linux, ApplicationHealthWindows (Windows) |
string |
typeHandlerVersion | 2.0 |
string |
Configuración
Nombre | Valor / ejemplo | Tipo de datos |
---|---|---|
protocol | http , https o tcp |
string |
port | Opcional cuando el protocolo es http o https , u obligatorio cuando el protocolo es tcp . |
int |
requestPath | Obligatorio cuando el protocolo es http o https , o no se permite cuando el protocolo es tcp . |
string |
intervalInSeconds | Opcional, el valor predeterminado es 5 segundos. Este valor es el intervalo entre cada sondeo de estado. Por ejemplo, si intervalInSeconds == 5, se enviará un sondeo al punto de conexión de la aplicación local una vez cada 5 segundos. | int |
numberOfProbes | Opcional, el valor predeterminado es 1. Este valor es el número de sondeos consecutivos necesarios para que cambie el estado de mantenimiento. Por ejemplo, si numberOfProbles == 3, necesitará 3 señales "Healthy" consecutivas para cambiar el estado de mantenimiento de "Unhealthy"/"Unknown" a "Healthy". Se aplica el mismo requisito para cambiar el estado de mantenimiento al estado "Unhealthy" o "Unknown". | int |
gracePeriod | Opcional, el valor predeterminado = intervalInSeconds * numberOfProbes ; el período de gracia máximo es de 7200 segundos |
int |
Implementación de la extensión Estado de la aplicación
Hay varias maneras de implementar la extensión Estado de la aplicación en los conjuntos de escalado, tal como se detalla en los siguientes ejemplos.
Binary Health States
En el ejemplo siguiente se agrega la extensión Estado de la aplicación denominada myHealthExtension a una máquina virtual basada en Windows.
También puede usar este ejemplo para cambiar una extensión existente de Rich Health States a Binary Health realizando una llamada PATCH en lugar de una 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>"
}
}
}
Use PATCH
para editar una extensión ya implementada.
Rich Health States
En el siguiente ejemplo se agrega la extensión Estado de la aplicación: Rich States (con el nombre myHealthExtension) a una máquina virtual basada en Windows.
También puede usar este ejemplo para actualizar una extensión existente de Binary a Rich Health States realizando una llamada PATCH en lugar de una 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>
}
}
}
Use PATCH
para editar una extensión ya implementada.
Solución de problemas
Necesita ayuda para configurar una respuesta de sondeo
Consulte ejemplos de estado de la aplicación para obtener ejemplos de respuestas de sondeo de estado que se emiten a un punto de conexión local.
Visualización de VMHealth
GET https://management.azure.com/subscriptions/{subscription-id}/resourceGroups/myResourceGroup/providers/Microsoft.Compute/virtualMachines/myVM/instanceView?api-version=2023-07-01
Respuesta de ejemplo (consulte el objeto "vmHealth" para obtener el estado de mantenimiento de la máquina virtual más reciente).
"vmHealth": {
"status": {
"code": "HealthState/unknown",
"level": "Warning",
"displayStatus": "The VM health is unknown",
"time": "2023-12-04T22:25:39+00:00"
}
}
Registro de salida de ejecución de las extensiones
El resultado de la ejecución de las extensiones se registra en los archivos que se encuentran en los siguientes directorios:
C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension
Los registros también capturan periódicamente el estado de mantenimiento de la aplicación.