Looker スケジュール配信の仕組み
LookerではSlackやGoogle Driveなど他のツールに対し、スケジュール機能を利用してデータを送信することができます。
スケジュールを設定して配信されるデータは、Lookerアプリケーション自身がデータを直接配信先に送信しているのではなく、通称Action HubというLookerとは別のサーバーを介して送信しています。なおメールのデリバリはAction HubサーバーではなくSMTPサーバーを介して実施されています。
本記事ではスケジュールを実行した際にAction Hubサーバーを含めどのようにデータが送信されているかの概要について解説した後、実行されたスケジュールジョブのステージをLookerのSystem Activityを使用して確認する方法を紹介します。
- この記事は、Lookerのスケジュール配信をGoogleが提供するAction hubを介して実行した場合を想定して作成します。
- ご自身でAction hubを作成するカスタムAction hubの話やLookerのAction hubサーバーを使用せずAction hubサーバーを自前でホストするケースに関してはこの記事ではスコープ外といたします。
- Action hubはアラート機能の配信でも使用されます。スケジュールプロセスと非常に似た仕組みで動作しますが今回はアラート機能の説明は省きます。
Action hub概要
スケジュール配信のライフサイクルを解説する前に、Action Hubについて簡単に説明します。
Action hubを利用すると、LookerからデータををSlackやTeamsなど他のアプリへ配信することができます。スケジュールジョブやアラートジョブの配信で使用されます。
- Action hubサーバーとはLookerから配信リクエストを受け取って、データを配信先へ送信する役割を担うサーバーです。
- Googleが公式でサポートしている配信先はこちら。
- Admin > Platform > Actions > Looker Actions から有効にしたいAction Hubを有効にし設定を入力します。
スケジュールのライフサイクル概要
下記の記事に解説があります。もう少しわかりやすく説明します。
- スケジュールを設定すると、その情報はschedule planとしてlookerの内部データベースに格納されます。
- Lookerのディスパッチャーというプロセスが、内部データベースから実行可能なスケジュールジョブを随時チェックしています。該当するスケジュールプランがあればスケジュールジョブをエクセキュートキューに追加します。
- スケジュールプランは、どのダッシュボードを毎日何時にどこへ配信する、という設定自体のことです。(Admin >Alerts&Schedules > Schedule)
- スケジュールジョブは、スケジュールプランに基づいて実施される各配信のことです(Admin >Alerts&Schedules > Schedule Hisory)。
- エクセキュートスレッドがエクセキュートキューに入っているジョブを取り出し、スケジュールジョブを実行します。
この段階で、データベースに対してスケジュールの結果を取得するためのクエリを発行したり、PDFとpngの場合は画像を生成します。これが終わるとスケジュールジョブはデリバリーキューに追加されます。 - デリバリースレッドがデリバリーキューからジョブを取り出し、配信作業を実行します。この際、デリバリースレッドはAction hubサーバーに/executeリクエストを投げ、これを受けたAction hubサーバーが配信先にジョブを配信します。
- LookerがAction hubサーバーから配信が完了したという応答を受け取ると、スケジュールジョブが完了としてマークされます。
Action hubの中には、結果を一度にAction hubサーバーに送信し配信するのではなく、streaming配信を利用してDBのチャンクに分けて送信する場合があります。Google DriveへのCSV配信など大量のデータを配信するケースで利用されます。この場合、[2]と[3]は同時に実行されます。つまり、Lookerがクエリの結果を受け取りつつ、処理できたデータの一部からAction hub サーバーへ順次送信します。
System Activityから見るスケジュールジョブステージ
System Activityは、Lookerの内部データベースに保存してある方法を閲覧できるExploreやダッシュボードです。簡易的なログのようなものです。
System Activity のSchedule Plan Exploreでは、スケジュールジョブを下記のステージに分けた状態で各ステージの所要時間等を確認することができます。
- enqueue_for_execute
- execute
- enqueue_for_delivery
- delivery
例えばSchedule job id = 253213のジョブが、配信はされたものの設定時刻より遅延したとして、ジョブのステージを確認しボトルネックがどこにありそうかあたりをつけたいとします。
上記の画像ではSchedule job id = 253213のジョブステージごとの所要時間を見ています。
- スケジュールジョブは配信成功(success)となっています。
- Scheduled Job Stageの列がうまく実際のステージの順番に並んでおりませんが、excecuteの部分で150秒要しています。
executeステージはクエリの実行や画像生成をしているフェーズなので、それらの処理に時間がかかった=例えばクエリが重く実行に時間がかかっていた、というような可能性が疑われます。(この情報だけでは原因を断定はできませんがあたりはつけられます。)
上記のように、System ActivityのSchedule Plan Exploreを利用して、実行時間がおそかったりエラーのボトルネックとなっているスケジュールジョブステージを確認し、原因のあたりをつけることができます。
Discussion