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á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:

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 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 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 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 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.