Share via


Como configurar investigações de integridade e períodos de término normal para aplicativos hospedados nos Aplicativos Spring do Azure

Este artigo aplica-se a: ✔️ Java ✔️ C#

Este artigo se aplica ao: ✔️ nível Básico/Standard ✔️ nível Enterprise

Este artigo mostra como personalizar aplicativos em execução nos Aplicativos Spring do Azure com investigações de integridade e períodos de término normal.

Uma investigação é uma atividade de diagnóstico realizada periodicamente pelos Aplicativos Spring do Azure em uma instância de aplicativo. Para executar um diagnóstico, os Aplicativos Spring do Azure executam uma das seguintes ações:

  • Executa um comando arbitrário de sua escolha na instância de aplicativo.
  • Estabelece uma conexão de soquete TCP.
  • Faz uma solicitação HTTP.

Os Aplicativos Spring do Azure oferecem regras padrão de investigação de integridade para cada aplicativo. Este artigo mostra como personalizar seu aplicativo com três tipos de investigações de integridade:

  • As investigações de atividade determinam quando reiniciar um aplicativo. Por exemplo, as investigações de atividade podem identificar um deadlock, por exemplo, quando um aplicativo está em execução mas não consegue fazer progresso. Reiniciar o aplicativo em estado de deadlock pode deixar o aplicativo disponível apesar de erros.

  • As investigações de preparação determinam quando uma instância de aplicativo está pronta para começar a aceitar tráfego. Por exemplo, as investigações de preparação podem controlar quais instâncias de aplicativo são usadas como back-ends para o aplicativo. Quando uma instância de aplicativo não está pronta, ela é removida da descoberta do serviço do Kubernetes. Para obter mais informações, confira Descobrir e registrar aplicativos Spring Boot. Para obter mais informações sobre a descoberta de serviço com o plano Enterprise, consulte Usar o Tanzu Service Registry.

  • As investigações de inicialização determinam quando um aplicativo foi iniciado. Uma investigação de inicialização desabilita as verificações de disponibilidade e preparação até que a inicialização seja bem-sucedida, garantindo que as investigações de disponibilidade e preparação não interfiram na inicialização do aplicativo. Você pode usar as investigações de inicialização para executar verificações de atividade em aplicativos com início lento, impedindo que o aplicativo seja encerrado antes que fique ativo.

Pré-requisitos

  • CLI do Azure com a extensão dos Aplicativos Spring do Azure. Use o comando a seguir para remover versões anteriores e instalar a extensão mais recente. Se você instalou a extensão do Spring Cloud anteriormente, desinstale-a para evitar incompatibilidades de configuração e de versão.

    az extension remove --name spring
    az extension add --name spring
    az extension remove --name spring-cloud
    

Configurar investigações de integridade e término normal para aplicativos

As seções a seguir descrevem como configurar investigações de integridade e terminação normal usando a CLI do Azure.

Término normal

A tabela a seguir descreve a propriedade terminationGracePeriodSeconds, que você pode usar para configurar o encerramento normal.

Nome da propriedade Descrição
terminationGracePeriodSeconds A duração em segundos após os processos em execução na instância de aplicativo receberem um sinal de término e antes que sejam interrompidos à força. Defina esse valor por mais tempo do que o tempo de limpeza esperado para seu processo. O valor deve ser um inteiro não negativo. Definir o período de carência como 0 interrompe a instância do aplicativo imediatamente por meio do sinal de encerramento, sem nenhuma oportunidade de desligar. Se o valor for nulo, os Aplicativos Spring do Azure usarão o período de carência padrão. O valor padrão é 90.

Propriedades da investigação de integridade

A tabela a seguir descreve as propriedades que você pode usar para configurar investigações de integridade.

Nome da propriedade Descrição
initialDelaySeconds O número de segundos depois que a instância de aplicativo é iniciada antes que as investigações sejam iniciadas. O valor padrão é 0, o valor mínimo.
periodSeconds A frequência em segundos para realizar a investigação. O valor padrão é 10. O valor mínimo é 1.
timeoutSeconds O número de segundos até a investigação atingir o tempo limite. O valor padrão é 1, o valor mínimo.
failureThreshold O número mínimo de falhas consecutivas para que a investigação seja considerada como falha após ter sido bem-sucedida. O valor padrão é 3. O valor mínimo é 1.
successThreshold O número mínimo de sucessos consecutivos para que a investigação seja considerada bem-sucedida após apresentar falha. O valor padrão é 1. O valor deve ser 1 para atividade e inicialização. O valor mínimo é 1.

Propriedades da ação de investigação

