Memecahkan masalah Prosesor DAG

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

Halaman ini hanya membahas masalah terkait Pemrosesan File DAG. Untuk masalah penjadwalan tugas, lihat Memecahkan masalah penjadwal Airflow.

Memecahkan Masalah Alur Kerja

Memeriksa log Prosesor DAG

Jika Anda memiliki DAG yang kompleks, Pemroses DAG mungkin tidak mengurai semua DAG Anda. Hal ini dapat menyebabkan banyak masalah yang memiliki gejala berikut.

Gejala:

  • Jika Pemroses DAG mengalami masalah saat mengurai DAG, hal ini dapat menyebabkan kombinasi masalah yang tercantum di sini. Jika DAG dibuat secara dinamis, masalah ini mungkin lebih berdampak dibandingkan dengan DAG statis.

  • DAG tidak terlihat di UI Airflow dan UI DAG.

  • DAG tidak dijadwalkan untuk dieksekusi.

  • Ada error dalam log pemroses DAG, misalnya:

    dag-processor-manager [2023-04-21 21:10:44,510] {manager.py:1144} ERROR -
    Processor for /home/airflow/gcs/dags/dag-example.py with PID 68311 started
    at 2023-04-21T21:09:53.772793+00:00 has timed out, killing it.
    

    atau

    dag-processor-manager [2023-04-26 06:18:34,860] {manager.py:948} ERROR -
    Processor for /home/airflow/gcs/dags/dag-example.py exited with return
    code 1.
    
  • Prosesor DAG mengalami masalah yang menyebabkan mulai ulang.

  • Tugas Airflow yang dijadwalkan untuk dieksekusi dibatalkan dan DAG berjalan untuk DAG yang gagal diuraikan mungkin ditandai sebagai failed. Contoh:

    airflow-scheduler Failed to get task '<TaskInstance: dag-example.task1--1
    manual__2023-04-17T10:02:03.137439+00:00 [removed]>' for dag
    'dag-example'. Marking it as removed.
    

Solusi:

  • Meningkatkan parameter yang terkait dengan penguraian DAG:

    • Tingkatkan dagbag-import-timeout menjadi minimal 120 detik (atau lebih, jika diperlukan).

    • Tingkatkan dag-file-processor-timeout menjadi minimal 180 detik (atau lebih, jika diperlukan). Nilai ini harus lebih tinggi dari dagbag-import-timeout.

  • Perbaiki atau hapus DAG yang menyebabkan masalah pada pemroses DAG.

Memeriksa waktu penguraian DAG

Untuk memverifikasi apakah masalah terjadi pada waktu penguraian DAG, ikuti langkah-langkah berikut.

Konsol

Di Google Cloud console, Anda dapat menggunakan halaman Monitoring dan tab Logs untuk memeriksa waktu penguraian DAG.

Periksa waktu penguraian DAG dengan halaman Pemantauan Cloud Composer:

  1. Di Google Cloud console, buka halaman Environments.

    [Buka Lingkungan][console-list-env]

  2. Di daftar lingkungan, klik nama lingkungan Anda. Halaman Monitoring akan terbuka.

  3. Di tab Pemantauan, tinjau diagram Total waktu penguraian untuk semua file DAG di bagian DAG berjalan dan identifikasi kemungkinan masalah.

    Bagian DAG berjalan di tab Composer Monitoring menampilkan metrik kondisi untuk DAG di lingkungan Anda

Periksa waktu penguraian DAG dengan tab Cloud Composer Logs:

  1. Di Google Cloud console, buka halaman Environments.

    [Buka Lingkungan][console-list-env]

  2. Di daftar lingkungan, klik nama lingkungan Anda. Halaman Monitoring akan terbuka.

  3. Buka tab Logs, dan dari hierarki navigasi All logs, pilih bagian DAG processor manager.

  4. Tinjau log dag-processor-manager dan identifikasi kemungkinan masalah.

    Log pemroses DAG akan menampilkan waktu penguraian DAG

gcloud

Gunakan perintah dags report untuk melihat waktu penguraian untuk semua DAG Anda.

gcloud composer environments run ENVIRONMENT_NAME \
    --location LOCATION \
    dags report

Ganti:

  • ENVIRONMENT_NAME dengan nama lingkungan.
  • LOCATION dengan region tempat lingkungan berada.

Output perintah terlihat mirip dengan berikut ini:

Executing within the following Kubernetes cluster namespace: composer-2-0-31-airflow-2-3-3
file                  | duration       | dag_num | task_num | dags
======================+================+=========+==========+===================
/manydagsbig.py       | 0:00:00.038334 | 2       | 10       | serial-0,serial-0
/airflow_monitoring.py| 0:00:00.001620 | 1       | 1        | airflow_monitoring

Cari nilai duration untuk setiap dag yang tercantum dalam tabel. Nilai yang besar mungkin menunjukkan bahwa salah satu DAG Anda tidak diterapkan dengan cara yang optimal. Dari tabel output, Anda dapat mengidentifikasi DAG mana yang memiliki waktu penguraian yang lama.

Memecahkan masalah pada waktu penguraian DAG

Bagian berikut menjelaskan gejala dan kemungkinan perbaikan untuk beberapa masalah umum pada waktu penguraian DAG.

