使用 Cloud Monitoring 監控環境

Cloud Composer 3 | Cloud Composer 2 | Cloud Composer 1

您可以搭配使用 Cloud MonitoringCloud Logging 使用 Cloud Composer。

Cloud Monitoring 可讓您掌握雲端應用程式的效能、運作時間和整體健康狀態。Cloud Monitoring 會從 Cloud Composer 收集和擷取指標、事件和中繼資料,並在資訊主頁和圖表中產生深入分析資料。您可以使用 Cloud Monitoring 瞭解 Cloud Composer 環境的效能和健康狀態以及 Airflow 指標。

記錄會擷取環境叢集中排程器和工作站容器產生的記錄。這些記錄包含系統層級資訊與 Airflow 相依性資訊,可協助您進行偵錯。如要瞭解如何查看記錄,請參閱「查看 Airflow 記錄」。

事前準備

  • 如要存取 Cloud Composer 環境的記錄和指標,您必須具備下列權限:

    • 記錄和指標的唯讀存取權: logging.viewermonitoring.viewer
    • 記錄 (包括私密記錄) 的唯讀權限: logging.privateLogViewer
    • 指標的讀取/寫入權限: monitoring.editor

    如要進一步瞭解 Cloud Composer 的其他權限和角色,請參閱「存取權控管」。

  • 為了避免發生記錄重複的情形,Google Kubernetes Engine 適用的 Cloud Logging 為停用狀態。

  • Cloud Logging 會為每個狀態和 Google Cloud 專案中發生的每個事件分別產生一個項目。您可以使用排除篩選器減少記錄量,包括 Cloud Logging 為 Cloud Composer 產生的記錄。

環境指標

您可以使用環境指標,檢查 Cloud Composer 環境的資源用量和健康狀態。

環境健康狀態

如要檢查環境的健康狀態,您可以使用下列健康狀態指標:

指標 API
環境健康狀態 composer.googleapis.com/environment/healthy

Cloud Composer 會執行名為 airflow_monitoring 的即時性 DAG,該 DAG 會依排程執行並回報環境健康狀況,如下所示:

  • 如果即時性 DAG 執行作業順利完成,健康狀態會是 True
  • 如果執行中的 DAG 執行作業失敗,健康狀態會是 False

即時性 DAG 會儲存在 dags/ 資料夾中,並顯示在 Airflow UI 中。生命週期 DAG 的頻率和內容是不可變動的,因此請勿修改。對即時性 DAG 所做的變更不會保留。

環境依附元件檢查

Cloud Composer 會定期檢查環境是否能存取運作所需的服務,以及是否具有足夠的權限可與這些服務互動。環境運作所需的服務包括 Artifact Registry、Cloud Logging 和 Cloud Monitoring。

環境的依附元件檢查可使用下列指標:

指標 API 說明
依附元件檢查次數 composer.googleapis.com/environment/health/dependency_check_count 這項指標會追蹤在環境運作所需的服務上執行可及性檢查的次數。
依附元件權限檢查次數 composer.googleapis.com/environment/health/dependency_permissions_check_count 這項指標會追蹤在環境運作所需的服務上執行權限檢查的次數。

資料庫健康狀態

如要檢查資料庫的健康狀態,您可以使用下列健康狀態指標:composer.googleapis.com/environment/database_health

Airflow 監控 Pod 會每分鐘向資料庫發出 ping 要求,並在可建立 SQL 連線時回報健康狀態為 True,在無法建立時則回報 False

資料庫指標

以下環境指標可用於 Cloud Composer 環境使用的 Airflow 中繼資料庫。您可以使用這些指標監控環境資料庫執行個體的效能和資源使用情形。

舉例來說,如果環境即將達到資源限制,您可能需要增加環境大小。或者,您也可以進行資料庫清理,以便最佳化資料庫大小。

