Pantau kondisi dan performa lingkungan dengan metrik utama di dasbor Monitoring

Cloud Composer 1 | Cloud Composer 2

Halaman ini menjelaskan cara memantau kondisi dan performa lingkungan Cloud Composer secara keseluruhan dengan metrik utama di dasbor Monitoring.

Pengantar

Tutorial ini berfokus pada metrik pemantauan utama Cloud Composer yang dapat memberikan ringkasan bagus terkait kondisi dan performa tingkat lingkungan.

Cloud Composer menawarkan beberapa metrik yang menggambarkan status lingkungan secara keseluruhan. Pedoman pemantauan dalam tutorial ini didasarkan pada metrik yang ditampilkan di dasbor Monitoring pada lingkungan Cloud Composer Anda.

Dalam tutorial ini, Anda akan mempelajari metrik utama yang berfungsi sebagai indikator utama masalah terkait performa dan kondisi lingkungan Anda, serta panduan untuk menafsirkan setiap metrik menjadi tindakan korektif agar lingkungan tetap sehat. Anda juga akan menyiapkan aturan pemberitahuan untuk setiap metrik, menjalankan contoh DAG, dan menggunakan metrik serta pemberitahuan ini untuk mengoptimalkan performa lingkungan Anda.

Tujuan

Biaya

Tutorial ini menggunakan komponen Google Cloud yang dapat ditagih berikut:

Setelah menyelesaikan tutorial ini, Anda dapat menghindari penagihan berkelanjutan dengan menghapus resource yang Anda buat. Untuk mengetahui detail selengkapnya, lihat Membersihkan.

Sebelum memulai

Bagian ini menjelaskan tindakan yang diperlukan sebelum Anda memulai tutorial.

Membuat dan mengonfigurasi project

Untuk tutorial ini, Anda memerlukan project Google Cloud. Konfigurasikan project dengan cara berikut:

  1. Di Konsol Google Cloud, pilih atau buat project:

    Buka Project Selector

  2. Pastikan penagihan diaktifkan untuk project Anda. Pelajari cara memeriksa apakah penagihan diaktifkan di sebuah project.

  3. Pastikan pengguna project Google Cloud Anda memiliki peran berikut untuk membuat resource yang diperlukan:

    • Environment and Storage Object Administrator (roles/composer.environmentAndStorageObjectAdmin)
    • Compute Admin (roles/compute.admin)
    • Monitoring Editor (roles/monitoring.editor)

Mengaktifkan API untuk project Anda

Enable the Cloud Composer API.

Enable the API

Membuat lingkungan Cloud Composer

Membuat lingkungan Cloud Composer 2.

Sebagai bagian dari prosedur ini, Anda memberikan peran Ekstensi Agen Layanan Cloud Composer v2 API (roles/composer.ServiceAgentV2Ext) ke akun Agen Layanan Composer. Cloud Composer menggunakan akun ini untuk menjalankan operasi di project Google Cloud Anda.

Mempelajari metrik utama untuk kesehatan dan performa tingkat lingkungan

Tutorial ini berfokus pada metrik utama yang dapat memberikan gambaran bagus tentang kondisi dan performa lingkungan secara menyeluruh.

Dasbor Monitoring di Google Cloud Console berisi berbagai metrik dan diagram yang memungkinkan pemantauan tren di lingkungan Anda dan mengidentifikasi masalah pada komponen Airflow dan resource Cloud Composer.

Setiap lingkungan Cloud Composer memiliki dasbor Monitoring-nya sendiri.