Jumlah thread terbatas

Mengizinkan pengelola pemroses DAG hanya menggunakan sejumlah thread terbatas dapat memengaruhi waktu penguraian DAG Anda.

Untuk mengatasi masalah ini, ganti opsi konfigurasi Airflow berikut:

  • Ganti parameter parsing_processes:

    Bagian Kunci Nilai Catatan
    scheduler parsing_processes NUMBER_OF_CPUs_IN_SCHEDULER - 1 Ganti NUMBER_OF_CPUs_IN_SCHEDULER dengan jumlah cpu
    di penjadwal.

Membuat pemroses DAG mengabaikan file yang tidak diperlukan

Anda dapat meningkatkan performa pemroses DAG dengan melewati file yang tidak diperlukan di folder DAG. Pemroses DAG mengabaikan file dan folder yang ditentukan dalam file .airflowignore.

Agar pemroses DAG mengabaikan file yang tidak perlu:

  1. Buat file .airflowignore.
  2. Dalam file ini, cantumkan file dan folder yang harus diabaikan.
  3. Upload file ini ke folder /dags di bucket lingkungan Anda.

Untuk mengetahui informasi selengkapnya tentang format file .airflowignore, lihat dokumentasi Airflow.

Airflow memproses DAG yang dijeda

Pengguna Airflow menjeda DAG untuk menghindari eksekusinya. Hal ini menghemat siklus pemrosesan pekerja Airflow.

Airflow akan terus mengurai DAG yang dijeda. Jika Anda benar-benar ingin meningkatkan performa pemroses DAG, gunakan .airflowignore atau hapus DAG yang dijeda dari folder DAG.

Masalah Umum

Bagian berikut menjelaskan gejala dan kemungkinan perbaikan untuk beberapa masalah penguraian umum.

Waktu tunggu impor pemuatan DAG habis

Gejala:

  • Di antarmuka web Airflow, di bagian atas halaman daftar DAG, kotak peringatan merah menampilkan Broken DAG: [/path/to/dagfile] Timeout.
  • Di Cloud Monitoring: Log airflow-scheduler berisi entri yang mirip dengan:

    • ERROR - Process timed out
    • ERROR - Failed to import: /path/to/dagfile
    • AirflowTaskTimeout: Timeout

Perbaikan:

Ganti opsi konfigurasi Airflow dag_file_processor_timeout dan berikan lebih banyak waktu untuk penguraian DAG:

Bagian Kunci Nilai
core dag_file_processor_timeout Nilai waktu tunggu baru

DAG tidak terlihat di UI Airflow atau UI DAG dan penjadwal tidak menjadwalkannya

Pemroses DAG mengurai setiap DAG sebelum dapat dijadwalkan oleh penjadwal dan sebelum DAG terlihat di UI Airflow atau UI DAG.

Opsi konfigurasi Airflow berikut menentukan waktu tunggu untuk mengurai DAG:

Jika DAG tidak terlihat di UI Airflow atau UI DAG:

  • Periksa log pemroses DAG apakah pemroses DAG dapat memproses DAG Anda dengan benar. Jika terjadi masalah, Anda mungkin melihat entri log berikut di log penjadwal atau pemroses DAG:

    [2020-12-03 03:06:45,672] {dag_processing.py:1334} ERROR - Processor for
    /usr/local/airflow/dags/example_dag.py with PID 21903 started at
    2020-12-03T03:05:55.442709+00:00 has timed out, killing it.
    
  • Periksa log penjadwal untuk melihat apakah penjadwal berfungsi dengan benar. Jika terjadi masalah, Anda mungkin melihat entri log berikut di log penjadwal:

    DagFileProcessorManager (PID=732) last sent a heartbeat 240.09 seconds ago! Restarting it
    Process timed out, PID: 68496
    

Solusi:

  • Perbaiki semua error penguraian DAG. Prosesor DAG menguraikan beberapa DAG, dan dalam kasus yang jarang terjadi, error penguraian satu DAG dapat berdampak negatif pada penguraian DAG lainnya.

  • Jika penguraian DAG Anda memerlukan waktu lebih dari jumlah detik yang ditentukan dalam [core]dagbag_import_timeout, tingkatkan waktu tunggu ini.

  • Jika penguraian semua DAG Anda memerlukan waktu lebih dari jumlah detik yang ditentukan dalam [core]dag_file_processor_timeout, tingkatkan waktu tunggu ini.

  • Jika DAG Anda memerlukan waktu lama untuk diuraikan, hal ini juga dapat berarti bahwa DAG tidak diterapkan dengan cara yang optimal. Misalnya, jika membaca banyak variabel lingkungan, atau melakukan panggilan ke layanan eksternal atau database Airflow. Sebisa mungkin, hindari melakukan operasi tersebut di bagian global DAG.

  • Tingkatkan resource CPU dan memori untuk Penjadwal agar dapat bekerja lebih cepat.

  • Sesuaikan jumlah penjadwal.

  • Meningkatkan jumlah proses pemroses DAG sehingga penguraian dapat dilakukan lebih cepat. Anda dapat melakukannya dengan meningkatkan nilai [scheduler]parsing_process.

  • Menurunkan frekuensi penguraian DAG.

  • Menurunkan beban pada database Airflow.

Langkah berikutnya