Nayco(内湖) は、主にオンプレミスのデータ収集・蓄積・可視化環境を素早く立ち上げるための、オールインワンの小さなデータ基盤です。
- Dockerコンテナ群で構成され、
docker-compose
コマンド一発で起動 - 列指向DWH(ClickHouse)による、高速な集計とデータ圧縮による高いストレージ効率
- 入力データを元にスキーマを推定し、自動でDWHにテーブルを作成。データに合わせてテーブルを作成する必要はありません。
- 構成するソフトウェアは全てOSS
docker-compose
コマンドで立ち上げたあとは、共有フォルダにファイルを置いたりMQTTでデータを送信するだけで、DWHへ自動でデータが蓄積され、Metabaseや一般的なツールによってデータを利用することができます。
詳細については Usage.ja.md を御覧ください。
$ docker -v
Docker version 19.03.12
$ docker-compose -v
docker-compose version 1.26.2
$ git clone https://github.com/tac0x2a/nayco.git
$ cd nayco
$ docker-compose up -d
上記でNaycoが起動します。各コンテナの状態は Portainer(http://<NAYCO_HOST>:19000
)にアクセスして確認することができます。
なお、<NAYCO_HOST>
は Naycoが実行されているホストまたはIPアドレスに読み替えてください。
ここでは、MQTTでJSONを送信してデータを入力します。
- Topic:
hello/nayco
- Payload:
{"title": "The Perfect Insider", "pub_date": "1996/4/5", "lang": "ja"}
- Host:
<NAYCO_HOST>
- Port:
1883
Pythonの例
import paho.mqtt.publish as pub
topic = "hello/nayco"
payload = '{"title": "The Perfect Insider", "pub_date": "1996/4/5", "lang": "ja"}'
hostname = "<NAYCO_HOST>"
port = 1883
pub.single(topic=topic, payload=payload, hostname=hostname, port=1883)
送信が完了したら、以下のデータ管理サービスでテーブルが作成されたことを確認します。
データとtopic名を元にテーブルが自動作成されていることを確認できます。
テーブル名はtopic名を元に生成されますが、RENAME TABLE
ボタンから変更することができます。
今はデータが1件だけなので圧縮率が悪く見えますが、データが増えるにつれて、ClickHouseによるデータ圧縮が効果を発揮します。
蓄積したデータを可視化するサービスとして、NaycoにはMetabase が含まれています。
- Metabase:
http://<NAYCO_HOST>:3000
Metabaseを利用するためにあ、初回アクセス時に、DWH(ClickHouse)のDBをデータソースとして登録する必要があります。
- Database type
ClickHouse
, - Database Name: 任意
- Host:
clickhouse
- Port:
8123
- Database user name:
default
- Database password: <空>
上記をSaveすれば、Naycoに蓄積されたデータをMetabseで可視化する準備が整いました。(Metabaseのクロールが実行されるまでの間、実際のテーブルがMetabase上に表示されない場合があります)
試しに、簡単な可視化をしてみましょう。Metabase上で hello_nayco_001
テーブルが見えるようになったので、以下のような可視化(Question)を行います。
Metabaseの使い方については、Metabaseのドキュメントを参照してください。
横軸を公開日、縦軸を件数とするバーチャートです。今は1件しかデータが登録されていないので、シンプルな見た目です。
以下のようなスクリプトを実行し、データを追加してみます。
Pythonの例
import paho.mqtt.publish as pub
topic = "hello/nayco"
payload = """
{ "title": "Doctors in Isolated Room", "pub_date": "1996/7/5", "lang": "ja" }
{ "title": "Mathematical Goodbye", "pub_date": "1996/9/5", "lang": "ja" }
{ "title": "Jack the Poetical Private","pub_date": "1997/1/5", "lang": "ja" }
{ "title": "Who Inside", "pub_date": "1997/4/5", "lang": "ja" }
{ "title": "Illusion Acts Like Magic", "pub_date": "1997/10/5","lang": "ja" }
{ "title": "Replaceable Summer", "pub_date": "1998/1/7", "lang": "ja" }
{ "title": "Switch Back", "pub_date": "1998/4/5", "lang": "ja" }
{ "title": "Numerical Models", "pub_date": "1998/7/5", "lang": "ja" }
{ "title": "The Perfect Outsider", "pub_date": "1998/10/5","lang": "ja" }
"""
hostname = "<NAYCO_HOST>"
port = 1883
pub.single(topic=topic, payload=payload, hostname=hostname, port=1883)
その後、Metabaseのページをリロードすると追加されたデータが表示されます。
このように、MQTTでデータを送信するだけで、簡単に可視化が可能です。その他、任意のSQLクライアントでDWHを直接クエリしたり、ファイルとしてエクスポートすることが可能です。
- Fork it ( https://github.com/tac0x2a/nayco/fork )
- Create your feature branch (
git checkout -b my-new-feature
) - Commit your changes (
git commit -am 'Add some feature'
) - Push to the branch (
git push origin my-new-feature
) - Create a new Pull Request