Edited at

GAになったGCPのCloud IoT Coreでデータの受信から可視化まで一通りの流れを作るぞ!

More than 1 year has passed since last update.


祝!Cloud IoT Core正式リリース!

先日、GCPのCloud IoT Core正式リリースされました

ポジションとしては、AWSのAWS IoT Coreや、AzureのIoT Hubと同じようなところです。これでようやくGCPもIoTに本格参戦ですね!

ということで、今回はCloud IoT Coreにデータを送って可視化するところまで試してみました!


Cloud IoT Coreって何ができるの?

イメージとしては、デバイスとCloud Pub/Subの橋渡し役でしょうか。

デバイス側のインターフェースを用意しつつ、デバイスから受け取ったデータをCloud Pub/Subに受け流してくれます。


デバイス管理


  • 証明書を管理し、データ受信時に認証を行なう

  • デバイスを無効化する(通信をブロック)

  • デバイスにメッセージを通知する


プロトコルブリッジ


  • デバイスからIoT CoreにMQTT, HTTPでデータを送ると、Pub/Subに流してくれる


Quickstart

Quickstartでは、MQTTのサンプルスクリプトからIoT Coreにデータを送り、Pub/Subに入るところまで説明してくれています。簡単にできるのでここでは説明しません。

ただ、Quickstartの結果はなんだか味気ないので、IoTらしく可視化までやってみようと思います。

(この時点でIoT Core関係なくなってるってのは言いっこなし!)


DataStudioを目指す

Cloud IoT CoreのLPに、構成図があります。IoT Coreを起点としたIoTの標準的な構成のようです。

DataStudioを目指せばそれらしいのができるのではないか、ということでやってみました。



(Quickstartの通りに設定している前提で話を進めます。)


BigQueryのテーブルを作成

BigQueryのテーブルを作ります。

送るデータは、温度計を想定して以下のデータを含んでいることにします。

データ名
カラム名

モード

シリアル番号
serial_number
STRING
REQUIRED

温度
temperature
FLOAT
NULLABLE

時間
time
TIMESTAMP
REQUIRED


Cloud DataflowでCloud Pub/SubとBigQueryを繋ぐ

なんとPub/SubからBigQueryにデータを送るためのテンプレートが既に用意されています。

必須なのは以下の項目です。

項目名

ジョブ名
(なんでもいい)

Cloud Dataflow リージョン エンドポイント
us-central1

Cloud Dataflow テンプレート
PubSub to BigQuery

Cloud Pub/Sub input topic
projects/[projectID]/topics/[topic]

BigQuery output table

[project]:[dataset].[table_name]

一時的なロケーション
gs://[bucket_name]/tmp

ジョブを実行すれば、よしなにやってくれます。

BigQueryでデータが入っているか確認しましょう。


DataStudioでグラフを作る

新しいレポートを作成します。

データソースを作成します。

そしてグラフを追加すればグラフがでてきます!

ものすごく簡単ですね!!


ところがどっこい

プロットが日単位になっているのです。。

いろいろ探してみましたが、どうやら現状では時間単位までしかできないようです。

DataStudioはBIツールの位置付けらしいですが、IoTだとせめて分単位でみたいですよね。。


Kibanaを目指す

かくなる上は、Kibanaを目指そう!ということで、調べてみたらいい感じに行けそうな感じでした。

Pub/Sub -> Logstash -> Elasticsearch -> Kibanaという経路です。

LogstashにはCloud Pub/Subからデータを取得するプラグインもあるので、至れり尽くせりです。


Cloud Launcherから仮想マシンをデプロイ

Logstash/Elasticsearch/Kibana全部入りのやつがありました!これをデプロイします。

パラメーターは、全部デフォルトでも大丈夫です。

余談ですが、ケチってMachine Typeをg1-smallにするとLogstashを再起動できませんでした。。


Cloud API アクセス スコープ

立ち上がったインスタンスでCloud Pub/SubのAPIが使えるようにします。

停止しないと編集できないので、一旦停止させてから編集します。編集が完了したら起動させましょう。


SSHログインして各種設定

できたインスタンスにSSHログインして、各種設定を行います。

最初にbitnamiの設定を読み込みます。

$ sudo /opt/bitnami/use_elk 

次に、LogstashのCloud Pub/Subプラグインをインストールしましょう。

$ sudo /opt/bitnami/logstash/bin/logstash-plugin install logstash-input-google_pubsub

Validating logstash-input-google_pubsub
Installing logstash-input-google_pubsub
Installation successful

インストールが完了したら、Logstashの設定を編集します。

topic, subscriptionの名前はCloud IoT CoreのQuickstart通りに勧めていれば、my-device-events, my-subscriptionになります。projects/[project ID]/topics/projects/[project ID]/subscriptionsの部分は不要です。

また、デフォルトだと受け付けるデータ量がかなり絞られているので、ガンガン送りたい場合はmax_messagesを調整しましょう。


/opt/bitnami/logstash/conf/logstash.conf

input

{
google_pubsub {
project_id => "[project ID]"
topic => "[topic]"
subscription => "[subscription]"
codec => "json"
# max_messages => 5
}
}

filter {
fingerprint {
source => "message"
target => "generated_id"
method => "UUID"
}
}

output
{

elasticsearch
{
hosts => ["127.0.0.1:9200"]
document_id => "%{generated_id}"
index => "logstash-%{+YYYY.MM.dd}"
}
}


最後にLogstashを再起動すれば完了です。

$ sudo /opt/bitnami/ctlscript.sh restart logstash

Unmonitored logstash
/opt/bitnami/logstash/scripts/ctl.sh : logstash stopped
/opt/bitnami/logstash/scripts/ctl.sh : logstash started
Monitored logstash


Kibanaの設定

Kibanaへのログイン情報は、Deployment Managerで確認できます。

Admin URLにアクセスして、ユーザー名、パスワードを入力してログインしましょう。

ログイン後は、インデックスパターンを作成します。

インデックスパターンを選択して、時刻を表すフィールドを指定すればOKです。

あとは、Visualizeメニューから、折れ線グラフを選んで、X軸Y軸の設定をしてやれば、グラフがでてきます!

やったね!!


データの調達

今回、mockmockというサービスからデータを送信しました。

IoT系のシステムはちょっと試すだけでもデータが必要で、その調達がなかなか面倒です。デバイスを用意するのも別の知識がいるし時間もかかります。かといって、スクリプトを書くのも地味に大変。。そして開発中のデバッグ、テスト、負荷試験などになるとなおさらです。

そんなときに役に立つのがこのmockmock。IoTのテスト用に仮想デバイスを提供し、指定したエンドポイントに疑似データを送ります。デバイスなしで簡単にIoTシステムのテストが可能になります。

Cloud IoT Coreがβ版の頃からデータの送信先として対応しており、正式リリースを伝える公式Blogでも紹介された、由緒正しきサービスです(๑•̀ㅂ•́)و ドキュメントもちゃんとあります!


まとめ

Cloud IoT Coreによって、デバイスからのデータを簡単にBigQueryに流し込むことができるようになりました。

もともとデータ分析が得意なGCPがIoTに本格参戦することによって、これからのIoT業界がどうなっていくのか楽しみです。