Como solucionar problemas do acionador do Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Esta página fornece etapas para solução de problemas e informações para problemas problemas com o gatilho do Airflow.

Operações de bloqueio no gatilho

Tarefas assíncronas podem, ocasionalmente, ser bloqueadas em acionadores. Na maioria dos casos, os problemas vêm de recursos insuficientes de engatilhador ou problemas com o código de operador assíncrono personalizado.

Os registros do engatilhador exibem todas as mensagens de aviso que podem ajudar a identificar as causas principais da queda no desempenho do acionador. Existem duas avisos significativos a serem observados.

  1. Linha de execução assíncrona bloqueada

    Triggerer's async thread was blocked for 1.2 seconds, likely due to the highly utilized environment.
    

    Esse aviso sinaliza problemas de performance devido a um alto volume de tarefas assíncronas.

    Solução: para resolver esse problema, aloque mais recursos para os gatilhos, reduzir o número de tarefas adiadas executadas ao mesmo tempo ou aumente o número de gatilhos no seu ambiente. Embora os acionadores processem tarefas adiáveis, é os workers responsáveis por iniciar e, para concluir cada tarefa. Se você estiver ajustando o número de acionadores, considere também escalonar o número de instâncias de worker.

  2. Uma tarefa específica bloqueou a linha de execução assíncrona.

    WARNING - Executing <Task finished coro=<TriggerRunner.run_trigger() done, defined at /opt/***/***/jobs/my-custom-code.py:609> result=None> took 0.401 second
    

    Esse aviso aponta para uma parte específica do código do operador executado pelo Cloud Composer Por padrão, os gatilhos precisam depender da biblioteca asyncio para operações em segundo plano. A implementação personalizada de um gatilho pode não aderir corretamente aos contratos asyncio (por exemplo, devido a erros uso de palavras-chave await e async no código Python).

    Solução: inspecione o código informado pelo aviso e verifique se o operação assíncrona foi implementada corretamente.

Acionadores em excesso

O número de tarefas adiadas fica visível na métrica task_count, que é exibidos no painel do Monitoring do seu ambiente. Cada acionador cria alguns recursos, como conexões com recursos externos, que consomem memória.

Tarefas adiadas exibidas no painel do Monitoring
Figura 1. Tarefas adiadas exibidas no painel do Monitoring (clique para ampliar)
.

Os gráficos de memória e consumo de CPU indicam que a insuficiência de recursos causa é reiniciada porque a sondagem de atividade falha devido à ausência de sinais de funcionamento:

O engatilhador é reiniciado devido a recursos insuficientes
Figura 2. O engatilhador é reiniciado devido a recursos insuficientes (clique para ampliar)
.

Solução: para resolver esse problema, aloque mais recursos para os gatilhos, reduzir o número de tarefas adiadas executadas ao mesmo tempo ou aumente o número de gatilhos no seu ambiente.

Falha de um worker do Airflow durante a execução do callback

Depois que o gatilho termina a execução, o controle retorna para uma janela do Airflow worker, que executa um método de callback usando um slot de execução. Esta fase é controlado pelo Celery Executor. Portanto, a configuração e o os limites de recursos são aplicados (como parallelism ou worker_concurrency).

Se o método de callback falhar no worker do Airflow, o worker também vai falhar O worker que executa o método é reiniciado, e a tarefa é marcada como FAILED. Em nesse caso, a operação de repetição vai executar novamente a tarefa inteira, não apenas método de callback.

Loop infinito em um gatilho

É possível implementar um operador de gatilho personalizado de modo a bloqueia totalmente o loop do engatilhador principal, de modo que apenas o gatilho corrompido seja executados na época. Nesse caso, um aviso é gerado nos registros do engatilhador após o o gatilho problemático seja concluído.

Classe de gatilho não encontrada

Como a pasta de DAGs não está sincronizada com o acionador do Airflow, o O código do acionador embutido está ausente quando o acionador é executado. O erro é gerada nos registros da tarefa com falha:

ImportError: Module "PACKAGE_NAME" does not define a "CLASS_NAME" attribute/
class

Solução: importe o código ausente do PyPI.

Mensagem de aviso sobre o acionador na interface do Airflow

Em alguns casos, depois que o acionador é desativado, você pode ver o seguinte na interface do Airflow:

The triggerer does not appear to be running. Last heartbeat was received
4 hours ago. Triggers will not run, and any deferred operator will remain
deferred until it times out or fails.

O Airflow pode mostrar esta mensagem porque gatilhos incompletos permanecem no Airflow no seu banco de dados. Essa mensagem geralmente significa que o engatilhador foi desativado antes de todos foram concluídos no seu ambiente.

Para visualizar todos os gatilhos em execução no ambiente, verifique o Procurar &gt; página Gatilhos na interface do Airflow (o papel Admin é obrigatório).

Soluções:

As tarefas permanecem no estado adiado depois que o acionador é desativado

Quando o acionador está desativado, as tarefas que já estão no estado adiado permanece nesse estado até atingir o tempo limite. Esse tempo limite pode ser infinita, dependendo da configuração do DAG e do Airflow.

Use uma das seguintes soluções:

  • Marcar manualmente as tarefas como falhas.
  • Ative o acionador para concluir as tarefas.

Recomendamos desativar o acionador apenas se o ambiente não executar nenhum operadores ou tarefas adiadas, e todas as tarefas adiadas são concluídas.

A seguir