資料庫指標 API 說明
資料庫 CPU 使用率 composer.googleapis.com/environment/database/cpu/usage_time
資料庫 CPU 核心 composer.googleapis.com/environment/database/cpu/reserved_cores
資料庫 CPU 使用率 composer.googleapis.com/environment/database/cpu/utilization
資料庫記憶體用量 composer.googleapis.com/environment/database/memory/bytes_used
資料庫記憶體配額 composer.googleapis.com/environment/database/memory/quota
資料庫記憶體使用率 composer.googleapis.com/environment/database/memory/utilization
資料庫磁碟用量 composer.googleapis.com/environment/database/disk/bytes_used
資料庫磁碟配額 composer.googleapis.com/environment/database/disk/quota
資料庫磁碟使用率 composer.googleapis.com/environment/database/disk/utilization
資料庫連線數量上限 composer.googleapis.com/environment/database/network/max_connections
資料庫連線 composer.googleapis.com/environment/database/network/connections
可用於容錯移轉的資料庫 composer.googleapis.com/environment/database/available_for_failover 如果環境的 Cloud SQL 執行個體處於高可用性模式,且已準備好進行容錯移轉,則為 True
資料庫自動容錯要求數量 composer.googleapis.com/environment/database/auto_failover_request_count 環境 Cloud SQL 執行個體的自動容錯要求總數。

工作者指標

在 Cloud Composer 3 和 Cloud Composer 2 環境中,Airflow 工作站可使用下列環境指標。

這項指標可用於自動調度環境中的工作站數量。水平 Pod 自動調度器會設定這個指標,然後 Airflow Worker Set Controller 環境元件會根據這個指標的值,調整 Airflow worker 數量。

worker 指標 API
縮放比例目標 composer.googleapis.com/environment/worker/scale_factor_target

排程器指標

名稱 API 說明
使用中的排程器 composer.googleapis.com/environment/active_schedulers 有效排程器執行個體數量。

DAG 處理器指標

名稱 API 說明
使用中的 DAG 處理器 composer.googleapis.com/environment/active_dag_processors 有效 DAG 處理器執行個體數量。

觸發器指標

名稱 API 說明
使用中的觸發條件 composer.googleapis.com/environment/active_triggerers 有效觸發條件例項數量。

網路伺服器指標

以下環境指標可用於 Cloud Composer 環境使用的 Airflow 網路伺服器。您可以使用這些指標檢查環境 Airflow 網路伺服器例項的效能和資源使用率。

舉例來說,如果網路伺服器持續接近資源上限,您可能需要增加網路伺服器規模和效能參數

名稱 API 說明
使用中的網路伺服器 composer.googleapis.com/environment/active_webservers 有效的網路伺服器執行個體數量。
網路伺服器 CPU 使用率 composer.googleapis.com/environment/web_server/cpu/usage_time
網路伺服器 CPU 配額 composer.googleapis.com/environment/web_server/cpu/reserved_cores
網路伺服器記憶體用量 composer.googleapis.com/environment/web_server/memory/bytes_used
網路伺服器記憶體配額 composer.googleapis.com/environment/web_server/memory/quota

環境使用的服務配額

Cloud Composer 會使用其他 Google Cloud 服務。這些服務都有專案層級配額,適用於使用 Cloud Composer 時。

在 Cloud Composer 3 中,環境叢集位於用戶群專案中。Cloud Composer 3 提供下列指標,可針對租用戶專案中環境使用的服務,回報配額使用情形和相應的配額限制。

指標 API 說明
Cloud Composer 工作負載的 CPU 配額限制 composer.googleapis.com/environment/workloads_cpu_quota (僅限 Cloud Composer 3) 環境使用的虛擬 CPU 總數的 Compute Engine CPU 分配配額。這項限制適用於每個環境。如果專案有多個 Cloud Composer 3 環境,每個環境都有各自的配額限制。
Cloud Composer 工作負載的 CPU 配額使用情形 composer.googleapis.com/environment/workloads_cpu_quota_usage (僅限 Cloud Composer 3) 環境使用 Compute Engine CPU 配額的用量。

DAG 指標

為協助您監控 DAG 執行效率,並找出導致高延遲的工作,Stackdriver 提供下列 DAG 指標。

DAG 指標 API
DAG 執行作業數量 composer.googleapis.com/workflow/run_count
每個 DAG 執行作業的時間長度 composer.googleapis.com/workflow/run_duration
工作執行次數 composer.googleapis.com/workflow/task/run_count
每項工作執行的時間長度 composer.googleapis.com/workflow/task/run_duration

Cloud Monitoring 只會針對執行完畢 (無論成功或失敗) 的工作流程和工作顯示指標。如果沒有任何工作流程活動,或是工作流程和工作還在執行中,就不會顯示任何資料

Celery Executor 指標

Stackdriver 提供下列 Celery Executor 指標。這些指標可協助您判斷環境中的工作站資源是否充足。

Celery Executor 指標 API
佇列中的工作數量 composer.googleapis.com/environment/task_queue_length
線上 Celery 工作站的數量 composer.googleapis.com/environment/num_celery_workers

