Monitorar instâncias do Serviço de Aplicativo usando a verificação de Integridade

Este artigo usa a verificação de integridade no portal do Azure para monitorar instâncias do serviço de aplicativo. A verificação de integridade aumenta a disponibilidade do aplicativo fazendo um novo roteamento das solicitações distante das instâncias não íntegras e substituindo instâncias caso permaneçam não íntegras. O recurso faz isso executando a cada minuto o ping de um caminho do seu aplicativo web que você escolher.

Falha na verificação de integridade

Observe que /api/health é apenas um exemplo adicionado para fins de ilustração. Não criamos um caminho de Verificação de Integridade por padrão. Você deve ter certeza de que o caminho que você está selecionando é um caminho válido que existe em seu aplicativo

O que o Serviço de Aplicativo faz com verificações de Integridade

  • Quando um caminho é fornecido em seu aplicativo, a verificação de Integridade executa ping nesse caminho em todas as instâncias do aplicativo do Serviço de Aplicativo em intervalos de 1 minuto.
  • Se um aplicativo Web em execução em uma determinada instância não responder com um código de status entre 200 e 299 (incluindo esses valores) após 10 solicitações, o Serviço de Aplicativo determinará que ele não está íntegro e o removerá do balanceador de carga correspondente. O número necessário de solicitações com falha para que uma instância seja considerada não íntegra pode ser configurado como, no mínimo, duas solicitações.
  • Após a remoção, a verificação de Integridade continuará a executar o ping na instância não íntegra. Se a instância começar a responder com um código de status da integridade (200-299), a instância será retornada ao balanceador de carga.
  • Se o aplicativo Web em execução em uma instância permanecer não íntegro por uma hora, a instância será substituída por uma nova.
  • Ao escalar horizontalmente, o Serviço de Aplicativo executa ping no caminho de verificação de Integridade para garantir que novas instâncias estejam prontas.

Observação

  • A verificação de integridade não segue redirecionamentos de 302.
  • No máximo uma instância será substituída por hora, com um máximo de três instâncias por dia por Plano do Serviço de Aplicativo.
  • Caso a verificação de integridade retorne o status Waiting for health check response, a verificação provavelmente falhará devido a um código de status HTTP 307; isso pode ocorrer se você tiver o redirecionamento https habilitado, mas tiver HTTPS Only desabilitado.

Habilitar a verificação de Integridade

Navegação da verificação de Integridade no Portal do Azure

  1. Para habilitar a verificação de Integridade, navegue até a portal do Azure e selecione seu aplicativo do Serviço de Aplicativo.
  2. Em Monitoramento, selecione verificação de Integridade.
  3. Selecione Habilitar e forneça um caminho de URL válido em seu aplicativo, como /health ou /api/health.
  4. Clique em Salvar.

Observação

  • Seu plano do Serviço de Aplicativo deve ser dimensionado para duas ou mais instâncias para usar a verificação de Integridade.
  • O caminho de verificação de Integridade deve verificar os componentes críticos do seu aplicativo. Por exemplo, se seu aplicativo depende de um banco de dados e um sistema de mensagens, o ponto de extremidade de verificação de Integridade deve se conectar a esses componentes. Se o aplicativo não puder se conectar a um componente crítico, o caminho deverá retornar um código de resposta de nível 500 para indicar que o aplicativo não está íntegro. Além disso, se o caminho não retornar uma resposta dentro de 1 minuto, o ping de verificação de integridade será considerado não íntegro.
  • Ao selecionar o caminho de verificação de Integridade, certifique-se de estar selecionando um caminho que retorne códigos de status 200 somente quando o aplicativo estiver totalmente aquecido.
  • Para usar a Verificação de integridade em seu Aplicativo de Funções, você deve usar um plano de hospedagem premium ou dedicado.
  • Confira detalhes sobre a verificação de integridade em aplicativos de funções aqui: Monitorar aplicativos de funções usando a verificação de integridade.

Cuidado

Alterações de configuração da verificação de Integridade reinicie seu aplicativo. Para minimizar o impacto nos aplicativos de produção, é recomendável Configurar slots de preparo e alternar para produção.

Configuração

Além de configurar as opções de verificação de Integridade, você também pode configurar as seguintes configurações de aplicativo:

Nome da configuração do aplicativo Valores permitidos Descrição
WEBSITE_HEALTHCHECK_MAXPINGFAILURES 2 - 10 O número necessário de solicitações com falha para que uma instância seja considerada não íntegra e removida do balanceador de carga. Por exemplo, quando definido como 2, suas instâncias são removidas após 2 pings com falha. (O valor padrão é 10)
WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT 1 - 100 Por padrão, não mais da metade das instâncias será excluída do balanceador de carga ao mesmo tempo para evitar sobrecarregar as instâncias íntegras restantes. Por exemplo, se um plano do Serviço de Aplicativo for dimensionado para quatro instâncias e três não estiverem íntegras, duas são excluídas. As outras duas instâncias (uma íntegra e uma não íntegra) continuam a receber solicitações. Na pior das hipóteses, quando todas as instâncias não estão íntegras, nenhuma é excluída.
Para substituir esse comportamento, defina a configuração de aplicativo como um valor entre 1 e 100. Um valor mais alto significa que mais instâncias não íntegras são removidas (o padrão é 50).

