Risoluzione dei problemi dell'attivatore Airflow

Cloud Composer 1 | Cloud Composer 2 | Cloud Composer 3

Questa pagina fornisce i passaggi per la risoluzione dei problemi e le informazioni per i problemi comuni dell'attivatore Airflow.

Operazioni di blocco nel trigger

Le attività asincrone potrebbero a volte essere bloccate negli attivatori. Nella maggior parte dei casi, i problemi provengono da risorse trigger insufficienti o da problemi con il codice dell'operatore asincrono personalizzato.

I log del triggerer mostrano tutti i messaggi di avviso che possono aiutarti a identificare le cause principali della diminuzione delle prestazioni dell'attivatore. Ci sono due avvisi significativi da cercare.

  1. Thread asincrono bloccato

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

    Questo avviso segnala problemi di rendimento dovuti a un volume elevato di attività asincrone.

    Soluzione: per risolvere il problema, alloca più risorse agli attivatori, riduci il numero di attività differite eseguite contemporaneamente o aumenta il numero di triggerer nel tuo ambiente. Tieni presente che, anche se gli attivatori gestiscono attività irreversibili, sono i worker che sono responsabili dell'avvio e del completamento di ogni attività. Se stai regolando il numero di triggerer, ti consigliamo anche di scalare il numero di istanze worker.

  2. Un'attività specifica ha bloccato il thread asincrono.

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

    Questo avviso punta a una parte specifica del codice operatore eseguita da Cloud Composer. Per impostazione predefinita, i trigger devono basarsi sulla libreria asyncio per eseguire le operazioni in background. Un'implementazione personalizzata di un trigger può non rispettare correttamente i contratti asyncio (ad esempio a causa di un utilizzo non corretto delle parole chiave await e async nel codice Python).

    Soluzione: controlla il codice riportato nell'avviso e verifica che l'operazione asincrona sia implementata correttamente.

Troppi trigger

Il numero di attività differite è visibile nella metrica task_count, visualizzata anche nella dashboard di Monitoring del tuo ambiente. Ogni trigger crea alcune risorse, come connessioni a risorse esterne, che consumano memoria.

Attività differite visualizzate nella dashboard di Monitoring
Figura 1. Attività differite visualizzate nella dashboard di Monitoring (fai clic per ingrandire)

I grafici relativi al consumo di memoria e CPU indicano che risorse insufficienti causano riavvii perché il probe di attività ha esito negativo a causa di heartbeat mancanti:

Il triggerer si riavvia a causa di risorse insufficienti
Figura 2. Il triggerer si riavvia a causa di risorse insufficienti (fai clic per ingrandire)

Soluzione: per risolvere il problema, alloca più risorse agli attivatori, riduci il numero di attività differite eseguite contemporaneamente o aumenta il numero di triggerer nel tuo ambiente.

Arresto anomalo di un worker Airflow durante l'esecuzione del callback

Dopo che il trigger termina l'esecuzione, il controllo torna a un worker Airflow, che esegue un metodo di callback utilizzando uno slot di esecuzione. Questa fase è controllata da Celery Executor, pertanto si applicano i limiti di configurazione e di risorse corrispondenti (come parallelism o worker_concurrency).

Se il metodo di callback non riesce nel worker Airflow, il worker non riesce o il worker che esegue il metodo si riavvia, l'attività viene contrassegnata come FAILED. In questo caso, l'operazione di ripetizione esegue nuovamente l'intera attività, non solo il metodo di callback.

Ciclo infinito in un trigger

È possibile implementare un operatore di trigger personalizzato in modo tale da bloccare completamente il loop dell'attivatore principale, in modo che venga eseguito solo il trigger non funzionante alla volta. In questo caso, al termine del trigger problematico, viene generato un avviso nei log dell'attivatore.

Classe trigger non trovata

Poiché la cartella dei DAG non è sincronizzata con l'attivatore Airflow, il codice trigger incorporato non è presente quando viene eseguito il trigger. L'errore viene generato nei log dell'attività non riuscita:

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

Soluzione: importa il codice mancante da PyPI.

Messaggio di avviso sull'attivatore nella UI di Airflow

In alcuni casi, dopo la disattivazione dell'attivatore, potresti visualizzare il seguente messaggio di avviso nella UI di 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.

Airflow può mostrare questo messaggio perché i trigger incompleti rimangono nel database Airflow. Questo messaggio di solito indica che l'attivatore è stato disabilitato prima del completamento di tutti gli attivatori nell'ambiente.

Puoi visualizzare tutti i trigger in esecuzione nell'ambiente selezionando la pagina Sfoglia > Trigger nella UI di Airflow (è richiesto il ruolo Admin).

Soluzioni:

Le attività rimangono in stato differito dopo la disattivazione dell'attivatore

Quando l'attivatore viene disabilitato, le attività già in stato differito rimangono in questo stato fino al raggiungimento del timeout. Questo timeout può essere infinito, a seconda della configurazione di Airflow e DAG.

Utilizza una delle seguenti soluzioni:

  • Contrassegna manualmente le attività come non riuscite.
  • Attiva l'attivatore per completare le attività.

Ti consigliamo di disabilitare l'attivatore solo se nel tuo ambiente non vengono eseguiti operatori o attività differiti e tutte le attività differite sono state completate.

Passaggi successivi