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.
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.
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 contrattiasyncio
, ad esempio a causa di un utilizzo non corretto di parole chiaveawait
easync
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.
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:
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:
- Abilita di nuovo l'attivatore e attendi il completamento delle attività differite.
- Accedi al database Airflow ed elimina manualmente i trigger incompleti.
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.