読者です 読者をやめる 読者になる 読者になる

hsuetsugu’s diary

ITの技術的なことに関して主に書きます。Rとpythonとd3.jsとAWSとRaspberryPiあたりを不自由なく使いこなせるようになりたいです。

(35連休)5日目:Raspberry Pi(fluentdのインストール〜TreasureDataへのデータ送信)

Raspberry Pi fluentd Data Visualization

いくつかRaspberry Piをさわってみて、下記のようなものができそうな気がしてきました。

  • 温度、湿度のセンサーを取り付けて、アラート的にtwitterに投稿、定時にAWSへデータ送信し、AWS側でd3.jsを使った可視化を行う。
  • カメラで取得している画像をリアルタイムで子供の顔を認識したらその画像を自動的に保存する。

これくらいできるとなんかM2Mっぽくてよい感じです。

まずはその準備として、fluentdをインストールしてみます。fluentdも名前はよく聞いていましたが、使うのは今回が初めてです。

事前準備

参考URL:コチョナナバ: centosにfluentdをインストールしてrubyでデータを投げてみた

vi /etc/security/limits.confに以下を追加します。

root soft nofile 65536
root hard nofile 65536
* soft nofile 65536
* hard nofile 65536

vi /etc/sysctl.confに以下を追加します。

net.ipv4.tcp_tw_recycle = 1
net.ipv4.tcp_tw_reuse = 1
net.ipv4.ip_local_port_range = 10240    65535

fluentdのインストール

参考URL:Cloud Data Logger by Raspberry Pi | Fluentd
上記記事にそって、

$ sudo aptitude install ruby-dev
$ sudo gem install fluentd
$ sudo fluent-gem install fluent-plugin-td

Treasure Dataサインアップ

https://console.treasuredata.com/users/sign_upにて、サインアップして、API KEYを取得

fluent.conf(Raspberry PiからTreasure Dataへのログ送信設定)

これもオフィシャルドキュメントそのままですが、"YOUR_API_KEY_HERE"のところに上記で取得するAPI KEYに書き換え。

<match td.*.*>
  type tdlog
  apikey YOUR_API_KEY_HERE

  auto_create_table
  buffer_type file
  buffer_path /home/pi/fluentd/td
</match>
<source>
  type http
  port 8888
</source>
<source>
  type forward
</source>

起動

fluent.congを保存したディレクトリに移動(今回は/home/pi/fluent)して、

fluentd -c fluent.conf

アップロードテスト

  • JSONをHTTPにてポストする。(上記のオフィシャルドキュメントに記載のやり方)
curl -X POST -d 'json={"sensor1":3123.13,"sensor2":321.3}' \ http://localhost:8888/td.testdb.raspberrypi

こうすると、下記のように、DB:testdb、table:raspberrypiというテーブルに格納されました。設定の問題なのかよくわからないのですが、画面で確認出できるまで少し時間がかかりました。
f:id:hsuetsugu:20140815103124p:plain

curlの-Xオプションは、POSTメソッドを指定しており、-dオプションで送信するデータを指定しているようです。
参考URL:cURL - How To Use (マニュアルページ日本語訳)

  • ②もっと(自分にとっては)単純なやり方

参考URL:Raspberry PiでFluentdを立ち上げてTDにデータを流してみた話 - komamitsu.log

echo '{"name":"pi", "age":49}' | fluent-cat td.pidb.test

こうすると、DB:pidb、table:testにデータ{"name":"pi", "age":49}がきちんと格納されてました。

①のやり方は、設定テーブルfluent.confの下記の部分に相当していて、

<source>
  type http
  port 8888
</source>

②のやり方は、下記の部分(標準入力)ということみたいです。

<source>
  type forward
</source>

fluent-catというのは、fluentd に tcp 経由でログを送ってくれるコマンドのようです。

今後の予定

ほんとはfluentdで直接AWSにアップロードしようと思っていたのですが、意外にTreasureDataで無料プランがあってそれなりのデータ量いけるし、さすがにfluentd使ったマニュアルも多かったので、TreasureData上のデータをAWS上のWEBサイトでd3.jsで可視化するようなものを作っていこうと思います。やってみてだめだったら、TreasureDataからAWSのRDSにデータを移動させるか、fluentdでS3経由でRDSに送るようなやり方をやってみます。

今週後半は家族も休みだったのであまり時間がとれませんでした・・・。