祝!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 |
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
を調整しましょう。
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業界がどうなっていくのか楽しみです。