RaspberryPiにデータ収集して可視化する環境の構築をする。
今回はfluentdのデーモン化まで。
0. 使うもの
- RaspberryPi
- OS: RASPBIAN
- Supervisor
- 各種アプリケーションのデーモン化のために使う。
- Fluentd
- データ収集アプリケーション。
1. 準備
1.1 RaspberryPiのメモリを空ける
自分の持っているRaspberryPiは古いタイプでメモリが256MBしかない。
いくつか常駐のプロセスをたちあげたいので、できるだけメモリの空き容量は増やしておく。
以下のページを参考にメモリ空き容量を増やした。
Raspberry Pi 使えるメモリー量を増やすチューニング | Act as Professional
1.2 rbenvのインストール
システムのrubyはバージョンが古めなので、新しいバージョンにするついでにrbenvで複数のバージョンを同居できるようにしておく。
インストール方法は以下を参照した。
rbenv のインストール (Linux Mint) - Qiita
rubyのインストールには数時間かかった・・・
2. fluentdのインストールと設定
2.1 fluentdのインストール
$ gem install fluentd --no-ri --no-rdoc
依存パッケージも自動的にインストールされる。
2.2 fluentd用のOS設定
2.2.1 時刻の設定とNTPの設定
時刻が日本時間になっていない場合、設定画面から設定する。
$ date 2014年 10月 26日 日曜日 11:28:25 UTC # 最後がJSTになっていたら必要なし。UTCなど他のものであれば日本時間に直す。 $ sudo raspi-config
4.Internationalisation Options
→ I2 Change Timezone
→ アジア
→ 東京
で日本時間に設定できる。
NTPの設定については以下のページを参照した。
Raspberry Piの設定【NTPデーモンの設定】 - Aldebaranな人のブログ
2.2.2 ファイルディスクリプタの設定
http://docs.fluentd.org/ja/articles/before-installを参考にファイルディスクリプタの最大値を上げておく。
2.2.3 ポートの開放
fluentdのin_forwardプラグインで受けるポート(24224)を開ける。
基本的にはRaspberry pi セットアップその9 iptablesの設定 | Keep no way, keep on screamingを参照して行った。
fluentd用に/etc/iptables/rules.v4
を編集して以下を追加している。
# Allows forward connections for fluentd -A INPUT -p tcp -m state --state NEW --dport 24224 -j ACCEPT -A INPUT -p udp -m state --state NEW --dport 24224 -j ACCEPT
2.3 fluentdのconfの作成と起動
/home/pi/fluent/fluent.conf
を作成し、以下のように記述する。
<source> type forward port 24224 bind 0.0.0.0 </source> <match **> type stdout </match>
この設定でfluentdに送られてきたデータは標準出力に出力されるようになる。
試しに起動してみる。
$ fluentd -c /home/pi/fluent/fluent.conf -v &
以下のようなコマンドをうつとログが流れる。
$ echo '{"json":"message"}' | fluent-cat debug.test
2014-10-26 21:30:06 +0900 debug.test: {"json":"message"}
と流れてきたら成功。
手元のMacにもfluentd-catがインストールされていれば、以下のコマンドをうつとログが流れる。
echo '{"json":"message"}' | ./fluent-cat -h <RaspberryPiのIP> -p 24224 mac.test
上と同じく2014-10-26 21:48:13 +0900 mac.test: {"json":"message"}
と流れれば成功。
3. Supervisorを使ったデーモン化
3.1 Supervisorのインストール
pip
でインストールすることもできるが、apt-get
で入れた方がsupervisor自身の管理までやってくれるので楽。
$ sudo apt-get install supervisor
3.2 fluentdのSupervisorの設定ファイルの作成
/etc/supervisor/conf.d/fluentd.conf
を作成し、以下のように記載する。
[program:fluent] command=/home/pi/.rbenv/shims/fluentd -c /home/pi/fluent/fluent.conf stdout_logfile_maxbytes=1MB stderr_logfile_maxbytes=1MB stdout_logfile=/var/log/fluent/%(program_name)s.log stderr_logfile=/var/log/fluent/%(program_name)s_error.log autorestart=true autostart=true user=pi
以下のコマンドを実行するとfluentdがデーモン化される。
$ sudo supervisorctl reread $ sudo supervisorctl add fluent
ここまででfluentdの立ち上げまで終わり。