
Digdag + Embulk を使った売上集計と報告
-
2021年2月16日
こんにちは。ビリングチームの K です。
ビリングチームではココネ共通の決済システムを提供していると共に、財務経理に報告するための集計システムも担当しています。
今回はこの集計システムについて紹介します。
概要
以前は各アプリの売上は、Java のバッチシステムにて集計し MariaDB に格納していました。
ビリングの売上参照システムから MariaDB に集計した値を確認し、担当者がエクセルで報告書を作成します。この報告書を財務経理チームに提出して月次売上報告作業は完了となります。
ある日、提出した報告書を見ながら Google スプレッドシートに値を写して作業している経理チームの担当者を見ました。これだったら最初から Google スプレッドシートに出力した方が良いのではないか?ということで報告書をエクセルで渡すのではなく Google スプレッドシートに直接出力するように変更しました。
構成
- Docker コンテナに Digdag + Embulk 環境を構築
- Digdag はシングル構成
- DB は PostgreSQL
- Digdag + Embulk + PostgreSQLが同じコンテナ
docker-compose でコンテナを立ち上げる
docker-compose.yml の設定は以下のようになっております。Digdag と Embulk は Alpine で軽量化した image を作っています。
version: "3.1" services: digdag-embulk: image: digdag-embulk:alpine environment: - "TZ=Japan" - IS_RELEASE_DIGDAG=True ports: - "65432:65432" volumes: - /tmp:/tmp - /var/run/docker.sock:/var/run/docker.sock extra_hosts: - "xxxxxxx.xxxxxx:xxx.xxx.xxx.xxx" postgresql: image: postgres:9 environment: - POSTGRES_USER=あなたのユーザー - POSTGRES_PASSWORD=あなたのパスワード - POSTGRES_DB=あなたのDB - "TZ=Japan" volumes: - data:/var/lib/postgresql/data command: - postgres - -c - superuser_reserved_connections=30 - -c - max_connections=1000 volumes: data:
Digdag の管理画面
Digdag の管理画面です。Workflows に登録されたタスクが順番に実行されている様子が以下となります。今どのタスクが実行中なのか(もしくは失敗したか)可視化されるので非常に便利です。
Embulk でデータを集計しているプロセスを可視化
+APPEND _parallel: true
また、並列実行させることも可能です。_parallel の設定を ON にすると同時に実行します。依存関係のない処理は同時に実行した方が全体的に早く終わらせる事ができます。
ただし、ひとつ注意なのが Embulk の同時実行数を大きくしすぎると各所に負荷がかかりすぎ不具合を生じることもありますので、マシンスペック・環境を見ながら最適な数を調整することは必要となります。
Google Apps Script で BigQuery からのデータを読み込む
Digdag + Embulk でアップロードした BiqQuery のデータを GAS を用いて Select 、加工しながらスプレッドシートに各アプリのタイトルごとに表示していきます。
完了したらこのスプレッドシートを財務経理チームに共有すれば月次売上報告はおしまいです。
現在は一度、人間が BigQuery のデータを確認した後、GAS 上のメニューから表示実行していますが、将来的にはトリガーにしてこの処理も自動にしてもよいかもしれません。
最後に
Java でのバッチシステムももちろん悪くはないのですが、Embulk にすることによって簡単に大規模なデータを BigQuery に移す事ができました。また、Digdag でタスクのスケジュールを管理するとともに失敗時のリトライ制御、タスク完了時に成功失敗を Slack で通知し、運用に役立てています。
今後はさらなる規模拡大を見越して Digdag をサーバ/クライアント構成を試していきたいです。