Partilhar via


Como configurar testes de integridade e períodos de término normais para aplicativos hospedados no Azure Spring Apps

Nota

Os planos Basic, Standard e Enterprise serão preteridos a partir de meados de março de 2025, com um período de aposentadoria de 3 anos. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte o anúncio de aposentadoria do Azure Spring Apps.

O plano de consumo padrão e dedicado será preterido a partir de 30 de setembro de 2024, com um desligamento completo após seis meses. Recomendamos a transição para os Aplicativos de Contêiner do Azure. Para obter mais informações, consulte Migrar consumo padrão e plano dedicado do Azure Spring Apps para Aplicativos de Contêiner do Azure.

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

Este artigo aplica-se a: ✔️ Basic/Standard ✔️ Enterprise

Este artigo mostra como personalizar aplicativos em execução no Azure Spring Apps com testes de integridade e períodos de término normais.

Uma sonda é uma atividade de diagnóstico executada periodicamente pelo Azure Spring Apps em uma instância de aplicativo. Para executar um diagnóstico, o Azure Spring Apps executa uma das seguintes ações:

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

O Azure Spring Apps oferece regras de investigação de integridade padrão para cada aplicativo. Este artigo mostra como personalizar seu aplicativo com três tipos de testes de integridade:

  • As sondas Liveness determinam quando reiniciar um aplicativo. Por exemplo, os testes de vivacidade podem identificar um deadlock, como quando um aplicativo está em execução, mas não consegue progredir. Reiniciar o aplicativo em um estado de bloqueio pode torná-lo disponível apesar dos erros.

  • Os testes de preparação determinam quando uma instância do aplicativo está pronta para começar a aceitar tráfego. Por exemplo, os testes de preparação podem controlar quais instâncias do 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 Kubernetes. Para obter mais informações, consulte Descubra e registre seus aplicativos Spring Boot. Para obter mais informações sobre a descoberta de serviços com o plano Enterprise, consulte Usar o Tanzu Service Registry.

  • As sondas de inicialização determinam quando um aplicativo foi iniciado. Uma sonda de inicialização desabilita as verificações de vivacidade e prontidão até que a inicialização seja bem-sucedida, garantindo que as sondas de vivacidade e prontidão não interfiram na inicialização do aplicativo. Você pode usar testes de inicialização para executar verificações de vivacidade em aplicativos de inicialização lenta, impedindo que o aplicativo seja encerrado antes de estar em execução.

Pré-requisitos

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

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

Configurar testes de integridade e terminação normal para aplicativos

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

Rescisão graciosa

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

Property name Description
terminationGracePeriodSeconds A duração em segundos após os processos em execução na instância do aplicativo recebem um sinal de encerramento antes de serem interrompidos à força. Defina esse valor por mais tempo do que o tempo de limpeza esperado para o seu processo. O valor deve ser um número 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 eliminação, sem oportunidade de desligar. Se o valor for nulo, o Azure Spring Apps usará o período de carência padrão. O valor padrão é 90.

Propriedades da sonda de saúde

A tabela a seguir descreve as propriedades que você pode usar para configurar testes de integridade.

Property name Description
initialDelaySeconds O número de segundos após o início da instância do aplicativo antes que as sondas sejam iniciadas. O valor padrão é 0, o valor mínimo.
periodSeconds A frequência em segundos para executar a sonda. O valor predefinido é 10. O valor mínimo é 1.
timeoutSeconds O número de segundos até o tempo limite da sonda expirar. O valor padrão é 1, o valor mínimo.
failureThreshold O número mínimo de falhas consecutivas para que a sonda seja considerada 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 sonda seja considerada bem-sucedida após ter falhado. O valor padrão é 1. O valor deve ser 1 para liveness e startup. O valor mínimo é 1.

Propriedades de ação da sonda

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

  • HTTPGetAction

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

    Property name Description
    scheme O esquema a ser usado para se conectar ao host. O padrão é HTTP.
    path O caminho para acessar no servidor HTTP da instância do aplicativo, como /healthz.
  • ExecAction

    Executa um comando especificado dentro da instância do aplicativo. O diagnóstico é considerado bem-sucedido se o comando for encerrado com um código de status de 0.

    Property name Description
    command O comando a ser executado dentro da instância do aplicativo. O diretório de trabalho para o comando é o diretório raiz (/) no sistema de arquivos da instância do 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 o shell. Um status de saída de 0 é tratado como vivo/saudável, e diferente de zero não é íntegro.
  • TCPSocketAction

    Executa uma verificação TCP em relação à instância do aplicativo.

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

Personalize a sua aplicação

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

  1. Em Definições, selecione Aplicações e, em seguida, selecione a aplicação na lista.

    Captura de ecrã do portal do Azure a mostrar a página Aplicações.

  2. Selecione Configuração no painel de navegação esquerdo, selecione Sondas de integridade e especifique Propriedades da sonda de integridade.

    Captura de ecrã da página Configuração do portal do Azure a mostrar o separador Sondas de Saúde.

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

    Captura de ecrã da página Configuração do portal do Azure a mostrar o separador Definições gerais.

Melhores práticas

Use as seguintes práticas recomendadas ao adicionar testes de integridade ao Azure Spring Apps:

  • Use sondas de vivacidade e prontidão juntas. O Azure Spring Apps fornece duas abordagens para a descoberta de serviços ao mesmo tempo. Quando o teste de preparação falha, a instância do aplicativo é removida somente da descoberta do serviço Kubernetes. Uma sonda de vivacidade configurada corretamente pode remover a instância do aplicativo emitida da descoberta do serviço Eureka para evitar casos inesperados. Para obter mais informações sobre a descoberta de serviços, consulte Descobrir e registrar seus aplicativos Spring Boot. Para obter mais informações sobre a descoberta de serviços 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 pelo initialDelaySeconds. As verificações subsequentes ocorrem periodicamente, de acordo com a duração do período especificado pela periodSeconds. Se o aplicativo não responder às solicitações por várias vezes, conforme especificado pelo failureThreshold, a instância do aplicativo será reiniciada. Certifique-se de que seu aplicativo pode iniciar rápido o suficiente, ou atualizar esses parâmetros, para que o tempo limite initialDelaySeconds + periodSeconds * failureThreshold total seja maior do que a hora de início do seu 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, consulte Sondas de vivacidade e prontidão com o Spring Boot no Blog do Spring.

    O exemplo a seguir mostra uma sonda de vivacidade 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 exemplo a seguir mostra uma sonda de prontidã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 mais frequentes

Esta seção fornece respostas para perguntas frequentes sobre como usar sondas de integridade com o Azure Spring Apps.

  • Recebi uma resposta de 400 quando criei aplicações com sondas de saúde personalizadas. Qual é o significado disto?

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

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

    O exemplo a seguir 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óximos passos