Airflow 指標

可用的 Airflow 指標如下。這些指標對應至 Airflow 提供的指標

名稱 API Airflow 中的名稱 說明
Celery 工作非零結束代碼 composer.googleapis.com/environment/celery/execute_command_failure_count celery.execute_command.failure Celery 工作中的非零結束代碼數量。
Celery 工作發布逾時 composer.googleapis.com/environment/celery/task_timeout_error_count celery.task_timeout_error 將工作發布至 Celery 代理程式時發生的 AirflowTaskTimeout 錯誤數量。
序列化的 DAG 擷取時間長度 composer.googleapis.com/environment/collect_db_dag_duration collect_db_dags 從資料庫擷取所有序列化 DAG 所需的時間。
DAG 重新整理錯誤 composer.googleapis.com/environment/dag_callback/exception_count dag.callback_exceptions 從 DAG 回呼引發的例外狀況數量。發生這種情況時,表示 DAG 回呼無法運作。
DAG 重新整理錯誤 composer.googleapis.com/environment/dag_file/refresh_error_count dag_file_refresh_error 載入任何 DAG 檔案時的失敗次數。
DAG 檔案載入時間 composer.googleapis.com/environment/dag_processing/last_duration dag_processing.last_duration.<dag_file> 載入特定 DAG 檔案所需的時間。
自 DAG 檔案處理作業完成後的時間 composer.googleapis.com/environment/dag_processing/last_run_elapsed_time dag_processing.last_run.seconds_ago.<dag_file> 上次處理 DAG 檔案後經過的秒數。
DagFileProcessorManager 停滯次數 composer.googleapis.com/environment/dag_processing/manager_stall_count dag_processing.manager_stalls 停滯的 DagFileProcessorManager 程序數量。
DAG 剖析錯誤 composer.googleapis.com/environment/dag_processing/parse_error_count dag_processing.import_errors 剖析 DAG 檔案時產生的錯誤數量。
執行 DAG 剖析程序 composer.googleapis.com/environment/dag_processing/processes dag_processing.processes 目前執行中的 DAG 剖析程序數量。
處理器逾時 composer.googleapis.com/environment/dag_processing/processor_timeout_count dag_processing.processor_timeouts 因耗時過長而終止的檔案處理器數量。
掃描及匯入所有 DAG 檔案所需的時間 composer.googleapis.com/environment/dag_processing/total_parse_time dag_processing.total_parse_time 掃描及匯入所有 DAG 檔案一次所需的總時間。
目前的 DAG 包裹大小 composer.googleapis.com/environment/dagbag_size dagbag_size 排程器根據其設定執行掃描時,所找到的 DAG 數量。
未達服務水準協議的電子郵件通知失敗 composer.googleapis.com/environment/email/sla_notification_failure_count sla_email_notification_failure 未達服務水準的電子郵件通知失敗次數。
執行緒的空白執行時段 composer.googleapis.com/environment/executor/open_slots executor.open_slots 執行緒的未使用運算單元數量。
執行緒上排入佇列的工作 composer.googleapis.com/environment/executor/queued_tasks executor.queued_tasks 執行緒上排入佇列的工作數量。
在執行緒上執行工作 composer.googleapis.com/environment/executor/running_tasks executor.running_tasks 執行緒上執行中的工作數量。
工作執行個體成功/失敗 composer.googleapis.com/environment/finished_task_instance_count ti_failuresti_successes 整體工作例項成功/失敗次數。
已啟動/完成的工作 composer.googleapis.com/environment/job/count <job_name>_start<job_name>_end 已啟動/完成的工作數量,例如 SchedulerJob、LocalTaskJob。
工作心跳失敗 composer.googleapis.com/environment/job/heartbeat_failure_count <job_name>_heartbeat_failure 工作失敗的心跳次數。
每個運算子建立的工作 composer.googleapis.com/environment/operator/created_task_instance_count task_instance_created-<operator_name> 為特定運算子建立的工作例項數量。
運算子執行作業 composer.googleapis.com/environment/operator/finished_task_instance_count operator_failures_<operator_name>operator_successes_<operator_name> 每個運算子完成的工作例項數量
集區中的空缺運算單元 composer.googleapis.com/environment/pool/open_slots pool.open_slots.<pool_name> 集區中開放的空缺數量。
集區中的排隊運算單元 composer.googleapis.com/environment/pool/queued_slots pool.queued_slots.<pool_name> 集區中排隊的運算單元數量。
在集區中執行運算單元 composer.googleapis.com/environment/pool/running_slots pool.running_slots.<pool_name> 集區中執行中的運算單元數量。
池中的工作飢餓 composer.googleapis.com/environment/pool/starving_tasks pool.starving_tasks.<pool_name> 集區中飢餓工作數量。
排程器的關鍵區段所花費的時間 composer.googleapis.com/environment/scheduler/critical_section_duration scheduler.critical_section_duration 排程器迴圈的關鍵區段所花費的時間。一次只能有一個排程器進入此迴圈。
關鍵區塊鎖定失敗 composer.googleapis.com/environment/scheduler/critical_section_lock_failure_count scheduler.critical_section_busy 排程器程序嘗試取得關鍵區塊鎖定 (需要將工作傳送至執行者) 的次數,並發現該鎖定項目已遭其他程序鎖定。
外部終止的工作 composer.googleapis.com/environment/scheduler/task/externally_killed_count scheduler.tasks.killed_externally 外部終止的工作數量。
孤立工作 composer.googleapis.com/environment/scheduler/task/orphan_count scheduler.orphaned_tasks.clearedscheduler.orphaned_tasks.adopted 排程器清除/採用的孤立工作數量。
執行中/飢餓/可執行的工作 composer.googleapis.com/environment/scheduler/tasks scheduler.tasks.runningscheduler.tasks.starvingscheduler.tasks.executable 執行中/飢餓/可執行的工作數量。
排程器活動訊號 composer.googleapis.com/environment/scheduler_heartbeat_count scheduler_heartbeat 排程器活動訊號。
失敗的 SLA 回撥通知 composer.googleapis.com/environment/sla_callback_notification_failure_count sla_callback_notification_failure 未回撥通知失敗的 SLA 失敗次數。
智慧型感應器探測例外狀況失敗 composer.googleapis.com/environment/smart_sensor/exception_failures smart_sensor_operator.exception_failures 先前智慧感應器探測迴圈中,因例外狀況造成的失敗次數。
智慧型感應器探測基礎架構失敗 composer.googleapis.com/environment/smart_sensor/infra_failures smart_sensor_operator.infra_failures 先前智慧感應器探測迴圈中基礎架構失敗的次數。
智慧感應器探測例外狀況 composer.googleapis.com/environment/smart_sensor/poked_exception smart_sensor_operator.poked_exception 上一個智慧感應器探測迴圈中的例外狀況數。
智慧感應器成功觸發工作 composer.googleapis.com/environment/smart_sensor/poked_success smart_sensor_operator.poked_success 在先前戳入迴圈中,智慧感應器戳入的新成功工作數。
智慧型感應器探測工作 composer.googleapis.com/environment/smart_sensor/poked_tasks smart_sensor_operator.poked_tasks 上一個偵測迴圈中,智慧感應器偵測到的工作數量。
先前成功的任務例項 composer.googleapis.com/environment/task_instance/previously_succeeded_count previously_succeeded 先前成功的工作例項數量。
已停止的無效工作 composer.googleapis.com/environment/zombie_task_killed_count zombies_killed 已終止的無效工作數量。
DAG 執行時間長度 composer.googleapis.com/workflow/dag/run_duration dagrun.duration.success.<dag_id>dagrun.duration.failed.<dag_id> DagRun 達到成功/失敗狀態所需的時間。
DAG 依附元件檢查時間長度 composer.googleapis.com/workflow/dependency_check_duration dagrun.dependency-check.<dag_id> 檢查 DAG 依附元件所需的時間。這個指標與環境的依附元件和權限檢查指標不同,適用於 DAG
DAG 執行時間表延遲 composer.googleapis.com/workflow/schedule_delay dagrun.schedule_delay.<dag_id> 排定的 DagRun 開始日期與實際 DagRun 開始日期之間的延遲時間。
已完成的工作 composer.googleapis.com/workflow/task_instance/finished_count ti.finish.<dag_id>.<task_id>.<state> 指定 DAG 中已完成的工作數量。
任務執行個體執行時間 composer.googleapis.com/workflow/task_instance/run_duration dag.<dag_id>.<task_id>.duration 完成工作所需的時間。
已啟動的工作 composer.googleapis.com/workflow/task_instance/started_count ti.start.<dag_id>.<task_id> 指定 DAG 中已啟動的工作數量。
任務執行個體排入佇列的時間長度 composer.googleapis.com/workflow/task_instance/queued_duration dag.<dag_id>.<task_id>.queued_duration 工作在「已排入佇列」狀態下,轉換為「執行中」狀態所花費的時間。
從 DAG 中移除的工作 composer.googleapis.com/workflow/task/removed_from_dag_count task_removed_from_dag.<dag_id> 指定 DAG 中移除的工作數量 (即 DAG 中不再存在的工作)。
工作已還原至 DAG composer.googleapis.com/workflow/task/restored_to_dag_count task_restored_to_dag.<dag_id> 針對特定 DAG 復原的工作數量 (也就是先前在資料庫中處於「已移除」狀態的工作例項,已新增至 DAG 檔案)。
工作排程延遲 composer.googleapis.com/workflow/task/schedule_delay dagrun.schedule_delay.<dag_id> 第一個工作日期_開始日期與 DAG 執行作業預期開始時間之間的時間差距。
執行中的觸發條件總數 composer.googleapis.com/workload/triggerer/num_running_triggers triggers.running 每個 triggerer 執行個體執行中的觸發條件數量。
封鎖觸發條件 composer.googleapis.com/environment/trigger/blocking_count triggers.blocked_main_thread 導致主執行緒無法運作的觸發條件數量 (可能因為並非完全非同步)。
失敗的觸發條件 composer.googleapis.com/environment/trigger/failed_count triggers.failed 觸發條件在觸發事件前因錯誤而失敗的次數。
成功的觸發條件 composer.googleapis.com/environment/trigger/succeeded_count triggers.succeeded 觸發至少一項事件的觸發條件數量。

