Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
Monitorar a integridade do aplicativo é um sinal importante para gerenciar e atualizar sua implantação. Os Conjuntos de Dimensionamento de Máquinas Virtuais do Azure fornecem suporte para Atualizações Graduais, incluindo Atualizações Automáticas de Imagem do SO e Patching Automático de Convidado de VM, que dependem do monitoramento de integridade das instâncias individuais para atualizar a sua distribuição. Você também pode usar a Extensão de Integridade do Aplicativo para monitorizar a integridade do aplicativo de cada instância no seu conjunto de escalas e realizar reparos de instâncias usando Reparos Automáticos de Instância.
Este artigo descreve como poderá usar os dois tipos de extensões de Saúde da Aplicação, Estados de Saúde Binários ou Estados de Saúde Avançados, para monitorizar a saúde das suas aplicações implantadas em Conjuntos de Escala de Máquinas Virtuais.
Pré-requisitos
Este artigo pressupõe que você esteja familiarizado com:
- Extensões de máquina virtual do Azure
- Modificando conjuntos de dimensionamento de máquinas virtuais
Atenção
A Extensão de Integridade do Aplicativo espera receber uma resposta de teste consistente na porta tcp configurada ou no caminho http/https da solicitação para rotular uma VM como Íntegra. Se nenhum aplicativo estiver sendo executado na VM ou se você não conseguir configurar uma resposta de teste, sua VM aparecerá como Não Íntegra (Estados de Integridade Binários) ou Desconhecido (Estados de Integridade Avançados). Consulte amostras de integridade do aplicativo para obter exemplos de respostas de sondas de integridade que estão a ser enviadas para um ponto final local.
Nota
Apenas uma fonte de monitoramento de integridade pode ser usada para um Conjunto de Dimensionamento de Máquina Virtual, uma Extensão de Integridade do Aplicativo ou uma Sonda de Integridade. Se você tiver ambas as opções habilitadas, precisará remover uma antes de usar serviços de orquestração, como reparos de instância ou atualizações automáticas do sistema operacional.
Quando usar a extensão Integridade da Aplicação
A Extensão de Integridade do Aplicativo é implantada dentro de uma instância do Conjunto de Escalonamento de Máquinas Virtuais e relata a integridade do aplicativo de dentro da instância do conjunto de escalonamento. A extensão sonda um endpoint da aplicação local e atualizará o status de integridade com base nas respostas TCP/HTTP(S) recebidas da aplicação. Esse status de integridade é usado pelo Azure para iniciar reparos em instâncias não íntegras e para determinar se uma instância é qualificada para operações de atualização.
A extensão relata a integridade de dentro de uma VM e pode ser usada em situações em que uma sonda externa, como as sondas de integridade do Balanceador de Carga do Azure, não pode ser usada.
Estados de saúde binários versus ricos
As Extensões de Integridade do Aplicativo têm duas opções: Estados Binários de Integridade e Estados Avançados de Integridade disponíveis. A tabela a seguir destaca algumas diferenças importantes entre as duas opções. Consulte o final desta secção para recomendações gerais.
| Funcionalidades | Estados de saúde binários | Estados ricos em saúde |
|---|---|---|
| Estados de saúde disponíveis | Dois estados disponíveis: Saudável, Não Saudável | Quatro estados disponíveis: Saudável, Não Saudável, Inicializando, Desconhecido1 |
| Envio de sinais de saúde | Os sinais de integridade são enviados através de códigos de resposta HTTP/HTTPS ou conexões TCP. | Os sinais de saúde no protocolo HTTP/HTTPS são enviados por meio do código de resposta da sonda e do corpo da resposta. Os sinais de integridade através do protocolo TCP permanecem inalterados dos Estados de Integridade Binários. |
| Identificando instâncias não saudáveis | As instâncias cairão automaticamente no estado Não Saudável se um sinal Saudável não for recebido da aplicação. Uma instância inválida pode indicar um problema com a configuração da extensão (por exemplo, ponto de extremidade inacessível) ou um problema com a aplicação (por exemplo, código de status diferente de 200). | As instâncias só entrarão em um estado Não Íntegro se o aplicativo emitir uma resposta de teste Não Íntegro. Os usuários são responsáveis pela implementação de lógica personalizada para identificar e sinalizar instâncias com aplicativos não íntegros 2. As instâncias com configurações de extensão incorretas (por exemplo, ponto de extremidade inacessível) ou respostas de teste de integridade inválidas se enquadrarão no estadoDesconhecido 2. |
| Estado de inicialização para instâncias recém-criadas | O estado de inicialização não está disponível. As instâncias recém-criadas podem levar algum tempo antes de se estabelecerem em um estado estacionário. | O estado de inicialização permite que as instâncias recém-criadas se estabeleçam em um estado de integridade estável antes de tornar a instância elegível para atualizações contínuas ou operações de reparo de instância. |
| Protocolo HTTP/HTTPS | Suportado | Suportado |
| Protocolo TCP | Suportado | Suporte limitado – O estado desconhecido não está disponível no protocolo TCP. Consulte a tabela de protocolos Rich Health States para comportamentos de Health State no TCP. |
1 O estado Desconhecido não está disponível no protocolo TCP. 2 Aplicável apenas ao protocolo HTTP/HTTPS. O protocolo TCP seguirá o mesmo processo de identificação de instâncias mal funcionantes como nos Estados de Saúde Binários.
Em geral, você deve usar Rich Health States se:
- Você envia sinais de estado através do protocolo HTTP/HTTPS e pode submeter informações de saúde através do corpo de resposta da sonda.
- Você gostaria de usar lógica personalizada para identificar e marcar instâncias com problemas
- Você gostaria de definir um período de carência de inicialização para novas instâncias, para que elas atinjam um estado de integridade saudável antes de tornar a instância elegível para atualização gradual ou reparos de instâncias.
- Você está interessado em ter mais controle sobre o processo de pedido e atualização com atualizações contínuas, emitindo métricas personalizadas
Você deve usar Estados de saúde binários se:
- Você não tem interesse em configurar a lógica personalizada para identificar e sinalizar uma instância com problemas.
- Não é necessário um período de carência de inicialização para instâncias recém-criadas
- Você não precisa usar métricas personalizadas ao executar uma atualização contínua em suas VMs
Estados ricos em saúde
Os relatórios dos Estados de Saúde Ricos contêm quatro Estados de Saúde, Inicializando, Saudável, Não Saudável e Desconhecido. As tabelas a seguir fornecem uma breve descrição sobre como cada Estado de Saúde é configurado.
Protocolo HTTP/HTTPS
| Protocolo | Estado de Saúde | Descrição |
|---|---|---|
| http/https | Saudável | Para enviar um sinal Saudável, espera-se que a aplicação retorne uma resposta ao teste com: Código de resposta ao teste: Status 2xx, Corpo de resposta ao teste: {"ApplicationHealthState": "Healthy"} |
| http/https | Insalubre | Para enviar um sinal não saudável, espera-se que a aplicação retorne uma resposta de sonda com: Código de Resposta da Sonda: Status 2xx, Corpo de Resposta da Sonda: {"ApplicationHealthState": "Unhealthy"} |
| http/https | A inicializar | A instância entra automaticamente em um estado de inicialização na hora de início da extensão. Para obter mais informações, consulte Estado de inicialização. |
| http/https | Desconhecido | Um estado Desconhecido pode ocorrer nos seguintes cenários: quando um código de status não-2xx é retornado pelo aplicativo, quando a solicitação de teste expira, quando o ponto de extremidade do aplicativo está inacessível ou configurado incorretamente, quando um valor ausente ou inválido é fornecido no ApplicationHealthState corpo da resposta ou quando o período de carência expira. Para obter mais informações, consulte Estado desconhecido. |
Protocolo TCP
| Protocolo | Estado de Saúde | Descrição |
|---|---|---|
| TCP | Saudável | Para enviar um sinal de Saúde, é necessário realizar um handshake bem-sucedido com o ponto de extremidade do aplicativo fornecido. |
| TCP | Insalubre | A instância será marcada como Não íntegra se ocorrer um handshake fracassado ou incompleto com o endpoint da aplicação fornecido. |
| TCP | A inicializar | A instância entra automaticamente em um estado de inicialização na hora de início da extensão. Para obter mais informações, consulte Estado de inicialização. |
Estado de inicialização
Este estado só se aplica aos Estados Ricos em Saúde. O estado de inicialização ocorre apenas uma vez na hora de início da extensão e pode ser configurado pelas configurações gracePeriod de extensão e numberOfProbes.
Na inicialização da extensão, a integridade do aplicativo permanecerá no estado de inicialização até que um dos dois cenários ocorra:
- O mesmo estado de integridade (íntegro ou não íntegro) é relatado um número consecutivo de vezes, conforme configurado por meio de numberOfProbes
- O
gracePeriodprazo expira
Se o mesmo Estado de Integridade (Saudável ou Não Íntegro) for relatado consecutivamente, a integridade do aplicativo fará a transição do estado de Inicialização para o Estado de Integridade relatado (Saudável ou Não Íntegro).
Exemplo
Se numberOfProbes = 3, isso significaria:
- Para fazer a transição do estado Inicializando para o estado Íntegro: A extensão de integridade da aplicação deve receber três sinais de Estado Íntegro consecutivos via protocolo HTTP/HTTPS ou TCP.
- Para fazer a transição do estado Inicializando para o estado Não Íntegro: A extensão de integridade do aplicativo deve receber três sinais consecutivos de Não Íntegro via HTTP/HTTPS ou protocolo TCP
Se o gracePeriod expirar antes que um status de integridade consecutivo seja relatado pelo aplicativo, a integridade da instância será determinada da seguinte maneira:
- Protocolo HTTP/HTTPS: A integridade do aplicativo passará de Inicializando para Desconhecido
- Protocolo TCP: A saúde do aplicativo fará a transição de Inicializando para Não Saudável
Estado desconhecido
Este estado só se aplica aos Estados Ricos em Saúde. O estado Desconhecido é relatado apenas para testes "http" ou "https" e ocorre nos seguintes cenários:
- Quando um código de status não-2xx é retornado pelo aplicativo
- Quando o tempo limite da solicitação de sonda expira
- Quando o ponto de extremidade do aplicativo está inacessível ou configurado incorretamente
- Quando um valor ausente ou inválido é fornecido no
ApplicationHealthStatecorpo da resposta - Quando expira o período de carência
Uma instância em um estado Desconhecido é tratada de forma semelhante a uma instância Insalubre. Se ativado, os reparos de instância serão realizados numa instância Desconhecida enquanto as atualizações em curso serão pausadas até que a instância volte a um estado Saudável.
A tabela a seguir mostra a interpretação do estado de saúde para atualizações contínuas e reparos de instância::
| Estado de Saúde | Interpretação do Rolling Upgrade | Ativação de reparos de instância |
|---|---|---|
| A inicializar | Aguarde que o estado esteja em Saudável, Insalubre ou Desconhecido | Não |
| Saudável | Saudável | Não |
| Insalubre | Insalubre | Sim |
| Desconhecido | Insalubre | Sim |
Esquema de extensão para Estados de Saúde Avançados
O JSON a seguir mostra o esquema para a extensão Rich Health States. A extensão requer no mínimo uma solicitação "http" ou "https" com uma porta associada ou caminho de solicitação, respectivamente. As sondas TCP também são suportadas, mas não poderão definir através do corpo de resposta da sonda o ApplicationHealthState e não terão acesso ao estado Desconhecido.
{
"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 propriedade
| Nome | Valor / Exemplo | Tipo de Dados |
|---|---|---|
| Versão da API | 2018-10-01 |
data |
| editora | Microsoft.ManagedServices |
corda |
| tipo |
ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) |
corda |
| typeHandlerVersion | 2.0 |
corda |
Definições
| Nome | Valor / Exemplo | Tipo de Dados |
|---|---|---|
| protocolo |
http ou https ou tcp |
corda |
| porto | Opcional quando o protocolo é http ou https, obrigatório quando o protocolo é tcp |
número inteiro |
| caminho de solicitação | Obrigatório quando o protocolo é http ou https, não permitido quando o protocolo é tcp |
corda |
| intervaloEmSegundos | Opcional, o padrão é 5 segundos. Este é o intervalo entre cada sonda de saúde. Por exemplo, se intervalInSeconds == 5, uma sonda será enviada para o endpoint da aplicação local uma vez a cada 5 segundos. O valor mínimo é de 5 segundos, o máximo é de 60 segundos. | número inteiro |
| número de sondas | Opcional, o padrão é 1. Este é o número de sondas consecutivas necessárias para que o estado de saúde seja alterado. Por exemplo, se numberOfProbles == 3, você precisará de 3 sinais consecutivos de "Saudável" para alterar o status de saúde de "Não íntegro"/"Desconhecido" para o estado "Saudável". O mesmo requisito aplica-se para alterar o estado de saúde para "Não íntegro" ou "Desconhecido". O valor mínimo é 1 sonda, o máximo é 3 sondas. | número inteiro |
| período de graça | Opcional, padrão = intervalInSeconds * numberOfProbes; período de carência máximo é de 7200 segundos |
número inteiro |
Estados de saúde binários
O relatório do Estado de Saúde Binário contém dois Estados de Saúde, Saudável e Não Saudável. As tabelas a seguir fornecem uma breve descrição sobre como os Estados de Saúde são configurados.
Protocolo HTTP/HTTPS
| Protocolo | Estado de Saúde | Descrição |
|---|---|---|
| http/https | Saudável | Para enviar um sinal de funcionamento, espera-se que a aplicação retorne um código de resposta 200. |
| http/https | Insalubre | A instância será marcada como Não íntegra se um código de resposta 200 não for recebido do aplicativo. |
Protocolo TCP
| Protocolo | Estado de Saúde | Descrição |
|---|---|---|
| TCP | Saudável | Para enviar um sinal de Saúde, é necessário realizar um handshake bem-sucedido com o ponto de extremidade do aplicativo fornecido. |
| TCP | Insalubre | A instância será marcada como Não íntegra se ocorrer um handshake fracassado ou incompleto com o endpoint da aplicação fornecido. |
Nalguns cenários que podem resultar em estado não saudável incluem:
- Quando o ponto de extremidade do aplicativo retorna um código de status diferente de 200
- Quando não há nenhum ponto de extremidade do aplicativo configurado dentro das instâncias da máquina virtual para fornecer o status de integridade do aplicativo
- Quando o ponto de extremidade do aplicativo está configurado incorretamente
- Quando o ponto de extremidade do aplicativo não está acessível
Esquema de extensão para estados de saúde binários
O JSON a seguir mostra o esquema para a extensão Application Health. A extensão requer no mínimo uma solicitação "tcp", "http" ou "https" com uma porta associada ou caminho de solicitação, 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 propriedade
| Nome | Valor / Exemplo | Tipo de Dados |
|---|---|---|
| Versão da API | 2018-10-01 |
data |
| editora | Microsoft.ManagedServices |
corda |
| tipo |
ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) |
corda |
| typeHandlerVersion | 1.0 |
corda |
Definições
| Nome | Valor / Exemplo | Tipo de Dados |
|---|---|---|
| protocolo |
http ou https ou tcp |
corda |
| porto | Opcional quando o protocolo é http ou https, obrigatório quando o protocolo é tcp |
número inteiro |
| caminho de solicitação | Obrigatório quando o protocolo é http ou https, não permitido quando o protocolo é tcp |
corda |
| intervaloEmSegundos | Opcional, o padrão é 5 segundos. Este é o intervalo entre cada sonda de saúde. Por exemplo, se intervalInSeconds == 5, uma sonda será enviada para o endpoint da aplicação local uma vez a cada 5 segundos. O valor mínimo é de 5 segundos, o máximo é de 60 segundos. | número inteiro |
| número de sondas | Opcional, o padrão é 1. Este é o número de sondas consecutivas necessárias para que o estado de saúde seja alterado. Por exemplo, se numberOfProbles == 3, precisas de 3 sinais consecutivos de "Saudável" para alterar o estado de saúde de "Não Saudável" para "Saudável". O mesmo requisito aplica-se para alterar o estado de saúde para o estado "Não saudável". O valor mínimo é 1 sonda, o máximo é 3 sondas. | número inteiro |
Implantar a extensão de integridade do aplicativo
Há várias maneiras de implantar a extensão Application Health em seus conjuntos de escala, conforme detalhado nos exemplos a seguir.
Estados ricos em saúde
O exemplo a seguir adiciona a extensão Application Health - Rich States (com nome myHealthExtension) ao extensionProfile modelo de conjunto de escala de um conjunto de escala baseado no Windows.
Você também pode usar este exemplo para atualizar uma extensão existente de Binary para Rich Health States fazendo uma chamada PATCH em vez de um 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>
}
}
}
Use PATCH para editar uma extensão já implantada.
Atualize as máquinas virtuais para instalar a extensão.
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
Estados de saúde binários
O exemplo a seguir adiciona a extensão Application Health (com o nome myHealthExtension) ao extensionProfile no modelo de conjunto de escala de um conjunto de escala baseado no Windows.
Você também pode usar este exemplo para alterar uma extensão existente de Rich Health State para Binary Health fazendo uma chamada PATCH em vez de um 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>"
}
}
}
Use PATCH para editar uma extensão já implantada.
Atualize as máquinas virtuais para instalar a extensão.
POST on `/subscriptions/<subscriptionId>/resourceGroups/<myResourceGroup>/providers/Microsoft.Compute/virtualMachineScaleSets/< myScaleSet >/manualupgrade?api-version=2022-08-01`
{
"instanceIds": ["*"]
}
Resolver problemas
Precisa de ajuda para configurar uma resposta de sonda
Consulte amostras de integridade do aplicativo para obter exemplos de respostas de sondas de integridade que estão a ser enviadas para um ponto final local.
View VMHealth - instância única
Get-AzVmssVM
-InstanceView `
-ResourceGroupName <rgName> `
-VMScaleSetName <vmssName> `
-InstanceId <instanceId>
Ver VMHealth – batch call
Isso só está disponível para conjuntos de escala de máquina virtual com orquestração uniforme.
GET on `/subscriptions/<subscriptionID>/resourceGroups/<resourceGroupName>/providers/Microsoft.Compute/virtualMachineScaleSets/<vmssName>/virtualMachines/?api-version=2022-03-01&$expand=instanceview`
Estado de saúde não está aparecendo
Se o Estado de Integridade não estiver aparecendo no portal do Azure ou por meio de chamada GET, verifique se a VM foi atualizada para o modelo mais recente. Se a VM não estiver no modelo mais recente, atualize a VM e o status de integridade aparecerá.
Log de saída de execução de extensão
A saída de execução da extensão é registrada em arquivos encontrados nos seguintes diretórios:
C:\WindowsAzure\Logs\Plugins\Microsoft.ManagedServices.ApplicationHealthWindows\<version>\
/var/lib/waagent/Microsoft.ManagedServices.ApplicationHealthLinux-<extension_version>/status
/var/log/azure/applicationhealth-extension
Os logs também capturam periodicamente o status de integridade do aplicativo.
Próximos passos
Saiba como implantar seu aplicativo em conjuntos de dimensionamento de máquina virtual.