Armadillo-IoTにはfluentdがプリインストールされているので、
簡単にTreasureDataなどのデータベースに計測データやログなどを入れることができます。
今回は、FluentdプロジェクトのスポンサーであるTreasureDataにデータを溜める方法を紹介します。
TreasureDataにアカウント作成
まずは、TreasureDataを利用するのに必要なアカウントを作成します。
14日間無償で利用できるので、評価や使い方を学ぶ程度であれば問題ないと思います。
TreasureDataのWebサイトで「今すぐ試す」をクリックして、サインアップします。
メールアドレスのみでアカウントを作成できます。
ATDE5にTreasureData toolbeltをインストールしAPIキーを確認
APIキーについては、TreasureDataのWebサイトからログインすることで「My profile」から確認することもできますが、
ここでは、toolbeltをインストールして確認してみます。
atmark@atde5:~$ gem install td
atmark@atde5:~$ td account
Enter your Treasure Data credentials.
Email: nakai-****@atmark-techno.com
Password (typing will be hidden):
Authenticated successfully.
Use 'td db:create <db_name>' to create a database.
atmark@atde5:~$ td apikey:show
5803/24bc6e98c957e56d4538f16cceaa295faaca****
上記で「td apikey:show」を実行した場合に表示されるのがAPIキーとなります。
以降でこのAPIキーをfluentdの設定ファイルに記述します。
Armadilloでfluentdを起動
まずは、fluentd用の設定ファイルを作成します。
[root@armadillo-iotg (ttymxc1) ~]# fluentd --setup /etc/config/
Installed /etc/config/fluent.conf.
fluent.confのテンプレートからコピーされた設定ファイルが作成されました。
この設定ファイルにTreasureDataにデータを入力する「tdlog」プラグインの設定を記述します。
/etc/config/fluent.confに次のように追記します。
<match td.*.*>
type tdlog
apikey 5803/24bc6e98c957e56d4538f16cceaa295faaca****
buffer_type memory
flush_interval 5s
use_ssl false
</match>
システム時刻をタイムサーバ(ntp.nict.jp)と同期させた後にfluentdを起動します。
[root@armadillo-iotg (ttymxc1) ~]# ntpclient -h ntp.nict.jp -s
[root@armadillo-iotg (ttymxc1) ~]# start-stop-daemon -S -x fluentd -- -d /var/run/fluentd.pid -c /etc/config/fluent.conf
TreasureDataにデータを入力
fluent-catを用いてTreasureDataにデータを入力してみます。ここでは、
- database名: test_db
- table名: test_table
のようにしてみます。
tableのカラムには、仮に次のように取り決めます。
- type: イベント名
- data: データ
[root@armadillo-iotg (ttymxc1) ~]# echo '{"type":"manual","data":"abcde"}' | fluent-cat td.test_db.test_table
toolbeltでデータが入力されたことを確認する
toolbeltからは、次のようにクエリーを発行することが出来ます。
atmark@atde5:~$ td query -d test_db -w "select * from test_table" -T presto
Job 21414889 is queued.
Use 'td job:show 21414889' to show the status.
queued...
started at 2015-02-23T05:56:11Z
executing query: select * from test_table
Query plan:
- Stage-0
OutputPartitioning: none
DistributedExecution:
-> Output[5]
Columns: data = data:varchar, type = type:varchar, time = time:bigint
-> (NilClass)
- Stage-1
OutputPartitioning: none
DistributedExecution: data source
-> TableScan[0]
Table: test_db.test_table
Columns: data:varchar = data:"data", type:varchar = type:"type", time:bigint = time:"time"
Started fetching results.
2015-02-23 05:56:12: rows pending running done / total
Stage-0: 1 0 0 1 / 1
Stage-1: 1 0 0 1 / 1
1 rows.
finished at 2015-02-23T05:56:12Z
Status : success
Result :
WARNING: the job result is being downloaded...: 49 B / 100.0%
+-------+--------+------------+
| data | type | time |
+-------+--------+------------+
| abcde | manual | 1424668203 |
+-------+--------+------------+
1 rows in set
CSV形式でデータをダウンロード
先ほど実行したクエリーの結果をCSV形式でダウンロードしてみます。
クエリーを実行した場合Jobが発行されるので、そのJobIDを指定します。
atmark@atde5:~$ td job:show 21414889 -f csv -o 21414889.csv --column-header
JobID : 21414889
Status : success
Type : presto
Database : test_db
Priority : NORMAL
Retry limit : 0
Output :
Query : select * from test_table
Result size : 49 B
Result :
written to 21414889.csv in csv format
Use '-v' option to show detailed messages.
atmark@atde5:~$ cat 21414889.csv
data,type,time
abcde,manual,1424668203
SSL通信を有効にする
SSL通信で必要となる認証局証明書をダウンロードします。
[root@armadillo-iotg (ttymxc1) ~]# wget http://curl.haxx.se/ca/cacert.pem -O /etc/config/cacert.pem
[root@armadillo-iotg (ttymxc1) ~]# mkdir -p /usr/lib/ssl
[root@armadillo-iotg (ttymxc1) ~]# ln -s /etc/config/cacert.pem /usr/lib/ssl/cert.pem
fluentdを停止させ、/etc/config/fluent.confを下記のように修正します。(diff形式で示します)
[root@armadillo-iotg (ttymxc1) /etc/config]# diff -urN fluent.conf.orig fluent.conf
--- fluent.conf.orig
+++ fluent.conf
@@ -114,6 +114,5 @@
apikey 5803/24bc6e98c957e56d4538f16cceaa295faaca9a87
buffer_type memory
flush_interval 5s
- use_ssl false
</match>
fluentdを起動しデータを入力させようとすると、SSLで暗号化されます。