使用 Cloud Monitoring 監控環境

Managed Airflow (第 3 代) | Managed Airflow (第 2 代) | Managed Airflow (舊版第 1 代)

您可以將 Cloud MonitoringCloud Logging 與 Managed Service for Apache Airflow 搭配使用。

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

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

事前準備

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

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

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

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

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

環境指標

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

環境健康狀態

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

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

Managed Airflow 會執行名為 airflow_monitoring 的有效性 DAG,該 DAG 會依排程執行,並回報環境健康狀態,如下所示:

  • 如果存活 DAG 執行作業順利完成,健康狀態會顯示為 True
  • 如果執行中的 DAG 執行作業失敗,健康狀態為 False

存活 DAG 會儲存在 dags/ 資料夾中,並顯示在 Airflow UI 中。Liveness DAG 的頻率和內容不可變更,對即時 DAG 所做的變更不會保留。

檢查環境的依附元件

Managed Airflow 會定期檢查環境是否能連上運作所需的服務,以及是否有足夠的權限與這些服務互動。環境運作所需的服務包括 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

資料庫指標

下列環境指標適用於 Managed Airflow 環境使用的 Airflow 中繼資料庫。您可以使用這些指標監控環境資料庫執行個體的效能和資源用量。

舉例來說,如果環境即將達到資源上限,您可能需要升級環境的 Cloud SQL 機型。或者,您可能想清除資料庫,將儲存空間維持在特定門檻以下,藉此降低 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 執行個體自動容錯移轉要求總數。

工作人員指標

在 Managed Airflow (第 3 代) 和 Managed Airflow (第 2 代) 環境中,您可以查看 Airflow 工作人員的下列環境指標。

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

工作人員指標 API
縮放比例係數目標 composer.googleapis.com/environment/worker/scale_factor_target

排程器指標

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

觸發器指標

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

網路伺服器指標

下列環境指標適用於 Managed Airflow 環境使用的 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

環境使用的服務配額

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

在 Managed Airflow (第 3 代) 中,環境的叢集位於租戶專案。Managed Airflow (第 3 代) 提供下列指標,用於回報配額使用量,以及租戶專案中環境使用的服務對應配額限制。

指標 API 說明
Managed Airflow 工作負載的 CPU 配額上限 composer.googleapis.com/environment/workloads_cpu_quota (僅限 Managed Airflow (第 3 代)) 環境使用的虛擬 CPU 總數的 Compute Engine CPU 分配配額。這項限制適用於每個環境。如果專案有多個 Managed Airflow (第 3 代) 環境,每個環境都有自己的配額限制。
Managed Airflow 工作負載的 CPU 配額用量 composer.googleapis.com/environment/workloads_cpu_quota_usage (僅限 Managed Airflow (第 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 指標

Stackdriver 提供下列 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 排程器活動訊號。
服務水準協議回呼通知失敗 composer.googleapis.com/environment/sla_callback_notification_failure_count sla_callback_notification_failure 嘗試傳送服務水準協議錯過回撥通知的次數。
智慧感應器輪詢例外狀況失敗 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 工作切換為「執行中」狀態前,處於「已排入佇列」狀態的時間。
工作 CPU 使用率 composer.googleapis.com/workflow/task/cpu_usage task.cpu_usage.<dag_id>.<task_id> 工作使用的 CPU 百分比。
工作記憶體用量 composer.googleapis.com/workflow/task/mem_usage task.mem_usage.<dag_id>.<task_id> 工作使用的記憶體百分比。
已從 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 還原的任務數量 (也就是先前在資料庫中處於 REMOVED 狀態的任務執行個體,已新增至 DAG 檔案)。
工作排程延遲 composer.googleapis.com/workflow/task/schedule_delay dagrun.schedule_delay.<dag_id> 第一個工作 start_date 與 dagrun 預期開始時間之間經過的時間。
執行中的觸發條件總數 composer.googleapis.com/workload/triggerer/num_running_triggers triggers.running 每個觸發條件執行個體執行的觸發條件數量。
封鎖觸發條件 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 觸發至少一個事件的觸發條件數量。

在 Managed Airflow 環境中使用 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. 如要選取指標,請展開「Select a metric」(選取指標) 選單,執行下列步驟:
    1. 如要限制選單只顯示相關項目,請在篩選列輸入 Cloud Composer。如果選單篩選後沒有任何結果,請停用「Show only active resources & metrics」(僅顯示使用中的資源和指標) 切換鈕。
    2. 在「資源類型」部分,選取「Cloud Composer 環境」或「Cloud Composer 工作流程」
    3. 選取「Metric category」(指標類別) 和「Metric」(指標),然後選取「Apply」(套用)
  5. 點選「Next」(下一步)
  6. 「Configure alert trigger」(設定警告觸發條件) 頁面中的設定會決定警告觸發時機。選取條件類型,視需要指定門檻。詳情請參閱「建立指標門檻警告政策」。
  7. 點選「Next」(下一步)
  8. 選用:如要新增警告政策的通知,請按一下「Notification channels」(通知管道)。在對話方塊中,從選單選取一或多個通知管道,然後按一下「OK」(確定)
  9. 選用:更新「Incident autoclose duration」(事件自動關閉期限)。這個欄位會決定 Monitoring 在沒有指標資料下關閉事件的時機。
  10. 選用:按一下「Documentation」(說明文件),新增要納入通知訊息的資訊。
  11. 按一下「Alert name」(警告名稱),輸入警告政策的名稱。
  12. 點選「建立政策」
詳情請參閱「快訊總覽」。

後續步驟