Risoluzione dei problemi dell'attivatore Airflow

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Questa pagina fornisce passaggi e informazioni per la risoluzione dei problemi comuni con il trigger di Airflow.

Operazioni di blocco nel trigger

Le attività asincrone potrebbero occasionalmente essere bloccate nei triggerer. Nella maggior parte dei casi, i problemi derivano da risorse di attivazione insufficienti o da problemi con il codice dell'operatore asincrono personalizzato.

I log dei trigger mostrano eventuali messaggi di avviso che possono aiutarti a identificare le cause principali del calo del rendimento dei trigger. Ci sono due avvisi importanti da tenere d'occhio.

  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 prestazioni 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 attivatori nel tuo ambiente. Tieni presente che, anche se i trigger gestiscono le attività differibili, sono i worker a essere responsabili dell'avvio e del completamento di ogni attività. Se modifichi il numero di triggerer, 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 indica un codice operatore specifico eseguito da Cloud Composer. I trigger per progettazione devono basarsi sulla libreria asyncio per l'esecuzione di operazioni in background. Un'implementazione personalizzata di un trigger potrebbe non rispettare correttamente i contratti asyncio (ad esempio a causa dell'utilizzo errato delle parole chiave await e async nel codice Python).

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

Troppi trigger

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

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

I grafici del consumo di memoria e CPU indicano che risorse insufficienti causano riavvii perché il probe di attività non riesce a causa della mancanza di heartbeat:

Il triggerer viene riavviato a causa di risorse insufficienti
Figura 2. Riavvii del triggerer 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 attivatori nel tuo ambiente.

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

Al termine dell'esecuzione del trigger, 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 (ad esempio parallelism o worker_concurrency).

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

Loop infinito in un trigger

È possibile implementare un operatore di attivazione personalizzato in modo che blocchi completamente il ciclo di attivazione principale, in modo che venga eseguito solo l'attivatore interrotto alla volta. In questo caso, nei log del triggerer viene generato un avviso dopo il completamento del trigger problematico.

Classe trigger non trovata

Poiché la cartella DAG non è sincronizzata con il trigger di Airflow, il codice del trigger incorporato non è presente quando il trigger viene eseguito. 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 relativo all'attivatore nella UI di Airflow

In alcuni casi, dopo la disattivazione del trigger, 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 il trigger è stato disattivato prima che tutti i trigger siano stati completati nel tuo ambiente.

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

Soluzioni:

Le attività rimangono nello stato differito dopo la disattivazione del trigger

Quando il trigger è disattivato, 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 del DAG.

Utilizza una delle seguenti soluzioni:

  • Contrassegna manualmente le attività come non riuscite.
  • Consenti all'attivatore di completare le attività.

Ti consigliamo di disattivare il trigger solo se il tuo ambiente non esegue operatori o attività differite e tutte le attività differite sono completate.

Passaggi successivi