Monitorizar instâncias do Serviço de Aplicações com a Verificação de estado de funcionamento

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 seu aplicativo redirecionando solicitações para longe de instâncias não íntegras e substituindo instâncias se elas permanecerem não íntegras. Ele faz isso fazendo ping a cada minuto de um caminho de sua aplicação web de sua escolha.

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 certificar-se de que o caminho que você está selecionando é um caminho válido que existe dentro do seu aplicativo

O que é que o Serviço de Aplicações faz com as Verificações de estado de funcionamento?

  • Quando recebe um caminho em seu aplicativo, a verificação de integridade executa ping nesse caminho em todas as instâncias do seu 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 (inclusive) após 10 solicitações, o Serviço de Aplicativo determinará que ele não está íntegro e o removerá do balanceador de carga desse Aplicativo Web. O número necessário de solicitações com falha para que uma instância seja considerada não íntegra é configurável para um mínimo de duas solicitações.
  • Após a remoção, a verificação de integridade continua a executar a instância insalubre. Se a instância começar a responder com um código de status íntegro (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 dimensionar, o Serviço de Aplicativo executa ping no caminho de verificação de integridade para garantir que novas instâncias estejam prontas.

Nota

  • A verificação de integridade não segue redirecionamentos 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 Aplicações.
  • Se sua verificação de integridade está dando o status Waiting for health check response , então a verificação provavelmente está falhando devido a um código de status HTTP de 307, o que pode acontecer se você tiver o redirecionamento HTTPS habilitado, mas tiver HTTPS Only desativado.

Ativar verificação de integridade

Navegação de verificação de integridade no portal do Azure

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

Nota

  • Seu plano do Serviço de Aplicativo deve ser dimensionado para duas ou mais instâncias para utilizar totalmente 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 de 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 500 níveis 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, verifique se você está selecionando um caminho que retorna um código de status 200, somente quando o aplicativo estiver totalmente aquecido.
  • Para usar a verificação de integridade em seu aplicativo de função, você deve usar um plano de hospedagem premium ou dedicado.
  • Detalhes sobre a verificação de integridade em aplicativos de função podem ser encontrados aqui: Monitorar aplicativos de função usando a verificação de integridade.

Atenção

As alterações de configuração da verificação de integridade reiniciam seu aplicativo. Para minimizar o impacto nos aplicativos de produção, recomendamos configurar slots de preparo e trocar para produção.

Configuração

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

Nome de definição de aplicação Valores permitidos Description
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ão excluídas do balanceador de carga de uma só vez 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 íntegros, duas serão excluídas. As outras duas instâncias (uma saudável e outra não íntegra) continuam a receber solicitações. No pior cenário, em que todas as instâncias não estão íntegras, nenhuma é excluída.
Para substituir esse comportamento, defina a configuração do aplicativo como um valor entre 1 e 100. Um valor mais alto significa que mais instâncias não íntegras são removidas (o valor padrão é 50).

Autenticação e segurança

A verificação de integridade integra-se aos recursos de autenticação e autorização do Serviço de Aplicativo. Nenhuma outra configuração será 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 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 cliente ou uma rede virtual para restringir o acesso ao aplicativo. Depois de ter esses recursos in-loco, você pode autenticar a solicitação de verificação de integridade inspecionando o cabeçalho x-ms-auth-internal-tokene validando se ele corresponde ao hash SHA256 da variável WEBSITE_AUTH_ENCRYPTION_KEYde ambiente. Se corresponderem, a solicitação de verificação de integridade é válida e originada do Serviço de Aplicativo.

Nota

Especificamente para a autenticação do Azure Functions, a função que serve como ponto de extremidade de verificação de integridade precisa permitir 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;
}

Nota

O x-ms-auth-internal-token cabeçalho 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 aplicativo por meio da guia Instâncias. A guia instâncias mostra o nome da 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á reiniciar a instância manualmente usando o botão de reinicialização na tabela. Lembre-se de que quaisquer outros aplicativos hospedados no mesmo Plano do Serviço de Aplicativo que a instância também serão afetados pela reinicialização. Se houver outros aplicativos usando o mesmo Plano do Serviço de Aplicativo que a instância, eles serão listados na folha de abertura do 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 o trabalhador (apenas 1 instância pode ser substituída por hora). Isso também afetará todos os aplicativos que usam o mesmo Plano do Serviço de Aplicativo.

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

