Draco

Draco の健全性チェック

Webブラウザで https://draco.example.com を開いて、Draco GUI にアクセスします。

Draco GUI にログイン

Draco GU にログインするために、Webブラウザで https://draco.example.com/nifi を開きます。

次に、Keyrock サインイン・ページにリダイレクトされます。

Draco GUI にログインすると、次のようなページが表示されます:

アクセス・ポリシを追加

コンポーネント・ツールバーの項目を選択できるようにするには、いくつかのアクセス・ポリシを追加する 必要があります。Operate ウィンドウ内の Access Policies ボタンをクリックして、Access Policies ページを開きます。

view the componentmodify the component および operate the component で新しいポリシを作成します。

管理者の電子メールをユーザとして新しいポリシに追加します。

アクセス・ポリシを追加すると、コンポーネント・ツールバーの項目を選択できるようになります。

MongoDB へのコンテキスト・データの永続化

NiFi GUI の上部にあるコンポーネント・ツールバーに移動し、テンプレート・アイコンを見つけて、Draco ユーザ・スペース内に ドラッグ・アンド・ドロップします。この時点で、使用可能なすべてのテンプレートのリストを含むポップアップが表示されます。 そして、ORION-TO-MONGO.xml テンプレートを選択してください。

すべてのプロセッサを選択し (Shift キーを押してすべてのプロセッサをクリックします)、開始ボタンをクリックして開始します。 これで、各プロセッサのステータス・アイコンが赤から緑に変わったことがわかります。

コンテキストの変更をサブスクライブ

サブスクリプションを作成して、Draco にコンテキストの変更を通知し、それを MongoDB に保存します。

ngsi create \
  --host orion.example.com \
  --service openiot \
  --path / \
  subscription \
  --description "Notify Draco of all context changes" \
  --idPattern ".*" \
  --uri "http://draco:5050/notify"

コンテキスト・データを作成

次のスクリプトを実行して、コンテキスト・データを生成します:

#!/bin/bash
set -eu
for i in {0..9}
do
  echo $i
  ngsi upsert \
    --host orion.example.com \
    --service openiot \
    --path / \
    entity \
    --keyValues \
    --data "{\"id\":\"device001\", \"type\":\"device\", \"temperature\":${RANDOM}}"
  sleep 1
done

MongoDB から履歴データを読み取り

コマンドラインから MongoDB データを読み取るには、MongoDB コンテナ内にいる必要があります。

コマンド:

docker compose exec mongo bash

結果:

root@15101e538fde:/# 

次に、MongoDB シェルを実行します:

コマンド:

mongo 

結果:

MongoDB shell version v4.4.8
connecting to: mongodb://127.0.0.1:27017/?compressors=disabled&gssapiServiceName=mongodb
Implicit session: session { "id" : UUID("0a85a937-ea0d-4532-b43e-eca3105f7003") }
MongoDB server version: 4.4.8
Welcome to the MongoDB shell.
For interactive help, type "help".
For more comprehensive documentation, see
    https://docs.mongodb.com/
Questions? Try the MongoDB Developer Community Forums
    https://community.mongodb.com

使用可能なデータベースのリストを表示するには、次のステートメントを実行します:

クエリ:

show dbs

結果:

admin          0.000GB
config         0.000GB
local          0.000GB
orion          0.000GB
orion-openiot  0.000GB
orionld        0.000GB
sth_openiot    0.000GB

アクセスするデータベースに切り替えます:

クエリ:

use sth_openiot

結果:

switched to db sth_openiot

データベース内のコレクションを一覧表示します:

クエリ:

show collections

結果:

sth_/_device001_device
sth_/_device001_device.aggr

次のクエリを実行して履歴データを読み取ります:

クエリ:

db["sth_/_device001_device"].find().limit(10)

結果:

