Memantau kesehatan dan performa lingkungan dengan metrik utama

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

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

Pengantar

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

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

Dalam tutorial ini, Anda akan mempelajari metrik utama yang berfungsi sebagai indikator utama masalah pada performa dan kesehatan lingkungan Anda, serta panduan untuk menafsirkan setiap metrik ke dalam tindakan korektif untuk menjaga kesehatan lingkungan. 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: Google Cloud

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

Sebelum memulai

Bagian ini menjelaskan tindakan yang diperlukan sebelum Anda memulai tutorial.

Membuat dan mengonfigurasi project

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

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

    Buka Pemilih Project

  2. Pastikan penagihan diaktifkan untuk project Anda. Pelajari cara memeriksa apakah penagihan telah diaktifkan pada suatu project.

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

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

Aktifkan API untuk project Anda

Enable the Cloud Composer API.

Enable the API

Buat lingkungan Cloud Composer Anda

Buat 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 melakukan operasi di project Google Cloud Anda.

Mempelajari metrik utama untuk kesehatan dan performa tingkat lingkungan

Tutorial ini berfokus pada metrik utama yang dapat memberi Anda ringkasan yang baik tentang kondisi dan performa keseluruhan lingkungan Anda.

Dasbor pemantauan di konsol Google Cloud 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 Pemantauan:

  1. Di konsol Google Cloud , buka halaman Environments.

    Buka Lingkungan

  2. Dalam daftar lingkungan, klik nama lingkungan Anda. Halaman Environment details akan terbuka.

  3. Buka tab Monitoring.

  4. Pilih bagian Ringkasan, temukan item Ringkasan Lingkungan di dasbor, dan amati metrik Kondisi lingkungan (DAG pemantauan Airflow).

    • Linimasa ini menunjukkan kondisi lingkungan Cloud Composer. Warna hijau pada status respons lingkungan menunjukkan bahwa lingkungan dalam kondisi baik, sedangkan status lingkungan yang tidak baik ditunjukkan dengan warna merah.

    • Setiap beberapa menit, Cloud Composer menjalankan DAG keaktifan yang bernama airflow_monitoring. Jika operasi DAG liveness berhasil diselesaikan, status kesehatan adalah True. Jika eksekusi DAG keaktifan gagal (misalnya, karena penghentian Pod, penghentian proses eksternal, atau pemeliharaan), status kesehatan adalah False.

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

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

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

  6. Di item Kondisi database, amati metrik Penggunaan CPU database dan Penggunaan memori database.

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

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

  7. Pilih bagian Schedulers, temukan item Scheduler heartbeat di dasbor, dan amati metrik Scheduler heartbeat.

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

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

  8. Pilih bagian Statistik DAG, temukan item Tugas zombie dihentikan di dasbor, dan amati metrik Tugas zombie dihentikan.

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

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

  9. Pilih bagian Pekerja, temukan 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 banyak memulai ulang penampung dapat memengaruhi ketersediaan layanan Anda atau layanan hilir lainnya yang menggunakannya sebagai dependensi.

Pelajari tolok ukur dan kemungkinan tindakan korektif untuk metrik utama

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

  • Kesehatan lingkungan (DAG pemantauan Airflow)

    • Rasio keberhasilan kurang dari 90% selama jangka waktu 4 jam

    • Kegagalan dapat berarti pengusiran Pod atau penghentian pekerja karena lingkungan kelebihan beban atau tidak berfungsi. Area merah pada linimasa kesehatan lingkungan biasanya berkorelasi dengan area merah pada diagram kesehatan lainnya dari komponen lingkungan individual. Identifikasi akar penyebabnya dengan meninjau metrik lain di dasbor Monitoring.

  • Kesehatan database

    • Rasio keberhasilan kurang dari 95% selama jangka waktu 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 tidak optimal, seperti saat DAG menggunakan banyak variabel lingkungan atau Airflow yang ditentukan secara global. Identifikasi penyebab utama dengan meninjau metrik penggunaan resource database SQL. Anda juga dapat memeriksa log penjadwal untuk mengetahui error terkait konektivitas database.

  • Penggunaan CPU dan memori database

    • Lebih dari 80% dalam penggunaan CPU atau memori rata-rata dalam jangka waktu 12 jam

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

  • Heartbeat scheduler

    • Rasio keberhasilan kurang dari 90% selama jangka waktu 4 jam

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

  • Tugas zombie dihentikan

    • Lebih dari satu tugas zombi per 24 jam

    • Alasan paling umum terjadinya tugas zombie adalah kurangnya resource CPU atau memori di cluster lingkungan Anda. Tinjau grafik penggunaan resource worker dan tetapkan lebih banyak resource ke worker Anda, atau tingkatkan waktu tunggu tugas zombie agar penjadwal menunggu lebih lama sebelum menganggap tugas sebagai zombie.

  • Mulai ulang container pekerja

    • Lebih dari satu kali memulai ulang dalam 24 jam

    • Alasan paling umum adalah kurangnya memori atau penyimpanan pekerja. Periksa konsumsi resource pekerja dan alokasikan lebih banyak memori atau penyimpanan untuk pekerja Anda. Jika kurangnya resource bukan penyebabnya, pelajari pemecahan masalah insiden mulai ulang pekerja dan gunakan Kueri logging untuk mengetahui alasan pekerja dimulai ulang.

Membuat saluran notifikasi

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

Untuk mengetahui informasi selengkapnya 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 ketentuan.

Konsol

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

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

  2. Di bagian Transform data:

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

    2. Klik Berikutnya, lalu konfigurasi bagian Konfigurasi pemicu pemberitahuan seperti yang dijelaskan dalam konfigurasi kebijakan pemberitahuan untuk metrik.

  3. Klik Berikutnya.

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

  5. Klik Oke.

  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 Berikutnya.

  8. Tinjau kebijakan pemberitahuan, lalu klik Buat kebijakan.

Metrik kondisi lingkungan (DAG pemantauan Airflow) - konfigurasi kebijakan pemberitahuan

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

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

    • Periode berjalan: Kustom
    • Nilai kustom: 4
    • Unit kustom: jam
    • Fungsi periode berkelanjutan: fraksi benar
  • Konfigurasi pemicu pemberitahuan:

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

    • Beri nama kebijakan pemberitahuan: Airflow Environment Health

Metrik kesehatan database - konfigurasi kebijakan pemberitahuan

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

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

    • Periode berjalan: Kustom
    • Nilai kustom: 4
    • Unit kustom: jam
    • Fungsi periode berkelanjutan: fraksi benar
  • Konfigurasi pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu pemberitahuan: Deret waktu mana saja melanggar
    • Posisi nilai minimum: Di bawah nilai minimum
    • Nilai minimum: 95
    • Nama kondisi: Kondisi kesehatan database
  • Mengonfigurasi notifikasi dan memfinalisasi pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Database Health

Metrik penggunaan CPU database - konfigurasi kebijakan pemberitahuan

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

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

    • Periode berjalan: Kustom
    • Nilai kustom: 12
    • Unit kustom: jam
    • Fungsi jendela bergulir: rata-rata
  • Konfigurasi pemicu pemberitahuan:

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

    • Beri nama kebijakan pemberitahuan: Penggunaan CPU Database Airflow

Metrik penggunaan memori database - konfigurasi kebijakan pemberitahuan

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

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

    • Periode berjalan: Kustom
    • Nilai kustom: 12
    • Unit kustom: jam
    • Fungsi jendela bergulir: rata-rata
  • Konfigurasi pemicu pemberitahuan:

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

    • Beri nama kebijakan pemberitahuan: Penggunaan Memori Database Airflow

Metrik heartbeat scheduler - konfigurasi kebijakan pemberitahuan

  • Nama metrik: Lingkungan Cloud Composer - Detak Jantung Scheduler
  • API: composer.googleapis.com/environment/scheduler_heartbeat_count
  • Filter:

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

    • Periode berjalan: Kustom
    • Nilai kustom: 4
    • Unit kustom: jam
    • Fungsi jendela geser: count
  • Konfigurasi pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu pemberitahuan: Deret waktu mana saja melanggar
    • Posisi nilai minimum: Di bawah nilai minimum
    • Nilai minimum: 216

      1. Anda bisa mendapatkan angka ini dengan menjalankan kueri yang menggabungkan nilai _scheduler_heartbeat_count_mean di Editor Kueri Metrics Explorer.
    • Nama kondisi: Kondisi heartbeat scheduler

  • Mengonfigurasi notifikasi dan memfinalisasi pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Scheduler Heartbeat

Konfigurasi kebijakan pemberitahuan - metrik tugas zombie yang dihentikan

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

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

    • Periode berkelanjutan: 1 hari
    • Fungsi periode berkelanjutan: sum
  • Konfigurasi pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu pemberitahuan: Deret waktu mana saja melanggar
    • Posisi nilai minimum: Di atas nilai minimum
    • Nilai minimum: 1
    • Nama kondisi: Kondisi tugas zombie
  • Mengonfigurasi notifikasi dan memfinalisasi pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Zombie Tasks

Metrik mulai ulang container pekerja - konfigurasi kebijakan pemberitahuan

  • Nama metrik: Kubernetes Container - Restart Count
  • API: kubernetes.io/container/restart_count
  • Filter:

    environment_name = [ENVIRONMENT_NAME]
    location = [CLUSTER_LOCATION]
    pod_name =~ airflow-worker-.*|airflow-k8s-worker-.*
    container_name =~ airflow-worker|base
    cluster_name = [CLUSTER_NAME]
    

    CLUSTER_NAME adalah nama cluster lingkungan Anda yang dapat ditemukan di bagian Konfigurasi Lingkungan > Resource > cluster GKE di konsol Google Cloud .

  • Mengubah data > Dalam setiap deret waktu:

    • Periode berkelanjutan: 1 hari
    • Fungsi periode berkelanjutan: tarif
  • Konfigurasi pemicu pemberitahuan:

    • Jenis kondisi: Nilai minimum
    • Pemicu pemberitahuan: Deret waktu mana saja melanggar
    • Posisi nilai minimum: Di atas nilai minimum
    • Nilai minimum: 1
    • Nama kondisi: Kondisi mulai ulang penampung pekerja
  • Mengonfigurasi notifikasi dan memfinalisasi pemberitahuan:

    • Beri nama kebijakan pemberitahuan: Airflow Worker Restarts

Terraform

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

  1. Simpan file Terraform contoh 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 terjadi pemicuan pemberitahuan.
    • 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.

Mengupload DAG contoh

DAG contoh memory_consumption_dag.py yang disediakan dalam tutorial ini meniru penggunaan memori pekerja yang intensif. DAG berisi 4 tugas, yang masing-masing tugas menulis data ke string contoh, yang menggunakan memori sebesar 380 MB. DAG contoh 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 contoh DAG mulai berjalan dan evaluasi hasil pengujian:

  1. Periksa kotak email Anda untuk memverifikasi bahwa Anda menerima notifikasi dari Google Cloud Alerting 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 melebihi nilai minimum 1, yang berarti Airflow mendeteksi dan menghentikan lebih dari 1 tugas zombie.

  3. Di lingkungan Cloud Composer, buka tab Monitoring, buka bagian Statistik DAG, lalu temukan grafik Tugas zombie yang dihentikan:

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

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

  4. Menurut tolok ukur dan tindakan korektif, alasan paling umum untuk tugas zombie adalah kurangnya memori atau CPU pekerja. Identifikasi penyebab utama tugas zombie dengan menganalisis pemanfaatan resource pekerja Anda.

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

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

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

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

Mengoptimalkan lingkungan dan mengevaluasi performanya

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

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

  2. Mengalokasikan memori pekerja tambahan:

    1. Di tab Konfigurasi lingkungan, 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 dimulai ulang.

  3. Buka tab DAG, klik nama DAG sampel (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 utama kesehatan dan performa tingkat lingkungan, cara menyiapkan kebijakan pemberitahuan untuk setiap metrik, dan cara menafsirkan setiap metrik ke dalam tindakan korektif. Kemudian, Anda menjalankan DAG contoh, mengidentifikasi penyebab utama masalah kesehatan lingkungan dengan bantuan pemberitahuan dan diagram Pemantauan, serta mengoptimalkan lingkungan dengan mengalokasikan lebih banyak memori ke pekerja. Namun, sebaiknya optimalkan DAG untuk mengurangi konsumsi resource pekerja sejak awal, karena tidak mungkin meningkatkan resource di luar batas tertentu.

Pembersihan

Agar tidak dikenai biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. In the Google Cloud console, go to the Manage resources page.

    Go to Manage resources

  2. In the project list, select the project that you want to delete, and then click Delete.
  3. In the dialog, type the project ID, and then click Shut down to delete the 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. Hapus 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 mungkin ingin tetap mengaktifkan beberapa API dan izin IAM tetap ditetapkan (jika Anda menambahkan definisi tersebut ke skrip Terraform).
  2. Jalankan terraform destroy.
  3. Hapus bucket lingkungan secara manual. Cloud Composer tidak menghapusnya secara otomatis. Anda dapat melakukannya dari konsol Google Cloud atau Google Cloud CLI.

Langkah berikutnya