Pahami metrik utama di bawah dan temukan setiap metrik di dasbor Monitoring:

  1. Di konsol Google Cloud, buka halaman Environments.

    Buka Lingkungan

  2. Pada daftar lingkungan, klik nama lingkungan Anda. Halaman Detail lingkungan akan terbuka.

  3. Buka tab Pemantauan.

  4. Pilih bagian Overview, temukan item Environment Overview di dasbor, dan amati metrik Environment health (Airflow monitoring DAG).

    • Linimasa ini menunjukkan kondisi lingkungan Cloud Composer. Warna hijau pada panel kesehatan lingkungan menunjukkan bahwa lingkungan tersebut sehat, sedangkan status lingkungan tidak sehat ditunjukkan dengan warna merah.

    • Setiap beberapa menit, Cloud Composer mengeksekusi DAG keaktifan bernama airflow_monitoring. Jika proses DAG keaktifan berhasil diselesaikan, status kesehatannya adalah True. Jika DAG keaktifan dijalankan gagal (misalnya, karena penghapusan Pod, penghentian proses eksternal, atau pemeliharaan), status kondisinya adalah False.

  5. Pilih bagian SQL database, cari item Database health di dasbor, dan amati metrik Database health.

    • Linimasa ini menunjukkan status koneksi ke instance Cloud SQL lingkungan Anda. Status kesehatan Database yang berwarna hijau menunjukkan konektivitas, sedangkan kegagalan untuk terhubung ditunjukkan dengan warna merah.

    • Pod pemantauan Airflow akan melakukan ping ke database secara berkala dan melaporkan status respons sebagai True jika koneksi dapat dibuat, atau sebagai False jika tidak.

  6. Di item Database health, amati metrik Database CPU usage dan Database memory usage.

    • Grafik penggunaan CPU Database menunjukkan penggunaan inti CPU oleh instance database Cloud SQL lingkungan Anda dibandingkan dengan total batas CPU database yang tersedia.

    • Grafik penggunaan memori Database menunjukkan penggunaan memori oleh instance database Cloud SQL di lingkungan Anda dibandingkan dengan total batas memori database yang tersedia.

  7. Pilih bagian Penjadwal, cari item Denyut jantung Penjadwal di dasbor, dan amati metrik Detak jantung Penjadwal.

    • Linimasa ini menunjukkan kondisi penjadwal Airflow. Periksa area merah untuk mengidentifikasi masalah penjadwal Airflow. Jika lingkungan Anda memiliki lebih dari satu penjadwal, status detak jantung akan sehat selama setidaknya salah satu penjadwal merespons.

    • Penjadwal dianggap tidak responsif jika detak jantung terakhir diterima lebih dari 30 detik (nilai default) sebelum waktu saat ini.

  8. Pilih bagian DAG statistics, cari item Zombie tasks completed di dasbor, dan amati metrik Zombie tasks death.

    • Grafik ini menunjukkan jumlah tugas zombie yang dihentikan dalam jangka waktu singkat. Tugas zombie sering disebabkan oleh penghentian eksternal proses Airflow (seperti saat proses tugas dihentikan).

    • Penjadwal Airflow menghentikan tugas zombie secara berkala, yang tercermin dalam diagram ini.

  9. Pilih bagian Pekerja, cari item Mulai ulang penampung pekerja di dasbor, dan amati metrik Mulai ulang penampung pekerja.

    • Grafik menunjukkan jumlah total mulai ulang untuk setiap penampung pekerja. Terlalu sering memulai ulang container dapat memengaruhi ketersediaan layanan Anda atau downstream layanan lain yang menggunakannya sebagai dependensi.

Pelajari tolok ukur dan kemungkinan tindakan korektif untuk metrik utama

