🦆

DuckDB/DuckDB-Wasm を利用した低コストでの可視化

2024/10/01に公開

前提

  • ミドルウェアのログ可視化
  • ログサイズは全体で 1 TB 未満
  • ログは jsonl で出力される

まとめ

  • 非同期での可視化
  • オフラインでの可視化
  • 低コスト

DuckDB とは

こちらをどうぞ。

DuckDB雑紹介(1.1対応版)@DuckDB座談会 - Speaker Deck

非同期の可視化

DuckDB を利用する事で、HTTP で可視化要求リクエストを受け取って S3 または S3 互換オブジェクトストレージ (以降 S3) から jsonl.gz ログ取得し Parquet ファイルを生成し、S3 にアップロードし、署名付き URL を発行して返すことができます。

クライアントは Parquet ファイルをダウンロードし OPFS に保存、その後は通信することなくオフラインで好き放題ブラウザ上で解析することができます。

そもそもダッシュボードの可視化を求められるのは、なにか問題があったときであって、それ以外では必要とされることは基本的にありません

S3 の jsonl.gz や Parquet ファイルの有効期限を設定しておくことで、一定期間で削除することができます。

オフラインでの可視化

この仕組みを使う事で OPFS に保存された Parquet ファイルはいつでもオフラインで確認することができるようになります。毎回ダウンロードも発生しません。

OPFS のファイルはクライアント側の判断で好きに削除することができます。

クライアントリソース

この仕組みを使う事で集計や解析に必要なリソースをクライアント側に持たせることができます。クライアント側で Parquet で数十メガ程度のログを解析はとても軽く、負担になる範囲ではありません。

コスト

上記の構成でかかる費用は S3 のストレージ費用と、Parquet ファイルの転送量だけです。要求の処理は集約だけなのでほぼ CPU リソースを使うことはありません。

オフライン解析

DuckDB-Wasm をうまく使えば、ミドルウェアが出力した json.gz ログをブラウザに D&D で読み込ませて、それを解析することもできるようになります。

ブラウザで利用できるオフライン解析ツールが実現できるようになります。

Discussion