Usando a extensão do Application Health com os Conjuntos de Dimensionamento de Máquinas Virtuais

O monitoramento de integridade do seu aplicativo é um sinal importante para gerenciar e atualizar sua implantação. Os Conjuntos de Dimensionamento de Máquinas Virtuais do Microsoft Azure fornecem suporte para Atualizações sem interrupção inclusive Atualizações automáticas de imagem do sistema operacional e Aplicação de patch automática de VM de convidado, 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 de aplicativos para monitorar a integridade do aplicativo de cada instância no conjunto de dimensionamento e realizar reparos de instância usando os Reparos automáticos de instância.

Esse artigo descreve como 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áquinas Virtuais.

Pré-requisitos

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

Cuidado

A Extensão Integridade do Aplicativo espera receber uma resposta de investigação consistente na porta configurada tcp ou no caminho da solicitação http/https para rotular uma VM como Íntegra. Se nenhum aplicativo estiver em execução na VM ou você não conseguir configurar uma resposta de investigação, a VM será exibida como Não íntegra (estados de integridade binários) ou Desconhecido (estados de integridade avançados).

Observação

Apenas uma fonte de monitoramento de integridade pode ser utilizada para um Conjunto de Dimensionamento de Máquinas Virtuais, uma Extensão de Integridade do Aplicativo ou uma Investigação de Integridade. Se você tiver as duas opções habilitadas, precisará remover uma delas antes de utilizar os serviços de orquestração como Reparos de Instância ou Atualizações automáticas do SO.

Quando usar a Extensão de Integridade do Aplicativo

A Extensão Integridade do Aplicativo é implantada dentro de uma instância de Conjunto de Dimensionamento de Máquinas Virtuais e emite relatórios de integridade do aplicativo de dentro da instância de conjunto de dimensionamento. A extensão investiga um ponto de extremidade do aplicativo local e vai atualizar o status de integridade com base nas respostas TCP/HTTP(S) recebidas do aplicativo. Esse status da integridade é usado pelo Azure para iniciar reparos em instâncias não íntegras e para determinar se uma instância está 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 investigação externa, como as investigações de integridade do Azure Load Balancer , não pode ser usada.

Estados de Integridade Binários versus Estados de Integridade Avançados

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 realça algumas diferenças importantes entre as duas opções. Veja o final desta seção para obter recomendações gerais.

Recursos Estados de Integridade Binários Estados de Integridade Avançados
Estados de integridade disponíveis Dois estados disponíveis: Íntegro, Não íntegro Quatro estados disponíveis: Íntegro, Não íntegro, Inicializando, Desconhecido1
Envio de sinais de integridade Os sinais de integridade são enviados por meio de códigos de resposta HTTP/HTTPS ou conexões TCP. Os sinais de integridade no protocolo HTTP/HTTPS são enviados por meio do código de resposta de investigação e do corpo da resposta. Os sinais de integridade por meio do protocolo TCP permanecem inalterados em relação aos Estados de Integridade Binários.
Identificando instâncias não íntegras As instâncias vão se enquadrar 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 Não íntegro se o aplicativo emitir uma resposta de investigação Não íntegra. Os usuários são responsáveis por implementar a lógica personalizada para identificar e sinalizar instâncias com aplicativos Não íntegros2. As instâncias com configurações de extensão incorretas (por exemplo, ponto de extremidade inacessível) ou respostas de investigação de integridade inválidas vão se enquadrar no estado Desconhecido2.
Estado Inicializando para instâncias recém-criadas O estado Inicializando não está disponível. As instâncias recém-criadas podem levar algum tempo antes de se estabelecerem como estáveis. O estado Inicializando permite que as instâncias recém-criadas se estabeleçam em um Estado de Integridade estável antes de tornar a instância qualificada para atualizações sem interrupção ou operações de reparo de instância.
Protocolo HTTP/HTTPS Com suporte Com suporte
Protocolo TCP Com suporte Suporte limitado – o estado Desconhecido não está disponível no protocolo TCP. Confira a Tabela de protocolos de Estados de Integridade Avançada para conhecer os comportamentos de Estado de Integridade no TCP.

1 O estado Desconhecido não está disponível no protocolo TCP. 2 Aplicável somente para os protocolos HTTP/HTTPS. O protocolo TCP seguirá o mesmo processo de identificação de instâncias Não íntegras que nos Estados de Integridade Binários.

Em geral, você deverá usar Estados de Integridade Binários se:

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

Você deverá usar Estados de Integridade Avançados se:

  • Você envia sinais de integridade por meio do protocolo HTTP/HTTPS e pode enviar informações de integridade por meio do corpo da resposta da investigação
  • 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 qualificada para a atualização sem interrupção ou reparos da instância