Daftar berikut menjelaskan nilai benchmark yang dapat menunjukkan masalah dan memberikan tindakan korektif yang dapat Anda lakukan untuk mengatasi masalah ini.

  • Kesehatan lingkungan (DAG pemantauan aliran udara)

    • Rasio keberhasilan kurang dari 90% selama periode 4 jam

    • Kegagalan dapat berarti penggusuran Pod atau penghentian pekerja karena lingkungan kelebihan beban atau tidak berfungsi. Area merah di linimasa kesehatan lingkungan biasanya berkorelasi dengan area merah di batang kesehatan lainnya dari masing-masing komponen lingkungan. Identifikasi akar masalah dengan meninjau metrik lain di dasbor Monitoring.

  • Kesehatan database

    • Rasio keberhasilan kurang dari 95% selama periode 4 jam

    • Kegagalan berarti ada masalah dengan konektivitas ke database Airflow, yang dapat disebabkan oleh error atau periode nonaktif database karena database kelebihan beban (misalnya, karena penggunaan CPU atau memori yang tinggi atau latensi yang lebih tinggi saat terhubung ke database). Gejala ini paling sering disebabkan oleh DAG yang kurang optimal, seperti saat DAG menggunakan banyak Airflow atau variabel lingkungan yang ditentukan secara global. Identifikasi akar penyebabnya dengan meninjau metrik penggunaan resource database SQL. Anda juga dapat memeriksa log penjadwal untuk menemukan error terkait konektivitas database.

  • Penggunaan CPU dan memori database

    • Rata-rata penggunaan CPU atau memori lebih dari 80% dalam periode 12 jam

    • Database mungkin kelebihan beban. Lakukan analisis korelasi antara eksekusi DAG dan lonjakan penggunaan memori atau CPU database.

  • Heartbeat scheduler

    • Rasio keberhasilan kurang dari 90% selama periode 4 jam

    • Tetapkan lebih banyak resource ke penjadwal atau tingkatkan jumlah penjadwal dari 1 menjadi 2 (direkomendasikan).

  • Tugas zombie dihentikan

    • Lebih dari satu tugas zombie per 24 jam

    • Alasan paling umum untuk tugas zombie adalah kekurangan resource CPU atau memori di cluster lingkungan Anda. Tinjau grafik penggunaan resource pekerja dan tetapkan lebih banyak resource untuk pekerja, atau perbesar waktu tunggu tugas zombie sehingga penjadwal menunggu lebih lama sebelum menganggap tugas sebagai zombie.

  • Penampung pekerja dimulai ulang

    • Lebih dari satu kali mulai ulang per 24 jam

    • Alasan paling umum adalah kurangnya memori atau penyimpanan pekerja. Perhatikan konsumsi resource pekerja dan alokasikan lebih banyak memori atau penyimpanan untuk pekerja Anda. Jika kurangnya resource bukan menjadi penyebabnya, lihat memecahkan masalah insiden mulai ulang pekerja dan gunakan Kueri logging untuk menemukan alasan pekerja memulai ulang.

Membuat saluran notifikasi

Ikuti petunjuk yang diuraikan dalam Membuat saluran notifikasi untuk membuat saluran notifikasi email.

Untuk informasi lebih lanjut tentang saluran notifikasi, lihat Mengelola saluran notifikasi.

Membuat kebijakan pemberitahuan

Buat kebijakan pemberitahuan berdasarkan tolok ukur yang diberikan di bagian sebelumnya dalam tutorial ini untuk terus memantau nilai metrik dan menerima notifikasi saat metrik tersebut melanggar kondisi.

Konsol

Anda dapat menyiapkan pemberitahuan untuk setiap metrik yang ditampilkan di dasbor Monitoring dengan mengklik ikon lonceng di pojok item yang sesuai:

Buat pemberitahuan untuk metrik yang ditampilkan di dasbor pemantauan
Gambar 1. Buat pemberitahuan untuk metrik yang ditampilkan di dasbor pemantauan (klik untuk memperbesar)
  1. Temukan setiap metrik yang ingin Anda pantau di dasbor Monitoring dan klik ikon lonceng di pojok item metrik. Halaman Buat kebijakan pemberitahuan akan terbuka.

  2. Di bagian Mentransformasi data:

    1. Konfigurasikan bagian Dalam setiap deret waktu seperti yang dijelaskan dalam konfigurasi kebijakan pemberitahuan untuk metrik.

    2. Klik Next, lalu konfigurasikan bagian Configure alert trigger seperti yang dijelaskan dalam konfigurasi kebijakan pemberitahuan untuk metrik.

  3. Klik Next.

  4. Konfigurasikan notifikasi. Luaskan menu Notification channels dan pilih saluran notifikasi yang Anda buat di langkah sebelumnya.

  5. Klik OK.

  6. Di bagian Name the alert policy, isi kolom Alert policy name. Gunakan nama deskriptif untuk setiap metrik. Gunakan nilai "Beri nama kebijakan pemberitahuan" seperti yang dijelaskan dalam konfigurasi kebijakan pemberitahuan untuk metrik.

  7. Klik Next.

  8. Tinjau kebijakan pemberitahuan, lalu klik Create policy.

