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.
Em Definições, selecione Aplicações e, em seguida, selecione a aplicação na lista.
Selecione Configuração no painel de navegação esquerdo, selecione Sondas de integridade e especifique Propriedades da sonda de integridade.
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.
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 pelaperiodSeconds
. Se o aplicativo não responder às solicitações por várias vezes, conforme especificado pelofailureThreshold
, 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 limiteinitialDelaySeconds + 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 }