Autenticação e segurança

A verificação de integridade com os recursos de autenticação e autorização do Serviço de Aplicativo. Nenhuma outra configuração é necessária se esses recursos de segurança estiverem habilitados.

Se você estiver usando seu próprio sistema de autenticação, o caminho de verificação de Integridade deverá permitir o acesso anônimo. Para proteger o ponto de extremidade de verificação de Integridade, você deve primeiro usar recursos como restrições de IP, certificados de clienteou uma Rede Virtual para restringir o acesso ao aplicativo. Depois de implementar esses recursos, autentique a solicitação de verificação de integridade inspecionando o cabeçalho x-ms-auth-internal-token e validando se ele corresponde ao hash SHA256 da variável de ambiente WEBSITE_AUTH_ENCRYPTION_KEY. Se eles corresponderem, a solicitação de verificação de integridade será válida e será originada do Serviço de Aplicativo.

Observação

Especificamente para a autenticação do Azure Functions, a função que atua como ponto de extremidade de verificação de integridade precisa permitir o acesso anônimo.

using System;
using System.Text;

/// <summary>
/// Method <c>HeaderMatchesEnvVar</c> returns true if <c>headerValue</c> matches WEBSITE_AUTH_ENCRYPTION_KEY.
/// </summary>
public Boolean HeaderMatchesEnvVar(string headerValue) {
    var sha = System.Security.Cryptography.SHA256.Create();
    String envVar = Environment.GetEnvironmentVariable("WEBSITE_AUTH_ENCRYPTION_KEY");
    String hash = System.Convert.ToBase64String(sha.ComputeHash(Encoding.UTF8.GetBytes(envVar)));
    return hash == headerValue;
}

Observação

O cabeçalho x-ms-auth-internal-token só está disponível no Serviço de Aplicativo do Windows.

Instâncias

Depois que a Verificação de Integridade estiver habilitada, você poderá reiniciar e monitorar o status das instâncias do seu aplicativo por meio da guia Instâncias. A guia Instâncias mostra o nome da sua instância, o status da instância desse aplicativo e oferece a opção de reiniciar manualmente a instância.

Se o status da instância do aplicativo não estiver íntegro, você poderá reiniciá-la manualmente usando o botão Reiniciar na tabela. Tenha em mente que quaisquer outros aplicativos hospedados no mesmo Plano de Serviço de Aplicativo da instância também serão afetados pela reinicialização. Se houver outros aplicativos usando o mesmo Plano de Serviço de Aplicativo da instância, eles serão listados no painel de abertura no botão de reinicialização.

Se você reiniciar a instância e o processo de reinicialização falhar, você terá a opção de substituir a função de trabalho (apenas uma instância pode ser substituída por hora). Isso também afetará todos os aplicativos que utilizam o mesmo Plano de Serviço do Aplicativo.

Os aplicativos do Windows também terão a opção de visualizar os processos por meio do Explorador de Processos. Isso fornece mais informações sobre os processos da instância, incluindo a contagem de threads, memória privada e tempo total de CPU.

Coleta de informações de diagnóstico

Para aplicativos do Windows, você tem a opção de coletar informações de diagnóstico na guia Verificação de integridade. A habilitação da coleta de diagnósticos adiciona uma regra de recuperação automática que cria despejos de memória para instâncias não íntegras e as salva em uma conta de armazenamento designada. Habilitar essa opção altera as configurações de recuperação automática. Se existirem regras de recuperação automática, recomendamos configurá-las através do diagnóstico do Serviço de Aplicativo.

Depois que a coleta de diagnósticos estiver habilitada, você poderá criar ou escolher uma conta de armazenamento existente para seus arquivos. Você só pode selecionar contas de armazenamento na mesma região do seu aplicativo. Lembre-se de que salvar reinicia seu aplicativo. Depois de salvar, se as instâncias do seu site forem consideradas não íntegras após pings contínuos, você poderá ir para o recurso da sua conta de armazenamento e exibir os despejos de memória.

Monitoramento

Depois de fornecer o caminho de verificação de Integridade do aplicativo, você pode monitorar a integridade do seu site usando Azure Monitor. Na folha Verificação de integridade no portal, clique nas Métricas na barra de ferramentas superior. Isso abrirá uma nova folha, em que você poderá ver o status de integridade histórico do site e uma opção para criar uma regra de alerta. As métricas de verificação de integridade só agregam os pings bem-sucedidos e as falhas de exibição quando a instância é considerada não íntegra com base na configuração da verificação de integridade. Para obter mais informações sobre como monitorar seus sites, consulte o guia em Azure Monitor.

