こんにちは!ソリューションアーキテクトの今井(ニックネーム factory)です。
IoTの代表的なユースケースのひとつに「データの可視化」というものがあります。具体的な例としてはセンサーのデータを時系列に可視化してトレンドを把握するのに利用したり、移動体の位置情報を地図上にヒートマップ化しやはりトレンドを把握するのに利用したり、というイメージです。このポストではSORACOMを使ったデータ可視化の選択肢について議論していきたいと思います。
まず大事な前提として、本記事での「可視化」は、OpenSearch DashboardsやGrafanaなど、コードを書かずにエンドユーザーが自由にデータを可視化ができるツールについて論じるものとします。なぜなら、特に分析フェーズにおいては探索的な分析を行うために分析者自身が可視化のトライアンドエラーをできるべきだからです。
よって、ここではAmazon DynamoDBやAmazon RDSにデータを入れ、ReactでオリジナルなUIを作りこむお話は対象外としています。(それが悪いというわけではもちろんなく、ここでは目的から外れるからです)
パターン1: SORACOM Lagoonによる可視化
SORACOMプラットフォームにはSORACOM Harvestというストレージサービスと、SORACOM Lagoonというデータ可視化サービスがあり、これらを使うと外部のクラウドサービスなどを一切用意することなく、SORACOMのみでデータの可視化を開始できます。
こちらについてはさまざまなブログやリソース(例: SORACOM IoT レシピ:IoT で冷蔵庫・冷凍庫の温度監視)がたくさん公開されていますのでこの記事では詳細は割愛したいと思います。
パターン2: Amazon OpenSearch Serviceによる可視化
次に紹介するのはAmazon OpenSearch Service(以下、OpenSearch Service)を活用するパターンです。
Amazon OpenSearch Serviceは、OpenSearchというオープンソースの検索・ダッシュボードツールのマネージドサービス版です。サービス詳細はこちらをご覧いただくとして、このサービスにはOpenSearch Dashboards(Elasticsearchで言うKibana)という高機能な可視化ツールがバンドルされていますので、OpenSearch Serviceにデータを入れるだけで簡単に可視化を始めることができます。
OpenSearch ServiceはVPC内にデプロイするパターンと、そうではないパターンを選択できます。後者の構成だと特にVPC内にデプロイする必要がない(OpenSearch Serviceにアクセスするのはインターネットからくる閲覧ユーザーと、データを投入するLambda)ので、VPC自体が不要であり、以下の構成図のようにマネージドサービス(サーバーやネットワークの運用が不要)で構築できるのが特徴です。なお、OpenSearch Dashboardsへのアクセスは、認証サービスであるAmazon CognitoのUser Pool機能を使うことでユーザー管理が可能です。
OpenSearch自体の特徴は、データのスキーマを事前に定義しておく必要のないこと、時系列のデータを取り扱うのに長けているという点が挙げられます。つまり、とりあえずタイムスタンプを含んだJSONのデータを投げ込んでおけば可視化が始められるのです。また、最適化をあとから行いやすいという点も非常にGoodです。ひとまずデータを投げ込みはじめておいて、あとから最適化によって性能をあげていくことができます。このあたりの仕組みはIoTと時系列データとElasticsearchにて少し触れています。
パターン3: GrafanaとOpenSearchによる可視化
Grafana(グラファナ)はオープンソースのデータ可視化ツールで、高機能かつ柔軟な拡張性があります。
Grafana自体にはストレージ機能は無いため、別に準備が必要です。しかし各種データソースへのアクセスがあったり、また、可視化の手法を自分で実装して追加したり、マーケットプレイスからインストールでき、高度な可視化が可能です。なお、Elasticsearchへの接続プラグインがデフォルトでバンドルされていますので、これを利用することによってOpenSearchに接続することができるようになっています。(ちなみにSORACOM LagoonでもGrafanaを活用しています!)
便利なGrafanaですが、構成は少し複雑になってきます。以下のようにVPC内にOpenSearch Serviceをデプロイし、Grafanaからのアクセスをすることになります。このように、Grafanaを構成するためにAurora、ECS、ELBを利用する必要がでてくるあたりが若干面倒ですよね。
ということでCDKスタックを用意しました!CDKスタックには、VPC内へ安全にアクセスするためのSOCKSプロキシホストも含んでいますので、これをつかってOpenSearch DashboardsにアクセスしてIndexのメンテナンス等を行うことも可能なようになっています。
同じくGrafanaを活用しているSORACOM Lagoonとの使い分けとしては、IoT特有のデータや表現力が必要であればLagoonが良いでしょう。また、前述のプラグインによる拡張をしたい場合や、データソースとしてのOpenSearchが提供してくれるaggregation系のクエリ(例えばデバイスを群として捉えて値の平均を取るなど)を活用したい場合は、Grafanaをご利用いただくのが良さそうです。
Lagoonで可能なIoTデータの扱い・表現力についてはこちらのスライドもご覧ください。
パターン4: GrafanaとAmazon Timestreamによる可視化
Amazon OpenSearch Serviceはすぐに始められるメリットがあります。一方で、例えばデータのリテンション(整頓)やクラスタのワークロード調整など、ある程度メンテナンスが必要となります。特に扱うデータ量や分析のトラフィックが増えてくるとワークロードやストレージの残容量、特定のホストに負荷が偏っていないか等を注意深く監視してやる必要が出てくるでしょう。
Amazon Timestreamは完全なマネージド型時系列データベースのサービスであり、データのリテンションなども設定レベルで制御が可能です(個人的には最長99年までのデータ保持が設定できるところがThink Bigでとても好きです) 。
構成図的にはあまり前と変わりませんが、ストレージ部分にOpenSearch Serviceではなく、Amazon Timestreamを利用する形です(このアーキテクチャではAWS Lambda → Amazon Timestreamと入れていますが、AWS IoT Core → Amazon Timestreamという流れも構成可能です。つまり、SORACOM BeamやSORACOM Funnelでのデータ投入も可能ということです)
Amazon Timestreamのもうひとつの特徴として時系列データを取り扱うための強力なSQLと関数群をサポートしていることがあげられます。Amazon Timestream Pluginを組み合わせれば以下の画像のようなイメージで、Grafana上でSQLによるクエリが可能です。Grafana(や、OpenSearch Dashboardなど)は十分に柔軟なデータ探索性を持っていますが、どうしてもSQL書きたくなることもありますよね?そういったときにこの機能が役に立ってくれるでしょう!
Grafanaのマネージドサービス「Amazon Managed Grafana」
Grafanaを使うならAMG (Amazon Managed Grafana)を使うという選択肢もあります。
ここまで述べてきたGrafanaの構成図を見てもらうと、それなりに複雑ですよね。あれがまるっとマネージドになるのはとても大きなメリットがあると思います。一方、このブログを書いている2022/5時点においてはユーザーのログイン管理がSSO必須(ADもしくはAmazon SSO)だったり、任意のプラグインのインストールができないなどの制約もあります。このあたりはご自身のユースケースに合わせて選択をしていただければと思います。
まとめ
いかがでしたでしょうか。このポストではデバイスから送信されるデータを可視化するためのクラウド側のスタックを徒然と列挙してきました。(他にもいろいろな方法があると思いますが、)これまで見てきたお客様の事例をまとめてみるとだいたいこんな感じに集約できるかなという感じです。
選び方を私なりに整理してみると、こうなります。
- SORACOM Harvest + SORACOM Lagoon
AWS等外部のリソースを用意せずに、まずはデータの可視化をしたい。データ自体の価値検証をしたいならここから。ただしお手軽だからといって低機能なわけではなく、マルチテナントな運用も可能なので、これを使って商用ダッシュボードの運用をされてるお客様もいらっしゃいます。 - OpenSearch Dashboard
OpenSearch単体ではマルチテナントな運用はできないという考慮点がありますが、時系列データにAggregationを組み合わせた分析ができるので、自社システムのモニタリングダッシュボードを立ち上げたい、簡単に!もちろん高機能に!といったケースにハマります。 - Openseach + Grafana
OpenSearchの柔軟性とGrafanaの機能的拡張性とマルチテナント性を組み合わた、もっとも自由度の高い選択肢と言えるかなと思います。 - Amazon Timestream + Grafana
データソースにAmazon Timestreamを選択することでその部分が完全マネージドでとてもスケーラブルになる(OpenSearchも十分にスケーラブルですが)一方、投入するデータのスキーマを固定する必要が出てきます。ひとつのアプローチとして分析や可視化の用途がある程度定まってきたらこの構成にしていくというのもありでしょう。
このポストではあくまで「IoTデバイスから送信されてきたデータを可視化/分析」するためのアーキテクチャにフォーカスして議論をしてきましたが、実際にはマスタデータなどの外部リソースを組み合わせた分析も必要になることがあるでしょう。こういったときには更にAmazon RedshiftでDWHを構成したり(Redshiftのような列型DBに連続的かつ高速にデータを書き込み続けることには様々工夫が必要になります。これはまたぜひ別のポストで議論したいなと思います)、Amazon QuickSightやTableauなどのBIツールを使ったデータソースを跨いだ分析などが有用な選択肢になってきますが、これもまた別のポストにて議論できればと思います。
IoTデバイスのデータを可視化するための仕組みを作るときにはぜひこのブログを思い出して参考にしていただければ幸いです!
― ソラコム今井 (factory)