{ "_id" : ObjectId("6183c90a39b98320cb0bfffd"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 16193, "recvTime" : ISODate("2021-11-04T11:50:33.734Z") }
{ "_id" : ObjectId("6183c90a39b98320cb0bfffe"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 28959, "recvTime" : ISODate("2021-11-04T11:50:34.721Z") }
{ "_id" : ObjectId("6183c90b39b98320cb0bffff"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 15080, "recvTime" : ISODate("2021-11-04T11:50:35.758Z") }
{ "_id" : ObjectId("6183c90c39b98320cb0c0000"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 5697, "recvTime" : ISODate("2021-11-04T11:50:36.795Z") }
{ "_id" : ObjectId("6183c90d39b98320cb0c0001"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 7126, "recvTime" : ISODate("2021-11-04T11:50:37.832Z") }
{ "_id" : ObjectId("6183c90e39b98320cb0c0002"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 5396, "recvTime" : ISODate("2021-11-04T11:50:38.869Z") }
{ "_id" : ObjectId("6183c90f39b98320cb0c0003"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 32231, "recvTime" : ISODate("2021-11-04T11:50:39.907Z") }
{ "_id" : ObjectId("6183c91039b98320cb0c0004"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 30974, "recvTime" : ISODate("2021-11-04T11:50:40.946Z") }
{ "_id" : ObjectId("6183c91139b98320cb0c0005"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 31005, "recvTime" : ISODate("2021-11-04T11:50:41.984Z") }
{ "_id" : ObjectId("6183c91339b98320cb0c0006"), "attrName" : "temperature", "attrType" : "Number", "attrValue" : 3404, "recvTime" : ISODate("2021-11-04T11:50:43.020Z") }

MySQL へのコンテキスト・データの永続化

NiFi GUI の上部にあるコンポーネント・ツールバーに移動し、テンプレート・アイコンを見つけて、Draco ユーザ・スペース内に ドラッグ・アンド・ドロップします。この時点で、使用可能なすべてのテンプレートのリストを含むポップアップが表示されます。 そして、ORION-TO-MYSQL.xml テンプレートを選択してください。

Draco GUI ユーザ・スペースの任意の部分を右クリックし、configure をクリックします。

サンダー・アイコンをクリックしてプロセッサを有効にします。

そして、ENABLE ボタンをクリックします。

次に、コントローラー構成ページを閉じます。

NGSToMySQL プロセッサのステータス・アイコンが赤くなります。

すべてのプロセッサを選択し (Shift キーを押してすべてのプロセッサをクリックします)、開始ボタンをクリックして開始します。 これで、各プロセッサのステータス・アイコンが赤から緑に変わったことがわかります。

コンテキストの変更をサブスクライブ

サブスクリプションを作成して、Draco にコンテキストの変更を通知し、それを MySQL に保存します:

ngsi create \
  --host orion.example.com \
  --service openiot \
  --path / \
  subscription \
  --description "Notify Draco of all context changes" \
  --idPattern ".*" \
  --uri "http://draco:5050/notify"

コンテキスト・データを作成

次のスクリプトを実行して、コンテキスト・データを生成します:

#!/bin/bash
set -eu
for i in {0..9}
do
  echo $i
  ngsi upsert \
    --host orion.example.com \
    --service openiot \
    --path / \
    entity \
    --keyValues \
    --data "{\"id\":\"device001\", \"type\":\"device\", \"temperature\":${RANDOM}}"
  sleep 1
done

MySQL から履歴データを読み取り

コマンド・ラインから MySQL データを読み取るには、MySQL コンテナ内にいる必要があります:

コマンド:

docker compose exec mysql bash

結果:

root@898cef135030:/#

Then, run the MySQL shell.

コマンド:

root@898cef135030:/# mysql -uroot -p

結果:

Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 21
Server version: 5.7.35 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

使用可能なデータベースのリストを表示するには、次のステートメントを実行します:

クエリ:

show databases;

結果:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| idm                |
| mysql              |
| openiot            |
| performance_schema |
| sys                |
+--------------------+
6 rows in set (0.00 sec)

アクセスするデータベースに切り替えます:

クエリ:

use openiot;

結果:

Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed

データベース内のテーブルを一覧表示します:

クエリ:

show tables;

結果:

+-------------------+
| Tables_in_openiot |
+-------------------+
| x002f             |
+-------------------+
1 row in set (0.01 sec)

次のクエリを実行して履歴データを読み取ります:

クエリ:

SELECT * FROM openiot.x002f;

結果:

+---------------+---------------------+-------------------+-----------+------------+-------------+----------+-----------+--------+
| recvTimeTs    | recvTime            | fiwareServicePath | entityId  | entityType | attrName    | attrType | attrValue | attrMd |
+---------------+---------------------+-------------------+-----------+------------+-------------+----------+-----------+--------+
| 1643187726446 | 01/26/2022 09:02:06 |                   | device001 | device     | temperature | Number   | 30290     | []     |
| 1643187727478 | 01/26/2022 09:02:07 |                   | device001 | device     | temperature | Number   | 8769      | []     |
| 1643187728510 | 01/26/2022 09:02:08 |                   | device001 | device     | temperature | Number   | 4184      | []     |
| 1643187729539 | 01/26/2022 09:02:09 |                   | device001 | device     | temperature | Number   | 9946      | []     |
| 1643187730571 | 01/26/2022 09:02:10 |                   | device001 | device     | temperature | Number   | 17908     | []     |
| 1643187731599 | 01/26/2022 09:02:11 |                   | device001 | device     | temperature | Number   | 19044     | []     |
| 1643187732627 | 01/26/2022 09:02:12 |                   | device001 | device     | temperature | Number   | 435       | []     |
| 1643187733655 | 01/26/2022 09:02:13 |                   | device001 | device     | temperature | Number   | 10452     | []     |
| 1643187734683 | 01/26/2022 09:02:14 |                   | device001 | device     | temperature | Number   | 4405      | []     |
| 1643187735711 | 01/26/2022 09:02:15 |                   | device001 | device     | temperature | Number   | 24210     | []     |
+---------------+---------------------+-------------------+-----------+------------+-------------+----------+-----------+--------+
10 rows in set (0.00 sec)

PostgreSQL へのコンテキスト・データの永続化

NiFi GUI の上部にあるコンポーネント・ツールバーに移動し、テンプレート・アイコンを見つけて、Draco ユーザ・スペース内に ドラッグ・アンド・ドロップします。この時点で、使用可能なすべてのテンプレートのリストを含むポップアップが表示されます。 そして、ORION-TO-POSTGRESQL.xml テンプレートを選択してください。

Draco GUI ユーザ・スペースの任意の部分を右クリックし、configure をクリックします。

サンダー・アイコンをクリックしてプロセッサを有効にします。

そして、ENABLE ボタンをクリックします。

次に、コントローラー構成ページを閉じます。

NGSToMySQL プロセッサのステータス・アイコンが赤くなります。

すべてのプロセッサを選択し (Shift キーを押してすべてのプロセッサをクリックします)、開始ボタンをクリックして開始します。 これで、各プロセッサのステータス・アイコンが赤から緑に変わったことがわかります。

コンテキストの変更をサブスクライブ

サブスクリプションを作成して、Draco にコンテキストの変更を通知し、それを PostgreSQL に保存します。

ngsi create \
  --host orion.example.com \
  --service openiot \
  --path / \
  subscription \
  --description "Notify Draco of all context changes" \
  --idPattern ".*" \
  --uri "http://draco:5050/notify"

コンテキスト・データを作成

次のスクリプトを実行して、コンテキスト・データを生成します:

#!/bin/bash
set -eu
for i in {0..9}
do
  echo $i
  ngsi upsert \
    --host orion.example.com \
    --service openiot \
    --path / \
    entity \
    --keyValues \
    --data "{\"id\":\"device001\", \"type\":\"device\", \"temperature\":${RANDOM}}"
  sleep 1
done

PostgreSQL から履歴データを読み取り

コマンドラインから PostgreSQL データを読み取るには、PostgreSQL コンテナにいる必要があります:

コマンド:

docker compose exec postgres bash

結果:

root@72b468efeb11:/#

次に、psql シェルを実行します。

コマンド:

psql -U postgres

結果:

psql (11.13 (Debian 11.13-1.pgdg90+1))
Type "help" for help.

使用可能なデータベースのリストを表示するには、次のステートメントを実行します:

クエリ:

\l

結果:

                                 List of databases
   Name    |  Owner   | Encoding |  Collate   |   Ctype    |   Access privileges   
-----------+----------+----------+------------+------------+-----------------------
 postgres  | postgres | UTF8     | en_US.utf8 | en_US.utf8 | 
 template0 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
 template1 | postgres | UTF8     | en_US.utf8 | en_US.utf8 | =c/postgres          +
           |          |          |            |            | postgres=CTc/postgres
(3 rows)

使用可能なスキーマのリストを表示するには、次のようにステートメントを実行します:

クエリ:

\dn

結果:

  List of schemas
  Name   |  Owner   
---------+----------
 openiot | postgres
 public  | postgres
(2 rows)

使用可能なテーブルのリストを表示するには、次のようにステートメントを実行します:

クエリ:

SELECT table_schema,table_name FROM information_schema.tables WHERE table_schema ='openiot' ORDER BY table_schema,table_name;

結果:

 table_schema | table_name
--------------+------------
 openiot      | x002f
(1 row)

次のクエリを実行して履歴データを読み取ります:

クエリ:

SELECT * FROM openiot.x002f;

結果:

  recvtimets   |      recvtime       | fiwareservicepath | entityid  | entitytype |  attrname   | attrtype | attrvalue | attrmd
---------------+---------------------+-------------------+-----------+------------+-------------+----------+-----------+--------
 1643187286219 | 01/26/2022 08:54:46 |                   | device001 | device     | temperature | Number   | 6367      | []
 1643187287236 | 01/26/2022 08:54:47 |                   | device001 | device     | temperature | Number   | 27099     | []
 1643187288272 | 01/26/2022 08:54:48 |                   | device001 | device     | temperature | Number   | 19884     | []
 1643187289301 | 01/26/2022 08:54:49 |                   | device001 | device     | temperature | Number   | 24317     | []
 1643187290334 | 01/26/2022 08:54:50 |                   | device001 | device     | temperature | Number   | 18696     | []
 1643187291389 | 01/26/2022 08:54:51 |                   | device001 | device     | temperature | Number   | 27072     | []
 1643187292420 | 01/26/2022 08:54:52 |                   | device001 | device     | temperature | Number   | 16981     | []
 1643187293467 | 01/26/2022 08:54:53 |                   | device001 | device     | temperature | Number   | 25624     | []
 1643187294499 | 01/26/2022 08:54:54 |                   | device001 | device     | temperature | Number   | 6011      | []
 1643187295528 | 01/26/2022 08:54:55 |                   | device001 | device     | temperature | Number   | 17796     | []
(10 rows)

こちらの例を参照ください。

関連情報