Há três maneiras de verificar uma instância de aplicativo usando uma investigação. Cada investigação deve definir uma das seguintes ações de investigação:

  • HTTPGetAction

    Executa uma solicitação HTTP GET na instância de aplicativo em um caminho especificado. O diagnóstico será considerado bem-sucedido se a resposta tiver um código de status superior ou igual a 200 e inferior a 400.

    Nome da propriedade Descrição
    scheme O esquema a ser usado para se conectar ao host. O padrão é HTTP.
    path O caminho para acesso no servidor HTTP da instância de aplicativo, como /healthz.
  • ExecAction

    Executa um comando especificado na instância de aplicativo. O diagnóstico será considerado bem-sucedido se o comando for encerrado com um código de status 0.

    Nome da propriedade Descrição
    command O comando a ser executado na instância de aplicativo. O diretório de trabalho do comando é o diretório raiz (/) no sistema de arquivos da instância de aplicativo. Como o comando é executado usando exec e não dentro de um shell, as instruções do shell não funcionarão. Para usar um shell, chame explicitamente esse shell. Um status de saída 0 é tratado como ativo/íntegro, já um status diferente de zero não é íntegro.
  • TCPSocketAction

    Executa uma verificação TCP na instância de aplicativo.

    Não há propriedades disponíveis para a ação TCPSocketAction.

Personalizar seu aplicativo

Use as etapas a seguir para personalizar seu aplicativo usando o portal do Azure.

  1. Em Configurações, selecione Aplicativos e selecione o aplicativo na lista.

    Screenshot of Azure portal showing the Apps page.

  2. Selecione Configuração no painel de navegação esquerdo, selecione Investigações de integridade e especifique as propriedades da investigação de integridade.

    Screenshot of the Azure portal Configuration page showing the Health probes tab.

  3. Para definir o período de carência de término, selecione Configurações gerais e especifique um valor na caixa Período de carência de término.

    Screenshot of the Azure portal Configuration page showing the General settings tab.

Práticas recomendadas

Use as seguintes práticas recomendadas ao adicionar testes de integridade aos Aplicativos Spring do Azure:

  • Use as investigações de atividade e de preparação juntas. Os Aplicativos Spring do Azure fornecem duas abordagens para descoberta de serviço ao mesmo tempo. Quando a investigação de preparação falhar, a instância de aplicativo será removida somente da descoberta de serviço do Kubernetes. Uma investigação de atividade configurada corretamente pode remover a instância de aplicativo emitida na descoberta de serviço Eureka para evitar casos inesperados. Para obter mais informações sobre a descoberta de serviço, confira Descobrir e registrar aplicativos Spring Boot. Para obter mais informações sobre a descoberta de serviço com o plano Enterprise, consulte Usar o Tanzu Service Registry.

  • Quando uma instância de aplicativo é iniciada, a primeira verificação ocorre após o atraso especificado por initialDelaySeconds. As verificações subsequentes ocorrem periodicamente, de acordo com o período especificado por periodSeconds. Se o aplicativo não responder às solicitações por várias vezes conforme especificado por failureThreshold, a instância do aplicativo será reiniciada. Verifique se o aplicativo pode iniciar rápido o suficiente ou atualize esses parâmetros, de modo que o tempo limite total initialDelaySeconds + periodSeconds * failureThreshold seja maior do que o tempo de início do aplicativo.

  • Para aplicativos Spring Boot, o Spring Boot é fornecido com o suporte a Grupos de Integridade , permitindo que os desenvolvedores selecionem um subconjunto de indicadores de integridade e os agrupem em um único status de integridade correlacionado. Para obter mais informações, confira Investigações de atividade e de preparação com o Spring Boot no Spring Blog.

    O seguinte exemplo mostra uma investigação de atividade com o Spring Boot:

    "probe": {
           "initialDelaySeconds": 30,
           "periodSeconds": 10,
           "timeoutSeconds": 1,
           "failureThreshold": 30,
           "successThreshold": 1,
           "probeAction": {
               "type": "HTTPGetAction",
               "scheme": "HTTP",
               "path": "/actuator/health/liveness"
           }
       }
    

    O seguinte exemplo mostra uma investigação de preparação com o Spring Boot:

    "probe": {
           "initialDelaySeconds": 0,
           "periodSeconds": 10,
           "timeoutSeconds": 1,
           "failureThreshold": 3,
           "successThreshold": 1,
           "probeAction": {
               "type": "HTTPGetAction",
               "scheme": "HTTP",
               "path": "/actuator/health/readiness"
           }
       }
    

Perguntas frequentes

Esta seção fornece respostas para perguntas frequentes sobre como usar investigações de integridade com os Aplicativos Spring do Azure.

  • Recebi uma resposta 400 quando criei aplicativos com investigações de integridade personalizadas. O que isso significa?

    A mensagem de erro aponta qual investigação é responsável pela falha do provisionamento. Verifique se as regras da investigação de integridade estão corretas e se o tempo limite é longo o suficiente para que o aplicativo entre no estado de execução.

  • Quais são as configurações de investigação padrão para um aplicativo existente?

    O seguinte exemplo mostra as configurações padrão:

    "startupProbe": null,
    "livenessProbe": {
        "disableProbe": false,
        "failureThreshold": 3,
        "initialDelaySeconds": 300,
        "periodSeconds": 10,
        "probeAction": {
            "type": "TCPSocketAction"
        },
        "successThreshold": 1,
        "timeoutSeconds": 3
    },
    "readinessProbe": {
        "disableProbe": false,
        "failureThreshold": 3,
        "initialDelaySeconds": 0,
        "periodSeconds": 5,
        "probeAction": {
            "type": "TCPSocketAction"
        },
        "successThreshold": 1,
        "timeoutSeconds": 3
    }
    

Próximas etapas