Help us understand the problem. What is going on with this article?

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を目指せばそれらしいのができるのではないか、ということでやってみました。
_スクリーンショット 2018-03-26 23.32.09.png
(Quickstartの通りに設定している前提で話を進めます。)

BigQueryのテーブルを作成

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

データ名 カラム名 モード
シリアル番号 serial_number STRING REQUIRED
温度 temperature FLOAT NULLABLE
時間 time TIMESTAMP REQUIRED

_スクリーンショット 2018-03-26 23.38.58.png

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

_スクリーンショット 2018-03-26 23.45.59.png

ジョブを実行すれば、よしなにやってくれます。
_スクリーンショット 2018-03-27 0.07.03.png

BigQueryでデータが入っているか確認しましょう。
_スクリーンショット 2018-03-27 0.05.39.png

DataStudioでグラフを作る

新しいレポートを作成します。
_スクリーンショット 2018-03-26 23.59.19.png

データソースを作成します。
_スクリーンショット 2018-03-27 0.00.47.png

_スクリーンショット 2018-03-27 0.01.58.png

そしてグラフを追加すればグラフがでてきます!
ものすごく簡単ですね!!
_スクリーンショット 2018-03-27 0.03.34.png

ところがどっこい

プロットが日単位になっているのです。。
_スクリーンショット 2018-03-27 0.09.17.png

いろいろ探してみましたが、どうやら現状では時間単位までしかできないようです。
DataStudioはBIツールの位置付けらしいですが、IoTだとせめて分単位でみたいですよね。。
_スクリーンショット 2018-03-27 0.11.30.png

Kibanaを目指す

かくなる上は、Kibanaを目指そう!ということで、調べてみたらいい感じに行けそうな感じでした。
Pub/Sub -> Logstash -> Elasticsearch -> Kibanaという経路です。
LogstashにはCloud Pub/Subからデータを取得するプラグインもあるので、至れり尽くせりです。
_スクリーンショット 2018-03-27 0.22.04.png

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

Logstash/Elasticsearch/Kibana全部入りのやつがありました!これをデプロイします。
_スクリーンショット 2018-03-27 0.40.36.png

パラメーターは、全部デフォルトでも大丈夫です。
余談ですが、ケチってMachine Typeをg1-smallにするとLogstashを再起動できませんでした。。

Cloud API アクセス スコープ

立ち上がったインスタンスでCloud Pub/SubのAPIが使えるようにします。
停止しないと編集できないので、一旦停止させてから編集します。編集が完了したら起動させましょう。
_スクリーンショット 2018-03-27 10.34.21.png

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です。
_スクリーンショット 2018-03-27 10.48.21.png

_スクリーンショット 2018-03-27 10.49.22.png

あとは、Visualizeメニューから、折れ線グラフを選んで、X軸Y軸の設定をしてやれば、グラフがでてきます!
やったね!!
_スクリーンショット 2018-03-27 10.46.05.png

データの調達

今回、mockmockというサービスからデータを送信しました。
_スクリーンショット 2018-03-27 9.25.02.png

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

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

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

まとめ

Cloud IoT Coreによって、デバイスからのデータを簡単にBigQueryに流し込むことができるようになりました。
もともとデータ分析が得意なGCPがIoTに本格参戦することによって、これからのIoT業界がどうなっていくのか楽しみです。

Kta-M
fusic
個性をかき集めて、驚きの角度から世の中をアップデートしつづける。
https://fusic.co.jp/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした