Partilhar via


Usando a extensão de integridade do aplicativo com conjuntos de dimensionamento de máquina virtual

Monitorar a integridade do aplicativo é um sinal importante para gerenciar e atualizar sua implantação. Os Conjuntos de Dimensionamento de Máquina Virtual do Azure fornecem suporte para Atualizações Contínuas, incluindo Atualizações Automáticas de Imagem do SO e Patches Automáticos de Convidado de VM, que dependem do monitoramento de integridade das instâncias individuais para atualizar sua implantação. Você também pode usar a Extensão de Integridade do Aplicativo para monitorar a integridade do aplicativo de cada instância em seu conjunto de escala e executar reparos de instância usando Reparos Automáticos de Instância.

Este artigo descreve como você pode usar os dois tipos de extensão de Integridade do Aplicativo, Estados de Integridade Binários ou Estados de Integridade Avançados, para monitorar a integridade de seus aplicativos implantados em Conjuntos de Dimensionamento de Máquina Virtual.

Pré-requisitos

Este artigo pressupõe que você esteja familiarizado com:

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 Exemplos de integridade do aplicativo para obter exemplos de respostas de sonda de integridade sendo emitidas para um ponto de extremidade 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 do Aplicativo

A Extensão de Integridade do Aplicativo é implantada dentro de uma instância do Conjunto de Dimensionamento de Máquina Virtual e relata a integridade do aplicativo de dentro da instância do conjunto de escala. A extensão investiga um ponto de extremidade do aplicativo local e atualizará o status de integridade com base nas respostas TCP/HTTP(S) recebidas do aplicativo. 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 disponíveis: Estados de Integridade Binários e Estados de Integridade Avançados. 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: Íntegro, Não Íntegro, 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 integridade no protocolo HTTP/HTTPS são enviados através 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 íntegras As instâncias cairão automaticamente no estado Não íntegro se um sinal Íntegro não for recebido do aplicativo. Uma instância não íntegra pode indicar um problema com a configuração da extensão (por exemplo, ponto de extremidade inacessível) ou um problema com o aplicativo (por exemplo, código de status diferente de 200). As instâncias só entrarão em um estado Íntegro se o aplicativo emitir uma resposta de teste Í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 não íntegras como em Estados de integridade binários.

Em geral, você deve usar Estados de Saúde Binários se:

  • Você não está interessado em configurar a lógica personalizada para identificar e sinalizar uma instância não íntegra
  • Não é necessário um período de carência de inicialização para instâncias recém-criadas

Você deve usar Rich Health States se:

  • Você envia sinais de integridade através do protocolo HTTP/HTTPS e pode enviar informações de integridade através do corpo de resposta da sonda
  • Você gostaria de usar a lógica personalizada para identificar e marcar instâncias não íntegras
  • Você gostaria de definir um período de carência de inicialização para instâncias recém-criadas, para que elas se estabeleçam em um estado de integridade estável antes de tornar a instância elegível para atualização contínua ou reparos de instância

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 de como os Estados de Integridade são configurados.

Protocolo HTTP/HTTPS

Protocolo Estado de Funcionamento Description
http/https Bom estado de funcionamento Para enviar um sinal Íntegro , espera-se que o aplicativo retorne um código de resposta 200.
http/https Mau estado de funcionamento 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 Funcionamento Description
TCP Bom estado de funcionamento Para enviar um sinal Íntegro , um handshake bem-sucedido deve ser feito com o ponto de extremidade do aplicativo fornecido.
TCP Mau estado de funcionamento A instância será marcada como Não íntegra se ocorrer um handshake incompleto ou com falha com o ponto de extremidade do aplicativo fornecido.

Alguns cenários que podem resultar em um estado não íntegro 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

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 de como cada Estado de Integridade está configurado.

Protocolo HTTP/HTTPS

Protocolo Estado de Funcionamento Description
http/https Bom estado de funcionamento Para enviar um sinal Íntegro , espera-se que o aplicativo retorne uma resposta de sonda com: Código de resposta da sonda: Status 2xx, Corpo de resposta da sonda: {"ApplicationHealthState": "Healthy"}
http/https Mau estado de funcionamento Para enviar um sinal não íntegro , espera-se que o aplicativo 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 Funcionamento Description
TCP Bom estado de funcionamento Para enviar um sinal Íntegro , um handshake bem-sucedido deve ser feito com o ponto de extremidade do aplicativo fornecido.
TCP Mau estado de funcionamento A instância será marcada como Não íntegra se ocorrer um handshake incompleto ou com falha com o ponto de extremidade do aplicativo 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 gracePeriod prazo 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 Íntegro: A extensão de integridade do aplicativo deve receber três sinais Íntegros 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 integridade do aplicativo fará a transição de Inicializando para Não Íntegro

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 ApplicationHealthState corpo 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 habilitado, os reparos de instância serão realizados em uma instância Desconhecida, enquanto as atualizações contínuas serão pausadas até que a instância volte a um estado Íntegro .

A tabela a seguir mostra a interpretação do status de integridade para atualizações contínuas e reparos de instância:

Estado de Funcionamento Interpretação do Rolling Upgrade Gatilho de reparos de instância
A inicializar Aguarde que o estado esteja em Saudável, Insalubre ou Desconhecido Não
Bom estado de funcionamento Bom estado de funcionamento Não
Mau estado de funcionamento Mau estado de funcionamento Sim
Desconhecido Mau estado de funcionamento Sim

Esquema de extensão para estados de integridade 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
apiVersion 2018-10-01 data
editora Microsoft.ManagedServices string
tipo ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 1.0 string

Definições

Nome Valor / Exemplo Tipo de Dados
protocolo http ou https ou tcp string
porta Opcional quando o protocolo é http ou https, obrigatório quando o protocolo é tcp número inteiro
requestPath Obrigatório quando o protocolo é http ou https, não permitido quando o protocolo é tcp string
intervalInSeconds Opcional, o padrão é 5 segundos. Este é o intervalo entre cada sonda de saúde. Por exemplo, se intervalInSeconds == 5, um teste será enviado para o ponto de extremidade do aplicativo local uma vez a cada 5 segundos. número inteiro
númerodesondas 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" para o estado "Saudável". O mesmo requisito se aplica para alterar o status de integridade para o estado "Não íntegro". número inteiro

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 o ApplicationHealthState corpo de resposta da sonda 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
apiVersion 2018-10-01 data
editora Microsoft.ManagedServices string
tipo ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 2.0 string

Definições

Nome Valor / Exemplo Tipo de Dados
protocolo http ou https ou tcp string
porta Opcional quando o protocolo é http ou https, obrigatório quando o protocolo é tcp número inteiro
requestPath Obrigatório quando o protocolo é http ou https, não permitido quando o protocolo é tcp string
intervalInSeconds Opcional, o padrão é 5 segundos. Este é o intervalo entre cada sonda de saúde. Por exemplo, se intervalInSeconds == 5, um teste será enviado para o ponto de extremidade do aplicativo local uma vez a cada 5 segundos. número inteiro
númerodesondas 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 se aplica para alterar o status de saúde para o estado "Não íntegro" ou "Desconhecido". número inteiro
gracePeriod Opcional, padrão = intervalInSeconds * numberOfProbes; período de carência máximo é de 7200 segundos 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 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 VMs para instalar a extensão.

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

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 VMs 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 Exemplos de integridade do aplicativo para obter exemplos de respostas de sonda de integridade sendo emitidas para um ponto de extremidade 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.