在 Cloud Composer 環境中使用 Monitoring

主控台

您可以使用 Metrics Explorer 顯示與環境和 DAG 相關的指標:

  • Cloud Composer 環境資源包含環境的指標。

    如要顯示特定環境的指標,請依據 environment_name 標籤篩選指標。您也可以依據其他標籤篩選,例如環境的位置或圖片版本。

  • Cloud Composer Workflow 資源包含 DAG 的評量指標。

    如要顯示特定 DAG 或工作指派的指標,請依據 workflow_nametask_name 標籤篩選指標。您也可以依其他標籤篩選,例如工作狀態或 Airflow 運算子名稱。

API 和 gcloud

您可以透過 Cloud Monitoring API 和 gcloud monitoring dashboards 指令建立及管理自訂資訊主頁和小工具。詳情請參閱「使用 API 管理資訊主頁」。

如要進一步瞭解資源、指標和篩選器,請參閱 Cloud Monitoring API 參考資料:

使用 Cloud Monitoring 快訊

您可以建立快訊政策來監控指標值,並在這些指標違反條件時通知您。

  1. 前往 Google Cloud 控制台的 「Alerting」(警告) 頁面

    前往「Alerting」(快訊)

    如果您是使用搜尋列尋找這個頁面,請選取子標題為「Monitoring」的結果

  2. 如果您尚未建立通知管道,但想收到通知,請按一下「Edit Notification Channels」(編輯通知管道),然後新增通知管道。加入管道後,請返回「Alerting」頁面。
  3. 在「Alerting」頁面中,選取「Create policy」
  4. 如要選取指標,請展開「選取指標」選單,然後按照下列步驟操作:
    1. 如要將選單限制為相關項目,請在篩選列中輸入 Cloud Composer。如果篩選選單後沒有任何結果,請停用「僅顯示活躍的資源和指標」切換按鈕。
    2. 在「Resource type」(資源類型) 中,選取「Cloud Composer Environment」(Cloud Composer 環境) 或「Cloud Composer Workflow」(Cloud Composer 工作流程)。
    3. 選取「指標類別」和「指標」,然後選取「套用」
  5. 點選「下一步」
  6. 「Configure alert trigger」頁面中的設定會決定快訊觸發的時機。 選取條件類型,並視需要指定門檻值。詳情請參閱「建立以指標門檻為基礎的警告政策」一文。
  7. 點選「下一步」
  8. 選用步驟:如要新增通知至快訊政策,請按一下「通知管道」。在對話方塊中,從選單中選取一或多個通知管道,然後按一下「OK」
  9. 選用:更新「Incident autoclose duration」。這個欄位會決定 Monitoring 在沒有指標資料時關閉事件的時間。
  10. 選用步驟:按一下「說明文件」,然後輸入您希望在通知訊息中顯示的資訊。
  11. 按一下「快訊名稱」,然後輸入快訊政策的名稱。
  12. 點選「建立政策」
詳情請參閱警報總覽

後續步驟