Estados de Integridade Binários

O relatório do Estado de Integridade Binário contém dois Estados de Integridade, Íntegro e Não Íntegro. As tabelas a seguir fornecem uma breve descrição de como os Estados de Integridade são configurados.

Protocolo HTTP/HTTPS

Protocolo Estado de Integridade DESCRIÇÃO
http/https Íntegros Para enviar um sinal Íntegro, espera-se que o aplicativo retorne um código de resposta 200.
http/https Unhealthy 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 Integridade Descrição
TCP Íntegros Para enviar um sinal Íntegro, um handshake bem-sucedido deve ser feito com o ponto de extremidade do aplicativo fornecido.
TCP Unhealthy 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 de 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 de Integridade Avançados

Os relatórios dos Estados de Integridade Avançados contêm quatro Estados de Integridade, Inicializando, Íntegro, Não Íntegro e Desconhecido. As tabelas a seguir fornecem uma breve descrição de como cada Estado de Integridade é configurado.

Protocolo HTTP/HTTPS

Protocolo Estado de Integridade DESCRIÇÃO
http/https Íntegros Para enviar um sinal Íntegro, espera-se que o aplicativo retorne uma resposta de investigação com: Código da Resposta da Investigação: Status 2xx, Corpo da Resposta da Investigação: {"ApplicationHealthState": "Healthy"}
http/https Unhealthy Para enviar um sinal Não Íntegro, espera-se que o aplicativo retorne uma resposta de investigação com: Código da Resposta da Investigação: Status 2xx, Corpo da Resposta da Investigação: {"ApplicationHealthState": "Unhealthy"}
http/https Inicializando A instância insere automaticamente um estado Inicializando na hora de início da extensão. Para obter mais informações, confira Estado Inicializando.
http/https Unknown Um estado Desconhecido pode ocorrer nos seguintes cenários: quando um código de status diferente de 2xx é retornado pelo aplicativo, quando a solicitação de investigação atinge o tempo limite, 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, confira Estado Desconhecido.

Protocolo TCP

Protocolo Estado de Integridade Descrição
TCP Íntegros Para enviar um sinal Íntegro, um handshake bem-sucedido deve ser feito com o ponto de extremidade do aplicativo fornecido.
TCP Unhealthy 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 Inicializando A instância insere automaticamente um estado Inicializando na hora de início da extensão. Para obter mais informações, confira Estado Inicializando.

Estado Inicializando

Esse estado só se aplica aos Estados de Integridade Avançados. O estado Inicializando ocorre apenas uma vez na hora de início da extensão e pode ser definido pelas configurações gracePeriod e numberOfProbes da extensão.

Na inicialização da extensão, a integridade do aplicativo permanecerá no estado Inicializando até que um dos dois cenários ocorra:

  • O mesmo Estado de Integridade (Íntegro ou Não íntegro) for relatado um número consecutivo de vezes, conforme configurado por meio do numberOfProbes
  • O gracePeriod se expira

Se o mesmo Estado de Integridade (Íntegro ou Não íntegro) for relatado consecutivamente, a integridade do aplicativo fará a transição do estado Inicializando para o estado de integridade relatado (Íntegro ou Não íntegro).

Exemplo

Se numberOfProbes = 3, isso significaria:

  • Para fazer a transição de Inicializando para estado Íntegro : a extensão de integridade do aplicativo deverá receber três sinais Íntegros consecutivos via protocolo HTTP/HTTPS ou TCP
  • Para fazer a transição de Inicializando para estado Não íntegro : a extensão de integridade do aplicativo deverá receber três sinais Não íntegros consecutivos via protocolo HTTP/HTTPS ou 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 fará a transição de Inicializando para Desconhecido
  • Protocolo TCP: a integridade do aplicativo fará a transição de Inicializando para Não íntegro

Estado desconhecido

Esse estado só se aplica aos Estados de Integridade Avançados. O estado Desconhecido só é relatado para investigações "http" ou "https" e ocorre nos seguintes cenários:

  • Quando um código de status diferente de 2xx é retornado pelo aplicativo
  • Quando a solicitação de investigação atinge o tempo limite
  • Quando o ponto de extremidade do aplicativo está inacessível ou configurado incorretamente
  • Quando um valor ausente ou inválido é fornecido para o ApplicationHealthState no corpo da resposta
  • Quando o período de carência expira

Uma instância em um estado Desconhecido é tratada de maneira semelhante a uma instância Não íntegra. Se habilitados, os reparos de instância serão realizados em uma instância Desconhecida enquanto as atualizações sem interrupção serão pausadas até que a instância volte para um estado Íntegro.

A tabela a seguir mostra a interpretação do status de integridade para Atualizações Sem Interrupção e Reparos de Instância:

