データ オーケストレーションの信頼性とパフォーマンスを向上させる Apache Airflow のスケーラブルなアラート
Christian Yarros
Strategic Cloud Engineer, Google
※この投稿は米国時間 2024 年 8 月 21 日に、Google Cloud blog に投稿されたものの抄訳です。
概要
Apache Airflow は、データ ワークフローのオーケストレーション ツールとして人気があります。Google Cloud は、Cloud Composer と呼ばれるマネージド Airflow サービスを提供しています。これは、Apache Airflow 上に構築されたフルマネージドのワークフロー オーケストレーション サービスで、パイプラインの作成や実行スケジュールの設定、パイプラインのモニタリングを可能にします。Cloud Composer を実行するときは、DAG(有向非巡回グラフ)をモニタリングし、データ パイプラインのダウンタイムを最小限に抑えるために、強固なロギングとアラートを設定することが重要です。
このガイドでは、Cloud Composer のアラートの階層について説明し、Cloud Composer と Apache Airflow を使用する Google Cloud エンジニアが使用できるさまざまなアラート オプションを見ていきます。
はじめに
Cloud Composer のアラートの階層
Composer 環境
Cloud Composer 環境は、Google Kubernetes Engine に基づく自己完結型の Airflow デプロイメントであり、Airflow に組み込まれているコネクタを使用して他の Google Cloud サービスと連携します。
Cloud Composer は、ワークフローとすべての Airflow コンポーネントを実行する Google Cloud サービスをプロビジョニングします。環境の主なコンポーネントは、GKE クラスタ、Airflow ウェブサーバー、Airflow データベース、Cloud Storage バケットです。詳細については、Cloud Composer 環境のアーキテクチャをご覧ください。
このレベルで発生するアラートは主に、クラスタと Airflow コンポーネントのパフォーマンスと健全性で構成されています。
Airflow DAG Run
DAG Run は、ある時点での DAG のインスタンス化を表すオブジェクトです。DAG が実行されるたびに DAG Run が作成され、そこに含まれるすべてのタスクが実行されます。DAG Run のステータスは、タスクの状態によって異なります。各 DAG Run は互いに独立して実行されるため、ある DAG を同時に複数実行することができます。
このレベルで発生するアラートは主に、DAG Run の状態の変化(成功や失敗など)や SLA 未達で構成されています。Airflow のコールバック機能により、これらのアラートを送信するコードをトリガーできます。
Airflow Task インスタンス
Task は、Airflow における実行の基本単位です。Task は DAG に格納され、その実行順序を表すためにアップストリームとダウンストリームの依存関係が設定されます。Airflow のタスクには Operator と Sensor が含まれます。
Airflow DAG Run と同様に、Airflow Task は Airflow コールバックを介してアラートを送信するコードをトリガーできます。
まとめ
Airflow のアラート階層をまとめると、Google Cloud → Cloud Composer サービス → Cloud Composer 環境 → Airflow コンポーネント(ワーカー) → Airflow DAG Run → Airflow Task インスタンスの順になります。
Cloud Composer の本番環境レベルの実装では、この階層の各レベルでアラートとモニタリング機能を設定します。Cloud Composer には、サービス / 環境レベルでのモニタリングとアラートに関するドキュメントが幅広く用意されています。
Google Cloud での Airflow アラートの設定
次に、Airflow DAG Run と Airflow Task のレベルでアラートを発生させる 3 通りの方法を見ていきます。
オプション 1: ログベースのアラート ポリシー
Google Cloud には、Airflow 環境内でのロギングとアラートに役立つネイティブ ツールがあります。Cloud Logging は、Airflow を含むさまざまなソースからのログを一元管理します。Cloud Monitoring を使用すると、特定のログエントリや指標のしきい値に基づいてアラート ポリシーを設定できます。
含まれているログに特定のメッセージが現れるたびに通知されるようアラート ポリシーを構成できます。たとえば、監査ログに特定のデータアクセス メッセージが記録されたことを知りたい場合は、そのメッセージが現れたときに通知を受け取ることができます。このようなタイプのポリシーは、ログベースのアラート ポリシーと呼ばれます。詳細については、ログベースのアラート ポリシーの構成 | Cloud Logging をご覧ください。
これらのサービスは、前述した Airflow のコールバック機能とうまく組み合わせることができます。手順は次のとおりです。
-
コールバック関数を定義し、DAG または Task レベルに設定します。
-
Python のネイティブ ロギング ライブラリを使用して、特定のログメッセージを Cloud Logging に書き込みます。
-
特定のログメッセージによってトリガーされるログベースのアラート ポリシーを定義し、通知チャンネルにアラートを送信します。
長所と短所
長所:
-
軽量で、設定が最小限で済む: サードパーティ ツール、メールサーバーの設定、追加の Airflow プロバイダは不要
-
ログ エクスプローラやログベースの指標とのインテグレーションにより、より深い分析情報の取得や履歴分析が可能
-
複数の通知チャンネル オプション
短所:
-
メール通知アラートに最小限の情報しか含まれない
-
ログシンクとアラート ポリシーの設定に関して習得時間とオーバーヘッドがかかる
-
Cloud Logging と Cloud Monitoring の使用に伴う費用
サンプルコード
Airflow DAG のコールバック:
この Airflow DAG は、PythonOperator を使用して、定義された SLA を未達にし、Airflow 例外を発生させます。DAG Run が失敗状態になると log_on_dag_failure
コールバック関数がトリガーされ、SLA が満たされなかった場合は log_on_sla_miss
コールバック関数がトリガーされます。これらのコールバックはどちらも、それぞれ「Airflow DAG Failure:」と「Airflow SLA Miss:」というメッセージ文字列をログに書き込みます。これらのメッセージをログベースのアラートが捕捉し、定義された通知チャンネルにアラートを送信します。
Airflow Task のコールバック:
この例では、タスク インスタンス自体が log_on_task_failure をコールバックします。タスクレベルで特定のコールバック関数を設定できるため、アラートを送信するタイミングと方法を特定のタスクに基づいて柔軟に決定できます。
オプション 2: SendGrid によるメール通知アラート
SendGrid は、Cloud Composer でメール通知サービスとして選ばれた SMTP サービス プロバイダです。詳細については、Cloud Composer でメール通知を構成する方法をご覧ください。
長所と短所
長所:
-
幅広くサポートされている信頼性の高い通知方法
-
分析しやすいようにフォーマットされたログスニペットを含む詳細なメール
-
ネイティブの Airflow EmailOperator を使用
-
タスクごとの柔軟な受信者リスト
短所:
-
大量のアラートが届いて手に負えなくなる可能性がある
-
外部メール プロバイダ(SendGrid)の構成とメール テンプレートの管理が必要
-
優先順位付けやフィルタリングを適切に行わないと、受信トレイで見失う可能性がある
-
SendGrid に伴う費用
サンプルコード
EmailOperator
オプション 3: Slack や Pagerduty などのサードパーティ ツール
Airflow はオープンソースなので、Slack や Pagerduty といったアラートや通知を処理できる他のプロバイダも選択できます。
長所と短所
長所:
-
使い慣れたコミュニケーション チャンネルでのリアルタイムの通知
-
カスタマイズ可能なフォーマットと、特定のチャンネルやユーザーにメッセージを送信できる機能
-
サードパーティ オプションは、チームの既存のコミュニケーション ワークフローと統合されます。アラートについて直接話し合い、コンテキストや解決手順をまとめておくことができます。これにより、単独のメールやログエントリに比べて、トラブルシューティングや知識の共有が迅速化されます。
短所:
-
サードパーティのワークスペース、Webhook、API トークンの設定が必要
-
追加の Airflow 接続の管理が必要
-
慎重に使用しないと通知疲れにつながる可能性がある
-
Webhook または API トークンが侵害された場合の潜在的なセキュリティ上の懸念
-
サードパーティのメッセージ履歴内での長期的なログの保管が制限される可能性がある
-
サードパーティ ツールに伴う費用
サンプルコード
Slack:
Pagerduty:
独自のガイダンスと次のステップ
長所と短所を考慮すると、本番環境での Airflow のアラートにはログベースのアラート ポリシー(オプション 1)をおすすめします。このアプローチをとると、スケーラブルなログ収集、シンプルなしきい値ベースのアラート、多様な通知チャンネル、指標の探索、他の Google Cloud サービスとのインテグレーションが可能になります。Logging は直感的に理解でき、Cloud Composer と統合されているため追加のプロバイダ パッケージは必要ありません。
Airflow DAG にロギングとアラートを組み込むことで、データ パイプラインを予防的にモニタリングし、Google Cloud の可能性を最大限に引き出すことができます。
Cloud Composer、Apache Airflow、およびこのガイドで説明されているアラート メカニズムの詳細については、次のリソースをご覧ください。
また、Cloud Composer に関連する次の Google Cloud ブログもお読みください。
ー Google、戦略的クラウド エンジニア Christian Yarros