minato128 blog

minato128の公開メモ帳です。

膨大なログを低頻度だけど検索したいみたいな需要のソリューションについて考える

※特に答えはないので注意

例えば、監査ログのような類のもの。

  • 日次で少なくとも n GB 収集する
  • クエリを書いてraw logを見たい
    • 頻度は月に1回あるかないか

コスパを考えるとファイルを圧縮して Cloud Storage に放り込んでおいて、好きなときにクエリ毎課金で参照する系のソリューションで、 BigQuery や Amazon Athena になる。 Azure だとそれにあたるものがなく*1代わりに Azure Databricks (Manged Spark) を使うとよいらしいとのことだったので少し触ってみた。

azure.microsoft.com

  • 課金はVM+DBU(VMクラスタ種類毎の追加料金)
    • クラスタを立ち上げているときだけ、分単位で課金
  • notebook でクエリが書ける
    • 基本的に Azure blob に放り込んでおいてアタッチすればクエリできる
    • サンプルの400MB程度のcsvでもそこそこ速く結果が返ってくる
    • 実際のログ量で現実的な速度でクエリが返ってくるかどうかはわからない(クラスタのノード数次第)
  • dashboard で軽く可視化もできる
  • Streamを扱ったりアグリゲートして何かをすることもできる

結論として、UXや費用的には問題なさそう。一方で、別にデータ分析や複雑な変換処理がしたいわけではないので、こんなに高機能である必要もないし関心事も増えるので、要件に対してはオーバーな感はある。

Cloud Storage に入れておくログは、圧縮しつつクエリも速いため Parquet がよさそう。 列指向ファイルフォーマットの仕組みはこの記事がわかりやすかった。(概要だけ引用)

カラムナフォーマットとは、データベースの分析用途に利用されるファイルフォーマットの種類の一つです。大量のデータを扱う際に効率的に圧縮してストレージコストを下げたり、計算時に必要なデータだけを取り出して計算コストを小さくできる設計がされています。

engineer.retty.me

ちなみに BigQuery や Athena も Parquet サポートしているのであとで引っ越すこともできる。

*1:Buildでチラ見せされたAthena風の機能が年末リリースされるという噂があるがどうなんだろう?