Metrik kesehatan lingkungan (Airflow Monitoring DAG) - konfigurasi kebijakan pemberitahuan

  • Nama metrik: Lingkungan Cloud Composer - Responsif
  • API: composer.googleapis.com/environment/healthy
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformasi data > Dalam setiap deret waktu:

    • Jendela bergulir: Kustom
    • Nilai kustom: 4
    • Unit khusus: jam
    • Fungsi jendela bergulir: pecahan benar
  • Konfigurasikan pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu notifikasi: Deret waktu mana saja melanggar
    • Posisi ambang batas: Di bawah ambang batas
    • Nilai minimum: 90
    • Nama kondisi: Kondisi kesehatan lingkungan
  • Mengonfigurasi notifikasi dan menyelesaikan pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Environment Health

Metrik kesehatan database - konfigurasi kebijakan pemberitahuan

  • Nama metrik: Lingkungan Cloud Composer - Kesiapan Database
  • API: composer.googleapis.com/environment/database_health
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformasi data > Dalam setiap deret waktu:

    • Jendela bergulir: Kustom
    • Nilai kustom: 4
    • Unit khusus: jam
    • Fungsi jendela bergulir: pecahan benar
  • Konfigurasikan pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu notifikasi: Deret waktu mana saja melanggar
    • Posisi ambang batas: Di bawah ambang batas
    • Nilai minimum: 95
    • Nama kondisi: Kondisi kondisi database
  • Mengonfigurasi notifikasi dan menyelesaikan pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Kondisi Database Airflow

Metrik penggunaan CPU database - konfigurasi kebijakan pemberitahuan

.
  • Nama metrik: Lingkungan Cloud Composer - Penggunaan CPU Database
  • API: composer.googleapis.com/environment/database/cpu/utilization
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformasi data > Dalam setiap deret waktu:

    • Jendela bergulir: Kustom
    • Nilai kustom: 12
    • Unit khusus: jam
    • Fungsi Rolling window: rata-rata
  • Konfigurasikan pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu notifikasi: Deret waktu mana saja melanggar
    • Posisi ambang batas: Di atas ambang batas
    • Nilai minimum: 80
    • Nama kondisi: Kondisi penggunaan CPU database
  • Mengonfigurasi notifikasi dan menyelesaikan pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Penggunaan CPU Database Airflow

Metrik penggunaan CPU database - konfigurasi kebijakan pemberitahuan

.
  • Nama metrik: Lingkungan Cloud Composer - Penggunaan Memori Database
  • API: composer.googleapis.com/environment/database/memory/utilization
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformasi data > Dalam setiap deret waktu:

    • Jendela bergulir: Kustom
    • Nilai kustom: 12
    • Unit khusus: jam
    • Fungsi Rolling window: rata-rata
  • Konfigurasikan pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu notifikasi: Deret waktu mana saja melanggar
    • Posisi ambang batas: Di atas ambang batas
    • Nilai minimum: 80
    • Nama kondisi: Kondisi penggunaan memori database
  • Mengonfigurasi notifikasi dan menyelesaikan pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Database Memory Usage

Metrik heartbeat penjadwal - konfigurasi kebijakan pemberitahuan

  • Nama metrik: Lingkungan Cloud Composer - Heartbeat Penjadwal
  • API: composer.googleapis.com/environment/scheduler_heartbeat_count
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformasi data > Dalam setiap deret waktu:

    • Jendela bergulir: Kustom
    • Nilai kustom: 4
    • Unit khusus: jam
    • Fungsi jendela bergulir: menghitung
  • Konfigurasikan pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu notifikasi: Deret waktu mana saja melanggar
    • Posisi ambang batas: Di bawah ambang batas
    • Nilai minimum: 216

      1. Anda dapat memperoleh angka ini dengan menjalankan kueri yang menggabungkan nilai _scheduler_heartbeat_count_mean di Editor Kueri Metrics Explorer.
    • Nama kondisi: Kondisi detak jantung penjadwal

  • Mengonfigurasi notifikasi dan menyelesaikan pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Scheduler Heartbeat

Metrik penghentian tugas zombie - konfigurasi kebijakan pemberitahuan

  • Nama metrik: Lingkungan Cloud Composer - Zombie Tasks Dihentikan
  • API: composer.googleapis.com/environment/zombie_task_killed_count
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformasi data > Dalam setiap deret waktu:

    • Periode bergulir: 1 hari
    • Fungsi Rolling window: jumlah
  • Konfigurasikan pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu notifikasi: Deret waktu mana saja melanggar
    • Posisi ambang batas: Di atas ambang batas
    • Nilai minimum: 1
    • Nama kondisi: Kondisi tugas Zombie
  • Mengonfigurasi notifikasi dan menyelesaikan pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Zombie Tasks

