Azure Stream Analytics は、リアルタイムでスケーラビリティの高い、フルマネージドのストリーム分析サービスです。1 秒あたり数百万件のイベントを処理し、ほぼリアルタイムで集計と計算を実行することができます。
以前から Stream Analytics と Azure IoT Hub の連携がうまく機能しており、IoT デバイスから IoT ハブに送られるデータから簡単に分析情報を得ることができます。IoT Hub を使い始めるために必要なことは、IoT Hub のデータ ストリームの入力の作成に関する記事の説明に従って、入力を設定することだけです。今日では多くのお客様がこの機能を自社の IoT ソリューションに取り入れて成果を上げていらっしゃいますが、一方で、IoT ハブでの操作の状態をリアルタイムで監視する方法についてお問い合わせをいただくこともよくあります。そこで本日は、IoT Hub の操作の監視のエンドポイントに接続することで、こうした監視が可能になったことを発表いたします。
IoT Hub の操作の監視では、IoT ハブに対する操作の状態をリアルタイムで監視することができます。IoT ハブは複数のカテゴリの操作にわたってイベントを追跡するので、1 つ以上のカテゴリから IoT ハブのエンドポイントにイベントを送信して処理するように選択することができます。データを監視してエラーがないか確認したり、データ パターンに基づいてより複雑な処理をセットアップしたりできます。
IoT ハブは、次の 5 つのカテゴリのイベントを監視します。
- デバイス ID の操作
- デバイス テレメトリ
- cloud-to-device コマンド
- 接続
- ファイルのアップロード
IoT Hub の操作の監視について詳しくは、操作の監視の概要に関する記事をご覧ください。
お客様からのお問い合わせが多いのは、デバイスが IoT ハブから切断され、たとえば 1 分間再接続されなかった場合、そのことをほぼリアルタイムで知る方法についてです。そのような状態が発生したとき、ほぼリアルタイムで電子メールを送信したりワークフローを開始したいと思うでしょう。デバイスによっては、これらのアラートを一刻も早く送信し、問題になる前にメンテナンスを行うことが非常に重要になります。
Stream Analytics ならこれを簡単に行えることをお見せするために、これから IoT Hub の操作の監視機能を使って "接続" のイベント監視を設定してみましょう。
上の図からわかるように、デバイスが接続されたときと切断されたときにログを開始するイベントを有効にします。これを開始するには、次に示すように [接続] スイッチを [詳細] に切り替えます。
設定が完了すると、デバイスが IoT ハブに接続されたときに、イベントのキャプチャが開始されます。このことを検証するには、Service Bus エクスプローラーなどのツールを使ってこれを [イベント ハブ互換名] / [イベント ハブ互換エンドポイント] に接続し、メッセージを確認します。
収集されるサンプル メッセージは次のようになります。
{ "durationMs": 1234, "authType": "{"scope":"hub","type":"sas","issuer":"iothub"}", "protocol":"Amqp", "time":"2016-09-13T20:00Z", "operationName": "deviceConnect", "category":"Connections", "level":"Error", "statusCode":4XX, "statusType":4XX001, "statusDescription":"MessageDescription", "deviceId": "device-ID" }
同様に、デバイスが IoT ハブから切断されると、operationName == deviceDisconnect でイベントがキャプチャされます。
これで、これらのメッセージが IoT ハブに着信することを確認できました。これらを Stream Analytics ジョブで使用するのは簡単です。
1.新しい Stream Analytics ジョブを作成します。
新しい Stream Analytics ジョブの作成手順については、Stream Analytics のデータ分析処理ジョブを作成する方法に関する記事をご覧ください。
2.お使いの IoT ハブをポイントするデータ ストリーム入力を作成します。[エンドポイント] では、[メッセージ] ではなく、必ず [操作の監視] を選択してください。
4.次のクエリを作成します。
WITH Disconnected AS ( SELECT * FROM input TIMESTAMP BY [Time] WHERE OperationName = 'deviceDisconnect' AND Category = 'Connections' ), Connected AS ( SELECT * FROM input TIMESTAMP BY [Time] WHERE OperationName = 'deviceConnect' AND Category = 'Connections' ) SELECT Disconnected.DeviceId, Disconnected.Time INTO Output FROM Disconnected LEFT JOIN Connected ON DATEDIFF(second, Disconnected, Connected) BETWEEN 0 AND 180 AND Connected.deviceId = Disconnected.deviceId WHERE Connected.DeviceId IS NULL
このクエリには 2 つの手順があります。最初の手順ですべての切断イベントを取得し、2 番目の手順ですべての接続イベントを取得します。
次に、これら 2 つのストリームを Stream Analytics の DATEDIFF 操作で LEFT JOIN を使って統合し、一致したレコードをすべて除外します。これにより、切断イベントを持つデバイスが判明しますが、180 秒以内の対応する接続イベントはわかりません。
このジョブの出力を、サポート対象の任意の Stream Analytics 出力 (Service Bus キューなど) に送ることができるようになりました。出力が Service Bus キューに送られるように設定したら、キューにメッセージが発行されるとすぐに実行される Azure 関数、あるいは Azure ロジック アプリであっても簡単に作成することができます。
このように、SQL に似たとてもシンプルなクエリを作成するだけで、IoT Hub の操作の監視のエンドポイントからリアルタイムのアップデートを受け取ることができます。
時々、このような複雑なシナリオのコーディングが長時間におよぶ大変な作業だった古き良き時代に戻りたいと思うことが....いや、ありません!Azure の PaaS サービスとサーバーレス コンピューティング機能の組み合わせはかつてないほど簡単に使えるうえにとても強力なので、私自身は付加価値の構築に専念することができるのです。
関連サービス
Microsoft Azure IoT Hub - 何百万台もの IoT 資産を接続、監視、管理
Microsoft Azure Event Hubs – Web サイト、アプリ、デバイスからデータを取り込む
Microsoft Azure Service Bus - プライベート クラウド環境およびパブリック クラウド環境でアプリとデバイスの接続を維持
Microsoft Azure Logic Apps - 強力な統合ソリューションを素早く作成
Microsoft Azure Functions - サーバーレス コードでイベントを処理
次のステップ
この IoT Hubs との密接な統合により、お客様のビジネスや IoT アプリケーションにとって、ワクワクするような新しい機能が数多く生み出されていくことを期待しています。
今後サービスに追加して欲しい機能などのご要望がございましたら、User Voice ページからフィードバックをお寄せください。
Microsoft Azure や Stream Analytics を始めてご利用になるお客様は、Azure の無料使用版アカウントにサインアップして、最初の Stream Analytics ジョブを作成していただけます。
サポートが必要な場合やご不明な点がある場合は、MSDN または Stackoverflow フォーラムを通じて、または電子メールで直接プロダクト チームにお問い合わせください。