Risoluzione dei problemi dell'attivatore Airflow

Cloud Composer 1 | Cloud Composer 2

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

Operazioni di blocco nel trigger

A volte le attività asincrone potrebbero bloccarsi negli attivatori. Nella maggior parte dei casi, i problemi derivano dall'insufficienza di risorse dell'attivatore o dal codice dell'operatore asincrono personalizzato.

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

  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 con le prestazioni a causa di un volume elevato di attività asincrone.

    Soluzione: per risolvere questo problema, alloca più risorse agli attivatori, riduci il numero di attività differite eseguite contemporaneamente o aumenta il numero di attivatori nel tuo ambiente. Tieni presente che, anche se gli attivatori gestiscono le attività differibili, sono i worker che sono responsabili dell'avvio e del completamento di ogni attività. Se stai regolando il numero di attivatori, valuta anche la possibilità 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 rimanda a una porzione specifica di codice dell'operatore eseguita da Cloud Composer. I trigger in base alla progettazione dovrebbero basarsi sulla libreria asyncio per l'esecuzione di operazioni in background. Un'implementazione personalizzata di un trigger può non ottemperare correttamente ai contratti asyncio, ad esempio a causa di un utilizzo non corretto di parole chiave await e async nel codice Python.

    Soluzione: controlla il codice segnalato dall'avviso e verifica se l'operazione asincrona è implementata correttamente.

Troppi attivatori

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 le 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 sul consumo di memoria e CPU indicano che risorse insufficienti causano riavvii perché il probe di attività ha esito negativo a causa di battiti cardiaci 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 questo problema, alloca più risorse agli attivatori, riduci il numero di attività differite eseguite contemporaneamente o aumenta il numero di attivatori 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 e pertanto si applicano i limiti di configurazione e risorse corrispondenti (come parallelism o worker_concurrency).

Se il metodo di callback non funziona nel worker Airflow, il worker ha esito negativo o il worker che esegue il metodo si riavvia, l'attività viene contrassegnata come FAILED. In questo caso, l'operazione di nuovo tentativo esegue nuovamente l'intera attività, non solo il metodo di callback.

Loop infinito in un trigger

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

Classe trigger non trovata

Poiché la cartella DAG non è sincronizzata con l'attivatore Airflow, il codice del trigger incorporato risulta mancante 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é nel database Airflow rimangono trigger incompleti. Questo messaggio indica solitamente che l'attivatore è stato disabilitato prima che tutti gli attivatori fossero completati nel tuo ambiente.

Per visualizzare tutti i trigger in esecuzione nell'ambiente, seleziona la pagina Sfoglia > Trigger nella UI di Airflow (è necessario il ruolo Admin).

Soluzioni:

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

Quando l'attivatore è disabilitato, le attività già nello 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.
  • Abilita l'attivatore per completare le attività.

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

Passaggi successivi