Cloud Monitoring で環境をモニタリングする

Cloud Composer 1 | Cloud Composer 2

Cloud Composer では Cloud MonitoringCloud Logging を使用できます。

Cloud Monitoring では、クラウドで実行されるアプリケーションのパフォーマンスや稼働時間、全体的な動作状況を確認できます。Cloud Monitoring が Cloud Composer から指標、イベント、メタデータを収集し取り込むことにより、ダッシュボードとグラフを介して分析情報を得ることができます。また、Cloud Monitoring では Cloud Composer 環境のパフォーマンスや動作状況と Airflow の指標を確認することもできます。

Logging は、環境のクラスタ内のスケジューラとワーカー コンテナによって生成されたログをキャプチャします。 これらのログには、デバッグに役立つシステムレベルと 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 用に生成するログなど、ログの量を減らすことができます。

    jobs.py からログを除外すると、ヘルスチェック失敗と CrashLoopBackOff エラーが発生する可能性があります。-jobs.py を除外フィルタに含めて除外されないようにする必要があります。

  • Monitoring では、1 分あたり複数回実行される DAG とタスクのカウント値をプロットできません。また、失敗したタスクの指標をプロットできません。

環境指標

環境指標を使用して、Cloud Composer 環境のリソース使用量と健全性を確認できます。

環境のヘルス

環境の健全性を確認するには、次のヘルス ステータス指標 composer.googleapis.com/environment/healthy を使用します。

Cloud Composer は、airflow_monitoring というライブネス DAG を実行します。これはスケジュールに沿って実行され、次のように環境の健全性をレポートします。

  • liveness DAG の実行が正常に終了すると、健全性のステータスは True になります。
  • liveness DAG の実行に失敗した場合、健全性のステータスは False になります。

liveness DAG は dags/ フォルダに保存され、Airflow UI に表示されます。liveness DAG の頻度と内容は変更できません。liveness 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 Monitoring Pod はデータベースを 1 分ごとに ping し、SQL 接続を確立できる場合は True、確立できない場合は False として健全性のステータスを報告します。

データベースの指標

次の環境指標は、Cloud Composer 環境によって使用される 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 インスタンスの自動フェイルオーバー リクエストの合計数。

スケジューラの指標

名前 API 説明
アクティブなスケジューラ composer.googleapis.com/environment/active_schedulers アクティブなスケジューラ インスタンスの数。

triggerer の指標

次の triggerer 指標は、Cloud Composer 専用に提供されています。

名前 API 説明
アクティブなトリガラー composer.googleapis.com/environment/active_triggerers アクティブな triggerer インスタンスの数。

また、次の Airflow 指標は Cloud Composer の指標を介して利用できます。

名前 API Airflow での名前 説明
実行中のトリガーの合計数。 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 1 つ以上のイベントを発生させたトリガーの数。

ウェブサーバーの指標

次の環境指標は、Cloud Composer 環境で使用される Airflow ウェブサーバーで使用できます。これらの指標を使用して、お使いの環境の Airflow ウェブサーバー インスタンスのパフォーマンスとリソース使用量を確認できます。

たとえば、リソースの上限に頻繁に近づいている場合、ウェブサーバーのマシンタイプをアップグレードする必要があります。

名前 API 説明
ウェブサーバーの 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
アクティブなウェブサーバー composer.googleapis.com/environment/active_webservers アクティブなウェブサーバー インスタンスの数。

DAG の指標

DAG 実行の効率をモニタリングし、高レイテンシの原因となるタスクを特定するために、次の 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 の指標

次の 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 の数。
失敗した SLA 非準拠メール通知 composer.googleapis.com/environment/email/sla_notification_failure_count sla_email_notification_failure SLA 非準拠メール通知試行の失敗数。
エグゼキュータのオープン スロット 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 スケジューラ ループの重要なセクションで費やされた時間。一度にこのループに入ることができるスケジューラは 1 つのみです。
重大なセクションのロックの失敗 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.running, scheduler.tasks.starving, scheduler.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 内で開始されたタスクの数。
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 で復元されたタスクの数(つまり、以前 DB で削除された状態だったタスク インスタンスが DAG ファイルに追加されます)。
タスク スケジュールの遅延 composer.googleapis.com/workflow/task/schedule_delay dagrun.schedule_delay.<dag_id> 最初のタスクの start_date から dagrun の想定される開始までの経過時間。

Cloud Composer 環境で Monitoring を使用する

コンソール

Metrics Explorer を使用すると、環境と DAG に関連する指標を表示できます。

  • Cloud Composer Environment リソースには環境の指標が含まれています。

    特定の環境の指標を表示するには、environment_name ラベルで指標をフィルタリングします。環境のロケーションやイメージのバージョンなど、他のラベルでフィルタすることもできます。

  • Cloud Composer ワークフロー リソースには、DAG の指標が含まれています。

    特定の DAG またはタスクの指標を表示するには、workflow_name ラベルと task_name ラベルで指標をフィルタリングします。タスクのステータスや Airflow オペレータ名など、他のラベルでフィルタすることもできます。

API と gcloud

Cloud Monitoring API と gcloud monitoring dashboards コマンドを使用して、カスタム ダッシュボードとウィジェットを作成および管理できます。詳細については、API によるダッシュボードの管理をご覧ください。

リソース、指標、フィルタの詳細については、Cloud Monitoring API のリファレンスをご覧ください。

Cloud Monitoring アラートの使用

アラート ポリシーを作成して指標の値をモニタリングすると、指標が条件に違反した場合に通知できます。

  1. Google Cloud コンソールで [Alerting] ページに移動します。

    アラートに移動

    検索バーを使用してこのページを検索する場合は、小見出しが [Monitoring] である結果を選択します。

  2. 通知チャンネルを作成せずに通知を受け取る場合は、[EDIT NOTIFICATION CHANNELS] をクリックして、通知チャンネルを追加します。チャンネルを追加したら、[アラート] ページに戻ります。
  3. [アラート] ページで、[CREATE POLICY] をクリックします。
  4. 指標を選択するには、[指標の選択] メニューを開き、次の操作を行います。
    1. メニューを関連するエントリに限定するには、フィルタバーに「Cloud Composer」と入力します。結果が表示されない場合は、[Show only active resources & metrics] をオフに切り替えます。
    2. [Resource type] で、[Cloud Composer Environment] または [Cloud Composer Workflow] を選択します。
    3. 指標カテゴリ指標を選択して、[適用] を選択します。
  5. [次へ] をクリックします。
  6. [Configure alert trigger] ページの設定によって、アラートがトリガーされるタイミングが決まります。条件タイプを選択し、必要に応じてしきい値を指定します。詳細については、指標しきい値のアラート ポリシーを作成するをご覧ください。
  7. [次へ] をクリックします。
  8. (省略可)アラート ポリシーに通知を追加するには、[通知チャネル] をクリックします。ダイアログで、メニューから 1 つ以上の通知チャンネルを選択し、[OK] をクリックします。
  9. (省略可)インシデントの自動クローズ期間を更新します。このフィールドは、指標データがない場合に Monitoring がインシデントを閉じるタイミングを決定します。
  10. (省略可)[Documentation] をクリックして、通知メッセージに追加する情報を入力します。
  11. [アラート名] をクリックして、アラート ポリシーの名前を入力します。
  12. [Create Policy] をクリックします。
詳細については、アラート ポリシーをご覧ください。

次のステップ