Recolha 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óstico adiciona uma regra de recuperação automática que cria despejos de memória para instâncias não íntegras e a salva em uma conta de armazenamento designada. Ativar essa opção altera as configurações de recuperação automática. Se houver regras de recuperação automática existentes, recomendamos configurá-las por meio do diagnóstico do Serviço de Aplicativo.

Depois que a coleta de diagnóstico 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 site não estiverem íntegras após pings contínuos, você poderá acessar o recurso da conta de armazenamento e visualizar os despejos de memória.

Monitorização

Depois de fornecer o caminho de verificação de integridade do seu aplicativo, você pode monitorar a integridade do seu site usando o Azure Monitor. Na folha Verificação de integridade no Portal, selecione Métricas na barra de ferramentas superior. Isso abrirá uma nova folha onde você poderá ver o status histórico de integridade do site e a opção de criar uma nova regra de alerta. As métricas de verificação de integridade agregam os pings bem-sucedidos e exibem falhas somente quando a instância foi 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 no Azure Monitor.

Limitações

  • A verificação de integridade pode ser habilitada para Planos de Serviço de Aplicativo Gratuitos e Compartilhados para que você possa ter métricas nos alertas de integridade e configuração do site, mas como os sites Gratuitos e Compartilhados não podem ser dimensionados, as instâncias não íntegras não serão substituídas. Você deve escalar para a camada Básica ou superior para poder expandir para 2 ou mais instâncias e utilizar todos os benefícios 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 para o 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 Mais Frequentes

O que acontece se a minha aplicação estiver em execução numa única instância?

Se seu aplicativo for dimensionado apenas para uma instância e não estiver íntegro, ele não será removido do balanceador de carga porque isso derrubaria totalmente seu aplicativo. No entanto, após uma hora de pings insalubres contínuos, a instância é substituída. Expanda para duas ou mais instâncias para obter o benefício de redirecionamento da verificação de integridade. Se seu aplicativo estiver sendo executado 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 as solicitações de verificação de integridade não são exibidas nos logs do meu servidor Web?

As solicitações de verificação de integridade são enviadas para seu site internamente, portanto, a solicitação não será exibida nos logs do servidor Web. Você pode adicionar instruções de log no código de verificação de integridade para manter registros de quando o caminho da verificação de integridade é pingado.

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

No Serviço de Aplicativo do Windows, as solicitações de verificação de integridade são enviadas via HTTPS quando Somente HTTPS está habilitado no site. Caso contrário, eles serão enviados por HTTP. No Serviço de Aplicativo 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 está retornando não será um 200, mas um redirecionamento (301), que marcará o trabalhador como não íntegro.

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

As instâncias não íntegras sempre serão removidas da rotação do balanceador de carga, independentemente de outros aplicativos no Plano do Serviço de Aplicativo (até a porcentagem especificada 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 não estiverem íntegros. Os aplicativos que não têm a verificação de integridade ativada não serão levados em consideração.

Exemplo

Imagine que você tem dois aplicativos (ou um aplicativo com um slot) com a verificação de saúde habilitada, chamados App A e App B. Eles estão no mesmo Plano do Serviço de Aplicativo e que o Plano é expandido para quatro instâncias. Se o Aplicativo A não estiver íntegro em duas instâncias, o balanceador de carga interromperá o envio de 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 não estiver í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.

Nota

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

E se todas as minhas instâncias não estiverem saudáveis?

No cenário em que todas as instâncias do seu aplicativo não estão íntegras, o Serviço de Aplicativo não removerá instâncias do balanceador de carga. Nesse cenário, tirar todas as instâncias de aplicativo não íntegras da rotação do balanceador de carga causaria efetivamente uma interrupção para seu aplicativo; no entanto, a substituição das 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, poderá usar o recurso de migração para migrar o Ambiente do Serviço de Aplicativo para a versão 3.

Próximos passos