asopi tech
asopi techIndie Developer

Time-Series Engine

Alopex Skulk

サーバーのいらない時系列エンジン

時系列データベースを使うために、サーバーを立てて運用する必要はありません。Skulkはライブラリとしてアプリケーションに組み込みます。運用対象は増えず、配布するのはこれまでどおり1つのバイナリだけ。エッジや組み込み機器にもそのまま載ります。

アプリケーションに組み込んで使う時系列エンジン。メトリクスのためにサーバーを運用しなくてよくなる。

v0.3.0OSS
バイナリサイズ
3.7 MB
取り込みプロトコル
3

Key points

  • 運用するプロセスが増えない
  • 同梱してもアプリが膨らまない
  • 貯めたParquetは他のツールからそのまま読める
observabilitydatabaserust

Challenge

組み込みからクラスタまで使える時系列DBがない

エッジの機器に載る時系列DBと、クラスタで運用する時系列DBは別物です。規模が変わるたびに製品を乗り換え、データを移し、クエリを書き直すことになります。Skulkが挑むのは、組み込みからクラスタまでを1つのエンジンで通すことです。

  • エッジや組み込みで使える時系列DBは、選択肢そのものが少ない
  • 単一ノードで始めた製品が、そのままクラスタにはならない
  • 規模を変えるたびに、データ移行とクエリの書き直しが発生する

Skulkはアプリケーションに組み込んで使います。サーバーもデーモンも要りません。クエリエンジンを内蔵せずArrowとParquetだけを使うので、同梱してもアプリが膨らまず、貯めたParquetは他のツールからそのまま読めます。分散はAlopex DBと共有するクラスタ基盤の上に載せるので、規模が変わっても同じエンジンのままです。

クエリのSQLとPromQLのパーサーはNimで書きます。Alopex DBと同じ実装です。ASTを大量に作る処理ではNimがRustより46%速いという検証結果があります(詳細)。

Skulkが扱うのは時系列です。イベントログにはTrail、両方をダッシュボードごとまとめたものがAlopex OTelです。

組み込みから分散まで同じエンジンで通す

Skulkは単一プロセスに組み込むライブラリです。サーバーもデーモンも要りません。規模が変わったときは、Alopex DBと共有するクラスタ基盤Chirpsの上に分散機能が載ります。

  • アプリケーションのバイナリに同梱できる3.7MB
  • Arrow + Parquetで、書いたデータはそのまま他ツールから読める
  • 取り込みプロトコルが3種類あり、既存のエージェントをそのまま向けられる
必要なプロセス
1
圧縮改善(繰り返し値)
7.1×

Capabilities

3つの使い方

同じエンジンのまま、規模に応じて使い方を変えられます。

アプリケーションに組み込む

エッジ機器、単一プロセスのアプリケーション向け

  • ライブラリとしてリンクし、サーバーは立てない
  • アプリケーションのバイナリに同梱して配布できる
  • 貯めたParquetはその場で他のツールから読める

単一ノードで動かす

開発環境、小規模な監視向け

  • HTTPサーバーとして複数のプロセスから書き込む
  • 既存のエージェントを向けるだけで取り込める
  • SQLとPromQLで問い合わせる

クラスタに広げる

冗長性が要る本番ワークロード向け

  • Alopex DBと共有するChirpsの上で分散する
  • 組み込みで始めた構成をそのまま広げられる
  • 規模が変わってもクエリの書き直しが要らない

Features

主要機能

時系列を貯めて読むために備えている機能。

3つの取り込みプロトコル

InfluxDB Line Protocol、Prometheus Remote Write、JSONに対応。既存のエージェントを向けるだけで取り込めます。

時間パーティションとTTL

期間で区切って保存し、期限を過ぎたものは自動で落とします。保持期間の管理に別の仕組みが要りません。

高圧縮の列指向保存

v0.2比で、繰り返しの多い値は7.1倍、変動の大きいゲージは1.6倍小さくなりました。同じディスクでより長く保持できます。

外部ツールから読めるParquet

貯めたデータはParquetのまま置かれます。分析のためにエクスポートする必要がありません。

SQLとPromQLのクエリ

Alopex DBと同じNim実装のパーサーを共有します。ASTを大量に作る処理ではNimがRustより46%高速でした。

Chirps上での分散

分散とレプリケーションは、Alopex DBと共有するクラスタ基盤Chirpsの上に載せます。組み込みで始めた構成をそのまま広げられます。

Tech Stack

技術スタック

Alopexファミリーと部品を共有しています。

ストレージ

Apache Arrow + Apache Parquet

Arrow: 列指向のインメモリ表現、ゼロコピーでの受け渡しParquet: 列指向のファイルフォーマットWALとアトミックなファイル公開

クエリ

Nim実装のパーサー

SQLパーサーはAlopex DBのNim実装を共有PromQLパーサーもNimで実装ビルド済みの静的ライブラリを同梱してリリース

クラスタ

Chirps: SWIM + QUIC

Alopex DBと共有するクラスタ基盤プロセス内とネットワークを透過的に扱う

Status

開発状況

v0.3.0を2026年7月28日にリリースし、crates.ioで公開しています。v0.3.1では取り込み性能の最適化を進めています。クエリ実行はv0.4、ダウンサンプリングはv0.5、HTTPサーバーはv0.6、分散とレプリケーションはv0.8以降です。v0.4のクエリ層では、SQLパーサーにAlopex DBのNim実装を共有し、PromQLパーサーもNimで実装します。

公開リソース

最新の資料・コード・コミュニティ導線をまとめています。

Get Involved

使ってみて、詰まったところを教えてください

取り込みプロトコルや保存の挙動で困った点があれば、Issueに書いてください。