Penampung pekerja memulai ulang metrik - konfigurasi kebijakan pemberitahuan

  • Nama metrik: Lingkungan Cloud Composer - Zombie Tasks Dihentikan
  • API: composer.googleapis.com/environment/zombie_task_killed_count
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    
  • Transformasi data > Dalam setiap deret waktu:

    • Periode bergulir: 1 hari
    • Fungsi Rolling window: jumlah
  • Konfigurasikan pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu notifikasi: Deret waktu mana saja melanggar
    • Posisi ambang batas: Di atas ambang batas
    • Nilai minimum: 1
    • Nama kondisi: Kondisi tugas Zombie
  • Mengonfigurasi notifikasi dan menyelesaikan pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Zombie Tasks

Terraform

Jalankan skrip Terraform yang membuat saluran notifikasi email dan mengupload kebijakan pemberitahuan untuk metrik utama yang diberikan dalam tutorial ini berdasarkan benchmark masing-masing:

  1. Simpan contoh file Terraform di komputer lokal Anda.
  2. Ganti kode berikut:

    • PROJECT_ID: Project ID project Anda. Misalnya, example-project.
    • EMAIL_ADDRESS: alamat email yang harus diberi tahu jika pemberitahuan dipicu.
    • ENVIRONMENT_NAME: nama lingkungan Cloud Composer Anda. Contoh, example-composer-environment.
    • CLUSTER_NAME: nama cluster lingkungan Anda yang dapat ditemukan di bagian Konfigurasi Lingkungan > Resource > cluster GKE di Konsol Google Cloud.
resource "google_monitoring_notification_channel" "basic" {
  project      = "PROJECT_ID"
  display_name = "Test Notification Channel"
  type         = "email"
  labels = {
    email_address = "EMAIL_ADDRESS"
  }
  # force_delete = false
}

resource "google_monitoring_alert_policy" "environment_health_metric" {
  project      = "PROJECT_ID"
  display_name = "Airflow Environment Health"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Environment health condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/healthy\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_LT"
      threshold_value = 0.9
      aggregations {
        alignment_period   = "14400s"
        per_series_aligner = "ALIGN_FRACTION_TRUE"
      }
    }
  }

}

