Tratamento e detecção de erro no Lote do Azure
Às vezes, você pode precisar manipular falhas de aplicativo e tarefa na sua solução do Lote do Azure. Este artigo explica os diferentes tipos de erros do Lote e como resolver problemas comuns.
Códigos de erro
Alguns tipos gerais de erros que você pode ver no Lote são:
- Falhas de rede para solicitações que nunca chegaram ao Lote ou falhas de rede quando a resposta do Lote não chegou ao cliente a tempo.
- Erros internos do servidor. Esses erros têm uma resposta HTTP de código de status
5xx
padrão. - Erros relacionados a limitação. Esses erros incluem respostas HTTP do código de status
429
ou503
com o cabeçalhoRetry-after
. -
4xx
erros comoAlreadyExists
eInvalidOperation
. Esses erros indicam que o recurso não está no estado correto para a transição de estado.
Para obter informações detalhadas sobre códigos de erro específicos, consulte Status do Lote e códigos de erro. Essa referência inclui códigos de erro para a API REST, o serviço em lote e para tarefas de trabalho e agendamento.
Falhas de aplicativo
Durante a execução, um aplicativo pode produzir uma saída de diagnóstico. Você pode usar essa saída para solucionar problemas. O serviço do Lote grava a saída padrão e a saída de erro padrão nos arquivos stdout.txt e stderr.txt no diretório de tarefas no nó de computação. Para obter mais informações, confira Arquivos e diretórios no Lote.
Para baixar esses arquivos de saída, use o portal do Azure ou um dos SDKs do Lote. Por exemplo, para recuperar arquivos para solucionar problemas, use ComputeNode.GetNodeFile e CloudTask.GetNodeFile na biblioteca do .NET do Lote.
Erros de tarefa
Os erros de tarefa se enquadram em várias categorias.
Erros de pré-processamento
Se uma tarefa não for iniciada, um erro de pré-processamento é definido para a tarefa. Erros de pré-processamento poderão ocorrer se:
- Os arquivo de recurso da tarefa tiverem sido movidos.
- A conta de armazenamento não estiver mais disponível.
- Aconteceu outro problema que impediu a cópia bem-sucedida dos arquivos para o nó.
Erros de upload de arquivo
Se o carregamento de arquivos especificados para uma tarefa falhar por algum motivo, um erro de carregamento de arquivo é definido para a tarefa. Erros de upload de arquivo poderão ocorrer se:
- O token de assinatura de acesso compartilhado (SAS) fornecido para acessar o Armazenamento do Azure é inválido.
- O token SAS não fornece permissões de gravação.
- A conta de armazenamento não estiver mais disponível.
- Aconteceu outro problema que impediu a cópia bem-sucedida dos arquivos do nó.
Erros de aplicativos
O processo especificado pela linha de comando da tarefa também pode falhar. Para obter mais informações, confira Código de saída da tarefa.
Para os erros do aplicativo, configure o Lote para repetir automaticamente a tarefa até um número especificado de vezes.
Erros da restrição
Para especificar a duração máxima da execução de um trabalho ou de uma tarefa, defina a restrição maxWallClockTime
. Use essa configuração para terminar tarefas que falham em progredir.
Quando a tarefa excede o tempo máximo:
- A tarefa estiver marcada como concluída.
- O código de saída está definido como
0xC000013A
. - O campo schedulingError está marcado como
{ category:"ServerError", code="TaskEnded"}
.
Códigos de saída de tarefas
Quando uma tarefa executa um processo, o Lote preenche a propriedade do código de saída da tarefa com o código de retorno do processo. Se o processo retornar um código de saída diferente de zero, o serviço do Lote marcará a tarefa como tendo falhado.
O serviço do Lote não determina o código de saída da tarefa. O processo em si, ou o sistema operacional em que o processo é executado, determina o código de saída.
Interrupções ou falhas de tarefas
As tarefas podem falhar ou ser interrompidas ocasionalmente. Por exemplo:
- O aplicativo de tarefa em si poderá falhar.
- O nó no qual a tarefa está em execução pode ser reinicializado.
- Uma operação de redimensionar pode remover o nó do pool. Essa ação poderá acontecer se a política de desalocação do pool remover os nós imediatamente sem aguardar a conclusão das tarefas.
Em todos os casos, o Lote pode ser automaticamente recolocar a tarefa na fila para execução em outro nó.
Também é possível que um problema intermitente faça com que uma tarefa pare de responder ou demore muito para ser executada. Você pode definir um intervalo máximo de execução de uma tarefa. Se uma tarefa exceder o intervalo, o serviço do Lote interromperá o aplicativo da tarefa.
Conectar-se a nós de computação
Você pode executar a depuração e a solução de problemas entrando em um nó de computação remotamente. Use o portal do Azure para baixar um arquivo RDP (Remote Desktop Protocol) para os nós do Windows e obter informações da conexão SSH (Secure Shell) para os nós do Linux. Você também pode baixar essas informações usando as APIs .NET do Lote ou Python do Lote.
Para se conectar a um nó via RDP ou SSH, primeiro crie um usuário no nó. Use um dos métodos a seguir:
- O Portal do Azure
- API REST do Lote: adduser
- API do .NET do Lote: ComputeNode.CreateComputeNodeUser
- Módulo do Python do Lote: add_user
Se necessário, configure ou desative o acesso aos nós de computação.
Solucionar problemas de nós de problema
O serviço ou aplicativo cliente do Lote pode examinar os metadados das tarefas com falha para identificar um nó com problema. Cada nó em um pool tem uma ID exclusiva. Os metadados da tarefa incluem o nó em que uma tarefa é executada. Depois de localizar o nó com problema, tente os métodos a seguir para resolver a falha.
Reinicializar nó
Às vezes, reiniciar o nó corrige problemas latentes, como processos bloqueados ou com falha. Se o pool usar uma tarefa de inicialização ou se o trabalho usar uma tarefa de preparação de trabalho, reiniciar o nó executa essas tarefas.
- API REST do Lote: reinicializar
- API REST do Lote: ComputeNode.Reboot
Refazer imagem do nó
Refazer a imagem do nó reinstala o sistema operacional. Tarefas de início e tarefas de preparação de trabalho são executadas novamente após a imagem ser refeita.
- API REST do Lote: refazer imagem
- API REST do Lote: ComputeNode.Reimage
Remover nó do pool
Às vezes é necessário remover o nó do pool.
- Referência da API REST do Lote: removenodes
- API .NET no Lote: PoolOperations
Desabilitar agendamento de tarefas no nó
Desabilitar o agendamento de tarefas em um nó efetivamente coloca o nó no modo offline. O Lote não atribui mais nenhuma tarefa ao nó. Porém, o nó continua sendo executado no pool. Em seguida, você pode investigar ainda mais as falhas sem perder os dados da tarefa que apresentou a falha. O nó também não causará mais falhas nas tarefas.
Por exemplo, desabilite o agendamento de tarefa no nó. Então entre no nó remotamente. Examine os logs de eventos e realize outra solução de problemas. Depois de resolver os problemas, habilite o agendamento de tarefa novamente para colocar o nó no modo online outra vez.
- API REST do Lote: enablescheduling
- API do .NET do Lote: ComputeNode.EnableScheduling
Você pode usar essas ações para especificar como o Lote manipula tarefas em execução no nó. Por exemplo, quando você desabilita o agendamento de tarefas em um nó com uma API do .NET do Lote, pode especificar um valor de enumeração para DisableComputeNodeSchedulingOption. Você pode optar por:
- Encerrar as tarefas em execução:
Terminate
- Recolocar as tarefas em fila para agendamento em outros nós:
Requeue
- Permitir que as tarefas em execução sejam concluídas antes de executar a ação:
TaskCompletion
Tentar novamente após erros
As APIs do Lote o notificarão sobre falhas. Você pode repetir todas as APIs usando o manipulador de repetição global integrado. É uma melhor prática usar essa opção.
Após uma falha, aguarde vários segundos antes de tentar novamente. Se você tentar novamente com muita frequência ou rapidamente, o manipulador de repetição limitará solicitações.