(35連休)5日目:Raspberry Pi(fluentdのインストール〜TreasureDataへのデータ送信)
いくつか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というテーブルに格納されました。設定の問題なのかよくわからないのですが、画面で確認出できるまで少し時間がかかりました。
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 経由でログを送ってくれるコマンドのようです。