resource "google_monitoring_alert_policy" "database_health_metric" {
  project      = "PROJECT_ID"
  display_name = "Airflow Database Health"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Database health condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database_health\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_LT"
      threshold_value = 0.95
      aggregations {
        alignment_period   = "14400s"
        per_series_aligner = "ALIGN_FRACTION_TRUE"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_database_cpu_usage" {
  project      = "PROJECT_ID"
  display_name = "Airflow Database CPU Usage"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Database CPU usage condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/cpu/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 80
      aggregations {
        alignment_period   = "43200s"
        per_series_aligner = "ALIGN_MEAN"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_database_memory_usage" {
  project      = "PROJECT_ID"
  display_name = "Airflow Database Memory Usage"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Database memory usage condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/database/memory/utilization\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 80
      aggregations {
        alignment_period   = "43200s"
        per_series_aligner = "ALIGN_MEAN"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_scheduler_heartbeat" {
  project      = "PROJECT_ID"
  display_name = "Airflow Scheduler Heartbeat"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Scheduler heartbeat condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/scheduler_heartbeat_count\" AND resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_LT"
      threshold_value = 216 // Threshold is 90% of the average for composer.googleapis.com/environment/scheduler_heartbeat_count metric in an idle environment
      aggregations {
        alignment_period   = "14400s"
        per_series_aligner = "ALIGN_COUNT"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_zombie_task" {
  project      = "PROJECT_ID"
  display_name = "Airflow Zombie Tasks"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Zombie tasks condition"
    condition_threshold {
      filter     = "resource.type = \"cloud_composer_environment\" AND metric.type=\"composer.googleapis.com/environment/zombie_task_killed_count\" AND  resource.label.environment_name=\"ENVIRONMENT_NAME\""
      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 1
      aggregations {
        alignment_period   = "86400s"
        per_series_aligner = "ALIGN_SUM"
      }
    }
  }
}

resource "google_monitoring_alert_policy" "alert_worker_restarts" {
  project      = "PROJECT_ID"
  display_name = "Airflow Worker Restarts"
  combiner     = "OR"
  notification_channels = [google_monitoring_notification_channel.basic.name] // To manually add a notification channel add it with the syntax "projects/[PROJECT_ID]/notificationChannels/[CHANNEL_ID]"
  conditions {
    display_name = "Worker container restarts condition"
    condition_threshold {
      filter     = "resource.type = \"k8s_container\" AND (resource.labels.cluster_name = \"CLUSTER_NAME\" AND resource.labels.container_name = monitoring.regex.full_match(\"airflow-worker|base\") AND resource.labels.pod_name = monitoring.regex.full_match(\"airflow-worker-.*|airflow-k8s-worker-.*\")) AND metric.type = \"kubernetes.io/container/restart_count\""

      duration   = "60s"
      comparison = "COMPARISON_GT"
      threshold_value = 1
      aggregations {
        alignment_period   = "86400s"
        per_series_aligner = "ALIGN_RATE"
      }
    }
  }
}

Menguji kebijakan pemberitahuan

Bagian ini menjelaskan cara menguji kebijakan pemberitahuan yang dibuat dan menafsirkan hasilnya.

Upload sampel DAG

Contoh memory_consumption_dag.py DAG yang disediakan dalam tutorial ini meniru penggunaan memori pekerja secara intensif. DAG berisi 4 tugas, dan setiap tugas menulis data ke string sampel, yang menghabiskan memori 380 MB. DAG sampel dijadwalkan untuk berjalan setiap 2 menit dan akan mulai berjalan secara otomatis setelah Anda menguploadnya ke lingkungan Composer.

Upload contoh DAG berikut ke lingkungan yang Anda buat pada langkah sebelumnya:

from datetime import datetime
import sys
import time

from airflow import DAG
from airflow.operators.python import PythonOperator

def ram_function():
    data = ""
    start = time.time()
    for i in range(38):
        data += "a" * 10 * 1000**2
        time.sleep(0.2)
        print(f"{i}, {round(time.time() - start, 4)}, {sys.getsizeof(data) / (1000 ** 3)}")
    print(f"Size={sys.getsizeof(data) / (1000 ** 3)}GB")
    time.sleep(30 - (time.time() - start))
    print(f"Complete in {round(time.time() - start, 2)} seconds!")

with DAG(
    dag_id="memory_consumption_dag",
    start_date=datetime(2023, 1, 1, 1, 1, 1),
    schedule="1/2 * * * *",
    catchup=False,
) as dag:
    for i in range(4):
        PythonOperator(
            task_id=f"task_{i+1}",
            python_callable=ram_function,
            retries=0,
            dag=dag,
        )

Menafsirkan pemberitahuan dan metrik di Monitoring

Tunggu sekitar 10 menit setelah DAG sampel mulai berjalan dan mengevaluasi hasil pengujian:

  1. Periksa kotak surat email Anda untuk memastikan bahwa Anda menerima notifikasi dari Pemberitahuan Google Cloud dengan baris subjek yang diawali dengan [ALERT]. Konten pesan ini berisi detail insiden kebijakan pemberitahuan.

  2. Klik tombol Lihat Insiden di notifikasi email. Anda akan dialihkan ke Metrics Explorer. Tinjau detail insiden pemberitahuan:

    Detail insiden pemberitahuan
    Gambar 2. Detail insiden pemberitahuan (klik untuk memperbesar)

    Grafik metrik insiden menunjukkan bahwa metrik yang Anda buat melampaui batas 1, yang berarti Airflow mendeteksi dan menghentikan lebih dari 1 tugas zombie.

  3. Di lingkungan Cloud Composer, buka tab Monitoring, buka bagian DAG statistics, dan cari grafik Zombie tasks completed:

    Grafik tugas zombie
    Gambar 3. Grafik tugas zombie (klik untuk memperbesar)

    Grafik ini menunjukkan bahwa Airflow menghentikan sekitar 20 tugas zombie hanya dalam 10 menit pertama setelah menjalankan contoh DAG.

  4. Menurut benchmark dan tindakan korektif, alasan paling umum untuk tugas zombie adalah kurangnya memori pekerja atau CPU. Identifikasi akar penyebab tugas zombie dengan menganalisis penggunaan resource pekerja.

    Buka bagian Pekerja di dasbor Monitoring dan tinjau metrik penggunaan memori dan CPU pekerja:

    Metrik penggunaan memori dan CPU pekerja
    Gambar 4.Metrik penggunaan memori dan CPU pekerja (klik untuk memperbesar)

    Grafik Penggunaan CPU total pekerja menunjukkan bahwa penggunaan CPU pekerja selalu di bawah 50% dari total batas yang tersedia, sehingga CPU yang tersedia sudah memadai. Grafik penggunaan memori Total pekerja menunjukkan bahwa menjalankan DAG contoh mengakibatkan tercapainya batas memori yang dapat dialokasikan yang sama dengan hampir 75% dari total batas memori yang ditampilkan pada grafik (GKE mencadangkan 25% dari 4 GiB memori pertama dan 100 MiB memori tambahan pada setiap node untuk menangani penghapusan Pod).

    Anda dapat menyimpulkan bahwa pekerja tidak memiliki resource memori agar berhasil menjalankan contoh DAG.

Mengoptimalkan lingkungan Anda dan mengevaluasi performanya

Berdasarkan analisis penggunaan resource pekerja, Anda perlu mengalokasikan lebih banyak memori ke pekerja agar semua tugas di DAG berhasil.

  1. Di lingkungan Composer, buka tab DAG, klik nama contoh DAG (memory_consumption_dag), lalu klik Pause DAG.

  2. Alokasikan memori pekerja tambahan:

    1. Di tab Environment configuration, temukan konfigurasi Resources > Workloads, lalu klik Edit.

    2. Di item Worker, tingkatkan batas Memory. Dalam tutorial ini, gunakan 3,25 GB.

    3. Simpan perubahan dan tunggu beberapa menit hingga pekerja memulai ulang.

  3. Buka tab DAG, klik nama contoh DAG (memory_consumption_dag), lalu klik Lanjutkan DAG.

Buka Monitoring dan pastikan tidak ada tugas zombie baru yang muncul setelah Anda memperbarui batas resource pekerja:

Grafik tugas zombie setelah batas memori diubah
Gambar 5. Grafik tugas zombie setelah batas memori diubah (klik untuk memperbesar)

Ringkasan

Dalam tutorial ini, Anda telah mempelajari metrik kondisi dan performa tingkat lingkungan utama, cara menyiapkan kebijakan pemberitahuan untuk setiap metrik, dan cara menafsirkan setiap metrik menjadi tindakan korektif. Anda kemudian menjalankan sampel DAG, mengidentifikasi penyebab utama masalah kesehatan lingkungan dengan bantuan pemberitahuan dan diagram Monitoring, serta mengoptimalkan lingkungan dengan mengalokasikan lebih banyak memori untuk pekerja Anda. Namun, sebaiknya optimalkan DAG untuk mengurangi konsumsi resource pekerja sejak awal, karena tidak dapat meningkatkan resource di luar batas tertentu.

Pembersihan

Agar tidak menimbulkan biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource atau simpan project dan hapus resource satu per satu.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus resource satu per satu

Jika Anda berencana mempelajari beberapa tutorial dan panduan memulai, menggunakan kembali project dapat membantu Anda agar tidak melampaui batas kuota project.

Konsol

  1. Menghapus lingkungan Cloud Composer. Anda juga menghapus bucket lingkungan selama prosedur ini.
  2. Hapus setiap kebijakan pemberitahuan yang Anda buat di Cloud Monitoring.

Terraform

  1. Pastikan skrip Terraform Anda tidak berisi entri untuk resource yang masih diperlukan oleh project Anda. Misalnya, Anda dapat tetap mengaktifkan beberapa API dan izin IAM tetap ditetapkan (jika Anda menambahkan definisi tersebut ke skrip Terraform).
  2. Jalankan terraform destroy.
  3. Menghapus bucket lingkungan secara manual. Cloud Composer tidak menghapusnya secara otomatis. Anda dapat melakukannya dari Konsol Google Cloud atau Google Cloud CLI.

Langkah selanjutnya