はじめに
FIWARE(Orion Context Broker)は、実世界の「現在の状態(Context)」を管理することには長けていますが、標準では過去の履歴を保持しません。
「昨日と比較してどう変化したか」「過去1週間の推移を可視化したい」といったニーズに応えるため、QuantumLeap を使用して時系列データを自動蓄積する構成を構築しました。そのナレッジを共有します。
技術スタック
- Orion Context Broker: データのハブ(最新状態を保持)。
- QuantumLeap: FIWARE専用の時系列データ永続化用サービス。
- CrateDB: QuantumLeapがバックエンドで使用する、時系列データに最適化された分散SQLデータベース。
システム構成のイメージ
FIWAREの Subscription(購読) 機能を利用し、プッシュ型でデータを蓄積します。
- Orion: エンティティの属性が更新される。
- Subscription: 更新を検知し、QuantumLeapの通知エンドポイントへHTTP Postを送る。
- QuantumLeap: 通知されたNGSI形式のデータを整形し、CrateDBへインサートする。
実装の手順
1. QuantumLeapとCrateDBの準備
Docker Composeを使用する場合、以下のようなイメージ構成で連携させます。QuantumLeapの環境変数 CRATEDB_URL で接続先を指定するのがポイントです。
2. Subscription(購読)の登録
Orionに対して、「特定のデータが更新されたらQuantumLeapに通知する」設定を投入します。
curl -iX POST \
'http://localhost:1026/v2/subscriptions' \
-H 'Content-Type: application/json' \
-H 'fiware-service: openiot' \
-d '{
"description": "Notify QuantumLeap of count changes",
"subject": {
"entities": [
{
"idPattern": ".*",
"type": "Device"
}
],
"condition": {
"attrs": [ "count" ]
}
},
"notification": {
"http": {
"url": "http://quantumleap:8668/v2/notify"
},
"attrs": [ "count" ],
"metadata": ["dateCreated", "dateModified"]
}
}'
3. データの蓄積と参照
蓄積されたデータは、Orionを介さずQuantumLeapのAPIから直接取得できます。特定期間の絞り込みや、最新のN件といった取得も標準機能でサポートされています。
# 特定のエンティティ(Device01)の履歴を取得
curl -X GET 'http://localhost:8668/v1/entities/Device01' \
-H 'fiware-service: openiot'
この構成のメリット
- 実装コストの低さ: 自分でデータベース保存用のバッチやプログラムを書く必要がなく、FIWAREの標準機能の組み合わせだけで完結します。
- NGSI準拠: FIWAREのデータモデルを維持したまま蓄積できるため、他のFIWAREコンポーネントとの親和性が非常に高いです。
- スケーラビリティ: 大規模な時系列データの処理に特化したCrateDBを利用するため、将来的なデバイス増設にも対応しやすい構成です。
まとめ
最新データのみを扱うFIWAREにおいて、過去データの保持は分析や予測(DX活用)への第一歩です。QuantumLeapを組み合わせることで、最小限の手間で強力な時系列データ基盤を構築することができます。