Estado de Integridade Interpretação de Atualização sem Interrupção Gatilho de Reparos de Instância
Inicializando Aguarde até que o estado seja Íntegro, Não íntegro ou Desconhecido Não
Íntegros Íntegros Não
Unhealthy Unhealthy Yes
Unknown Unhealthy Yes

Esquema de extensão para Estados de Integridade Binários

O JSON a seguir mostra o esquema para a extensão para VM do 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 date
publicador Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 1.0 string

Configurações

Nome Valor/Exemplo Tipo de Dados
protocolo http ou https ou tcp string
porta Opcional quando o protocolo for http ou https, obrigatório quando o protocolo for tcp INT
requestPath Obrigatório quando o protocolo for http ou https, não permitido quando o protocolo for tcp string
intervalInSeconds Opcional, o padrão é 5 segundos. Esse é o intervalo entre cada investigação de integridade. Por exemplo, se intervalInSeconds == 5, uma investigação será enviada para o ponto de extremidade do aplicativo local uma vez a cada 5 segundos. INT
numberOfProbes Opcional, o padrão é 1. Esse é o número de investigações consecutivas necessárias para que o status de integridade seja alterado. Por exemplo, se numberOfProbles == 3, você precisará de três sinais "Íntegros" consecutivos para alterar o status de integridade de "Não Íntegro" para o estado "Íntegro". O mesmo requisito se aplica à alteração do status de integridade no estado "Não íntegro". INT

Esquema de extensão para Estados de Integridade Avançados

O JSON a seguir mostra o esquema para a extensão de Estados de Integridade Avançados. A extensão requer no mínimo uma solicitação "http" ou "https" com uma porta associada ou caminho de solicitação, respectivamente. As investigações de TCP também têm suporte, mas não poderão definir o ApplicationHealthState por meio do corpo da resposta da investigação 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 date
publicador Microsoft.ManagedServices string
type ApplicationHealthLinux (Linux), ApplicationHealthWindows (Windows) string
typeHandlerVersion 2.0 string

Configurações

Nome Valor/Exemplo Tipo de Dados
protocolo http ou https ou tcp string
porta Opcional quando o protocolo for http ou https, obrigatório quando o protocolo for tcp INT
requestPath Obrigatório quando o protocolo for http ou https, não permitido quando o protocolo for tcp string
intervalInSeconds Opcional, o padrão é 5 segundos. Esse é o intervalo entre cada investigação de integridade. Por exemplo, se intervalInSeconds == 5, uma investigação será enviada para o ponto de extremidade do aplicativo local uma vez a cada 5 segundos. INT
numberOfProbes Opcional, o padrão é 1. Esse é o número de investigações consecutivas necessárias para que o status de integridade seja alterado. Por exemplo, se numberOfProbles == 3, você precisará de três sinais "Íntegros" consecutivos para alterar o status de integridade de "Não Íntegro"/"Desconhecido" para o estado "Íntegro". O mesmo requisito se aplica à alteração do status de integridade no estado "Não Íntegro" ou "Desconhecido". INT
gracePeriod Opcional, padrão = intervalInSeconds * numberOfProbes; o período máximo de carência é de 7.200 segundos INT

Implantar a Extensão de Integridade do Aplicativo

Há várias maneiras de implantar a extensão Integridade do Aplicativo em seus conjuntos de dimensionamento conforme detalhado nos exemplos a seguir.

Estados de Integridade Binários

O exemplo a seguir adiciona a extensão do Application Health (com nome myHealthExtension) para o extensionProfile em um modelo de conjunto de dimensionamento de um conjunto de dimensionamento baseado em Windows.

Você também pode usar este exemplo para alterar uma extensão existente de Estado de Integridade Avançado para Integridade Binária fazendo uma chamada PATCH em vez de uma 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 de Integridade Avançados

O exemplo a seguir adiciona a extensão Integridade do Aplicativo – Estados Avançados (com nome myHealthExtension) ao extensionProfile no modelo de conjunto de dimensionamento de um conjunto de dimensionamento baseado em Windows.

Você também pode usar este exemplo para atualizar uma extensão existente de Estado Binário para Estados de Integridade Avançados fazendo uma chamada PATCH em vez de uma 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": ["*"]
}

Solucionar problemas

Exibir VMHealth – instância única

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

Exibir VMHealth – chamada em lote

Esta opção está disponível somente para Conjuntos de Dimensionamento de Máquinas Virtuais com orquestração Uniforme.

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

O Estado de Integridade não está aparecendo

Se o Estado de Integridade não estiver aparecendo no portal do Azure ou por meio da 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 nos arquivos localizados 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óximas etapas

Aprenda como Implantar o aplicativo em Conjuntos de Dimensionamento de Máquinas Virtuais.