ブログ

Armadillo-IoTでfluentdを利用してTreasureDataにデータを溜める

at_nakai
2015年2月23日 14時28分

Armadillo-IoTにはfluentdがプリインストールされているので、
簡単にTreasureDataなどのデータベースに計測データやログなどを入れることができます。

今回は、FluentdプロジェクトのスポンサーであるTreasureDataにデータを溜める方法を紹介します。

■ TreasureData
http://www.treasuredata.com/jp/

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>
ここでは、"use_ssl false"を設定してSSL通信を無効に設定します。
ページ下部にSSLを有効にする方法を記載します。

システム時刻をタイムサーバ(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
ここではstart-stop-daemonでfluentdを起動しました。
停止する場合には、次のようにします。
[root@armadillo-iotg (ttymxc1) ~]# start-stop-daemon -K -p /var/run/fluentd.pid

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通信を有効にする

下記が参考になります。
■ 認証局証明書について
https://users.atmark-techno.com/node/1175

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で暗号化されます。