Limitações

  • A verificação de integridade pode ser habilitada para os Planos do Serviço de Aplicativo Gratuito e Compartilhado para que você obtenha as métricas sobre a integridade do site e configure alertas. Porém, como os sites dos tipos Gratuito e Compartilhado não podem ser escalados horizontalmente, as instâncias não íntegras não serão substituída. Você deve escalar verticalmente para a camada Básica ou superior para que possa escalar horizontalmente para duas ou mais instâncias e utilizar o benefício completo da verificação de Integridade. Isso é recomendado para aplicativos voltados para produção, pois aumentará a disponibilidade e o desempenho do aplicativo.
  • O plano do Serviço de Aplicativo pode ter no máximo uma instância não íntegra substituída por hora e, no máximo, três instâncias por dia.
  • Há um limite não configurável no número total de instâncias substituídas pela Verificação de Integridade por unidade de escala. Se esse limite for atingido, nenhuma instância não íntegra será substituída. Esse valor é redefinido a cada 12 horas.

Perguntas frequentes

O que acontece se meu aplicativo estiver em execução em uma única instância?

Se o aplicativo for dimensionado apenas para uma instância e ficar não íntegro, ele não será removido do balanceador de carga porque isso deixaria o aplicativo totalmente inoperante. No entanto, após uma hora de pings não íntegros contínuos, a instância será substituída. Escale horizontalmente para duas ou mais instâncias para obter o benefício de novo roteamento da verificação de integridade. Se o aplicativo estiver em execução em uma única instância, você ainda poderá usar o recurso de monitoramento da verificação de Integridade para acompanhar a integridade do aplicativo.

Por que a solicitação de verificação de Integridade não está sendo exibida nos meus logs servidor da Web?

As solicitações de verificação de Integridade são enviadas ao site internamente, para que não sejam mostradas nos logs do servidor Web. Você pode adicionar instruções de log ao código de verificação de Integridade para manter os logs de quando foi efetuado ping no caminho de verificação de Integridade.

As solicitações de verificação de integridade são enviadas por HTTP ou HTTPS?

No Windows App Service, as solicitações de Verificação de integridade são enviadas por HTTPS quando a opção Somente HTTPS for habilitada no site. Caso contrário, elas serão enviadas por HTTP. No Serviço de Aplicativo do Linux, as solicitações de verificação de integridade são enviadas apenas por HTTP e não podem ser enviadas por HTTPS no momento.

A verificação de integridade está seguindo os redirecionamentos configurados pelo código do aplicativo entre o domínio padrão e o domínio personalizado?

Não, o recurso de verificação de integridade está executando ping no caminho do domínio padrão do aplicativo Web. Se houver um redirecionamento do domínio padrão para um domínio personalizado, o código de status que a verificação de integridade retorna não será um 200, mas um redirecionamento (301), que marcará o trabalho não íntegro.

E se eu tiver vários aplicativos no mesmo Plano do Serviço de Aplicativo?

As instâncias não íntegras serão sempre removidas da rotação do balanceador de carga, independentemente de outros aplicativos no Plano do Serviço de Aplicativo (até o percentual especificado em WEBSITE_HEALTHCHECK_MAXUNHEALTHYWORKERPERCENT). Quando um aplicativo em uma instância permanece não íntegro por mais de uma hora, a instância só será substituída se todos os outros aplicativos com a verificação de integridade habilitada também estiverem não íntegros. Os aplicativos que não têm a verificação de integridade habilitada não serão considerados.

Exemplo

Imagine que você tenha dois aplicativos (ou um aplicativo com um slot) com a verificação de integridade habilitada, chamados Aplicativo A e Aplicativo B. Eles estão no mesmo Plano do Serviço de Aplicativo e o Plano é escalado horizontalmente para quatro instâncias. Se o Aplicativo A se tornar não íntegro em duas instâncias, o balanceador de carga deixará de enviar solicitações para o Aplicativo A nessas duas instâncias. As solicitações ainda são roteadas para o Aplicativo B nessas instâncias, supondo que o Aplicativo B esteja íntegro. Se o Aplicativo A permanecer não íntegro por mais de uma hora nessas duas instâncias, essas instâncias só serão substituídas se o Aplicativo B também for não íntegro nessas instâncias. Se o Aplicativo B estiver íntegro, a instância não será substituída.

Diagrama visual explicando o cenário de exemplo acima.

Observação

Se houvesse outro site ou slot no Plano (Site C) sem a verificação de integridade habilitada, ele não seria levado em consideração para a substituição da instância.

E se todas as minhas instâncias não estão íntegras?

No cenário em que todas as instâncias do seu aplicativo não estão íntegras, o Serviço de Aplicativo removerá instâncias do balanceador de carga. Nesse cenário, remover todas as instâncias de aplicativo não íntegras da rotação do balanceador de carga causaria efetivamente uma interrupção do aplicativo. No entanto, a substituição de instâncias ainda será honrada.

A verificação de Integridade funciona em Ambientes do Serviço de Aplicativo?

Sim, a verificação de integridade está disponível para o Ambiente do Serviço de Aplicativo v3, mas não para as versões 1 ou 2. Se você estiver usando as versões mais antigas do Ambiente do Serviço de Aplicativo, use o recurso de migração para migrar o Ambiente do Serviço de Aplicativo para a versão 3.

Próximas etapas