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

RaspberryPiでfluentdを立ち上げる

プログラミング fluentd RaspberryPi

f:id:mia_0032:20151228090542j:plain

RaspberryPiにデータ収集して可視化する環境の構築をする。

今回はfluentdのデーモン化まで。

0. 使うもの

  • RaspberryPi
    • OS: RASPBIAN
  • Supervisor
    • 各種アプリケーションのデーモン化のために使う。
  • Fluentd
    • データ収集アプリケーション。

1. 準備

1.1 RaspberryPiのメモリを空ける

自分の持っているRaspberryPiは古いタイプでメモリが256MBしかない。

いくつか常駐のプロセスをたちあげたいので、できるだけメモリの空き容量は増やしておく。

以下のページを参考にメモリ空き容量を増やした。

Raspberry Pi 使えるメモリー量を増やすチューニング | Act as Professional

1.2 rbenvのインストール

システムのrubyはバージョンが古めなので、新しいバージョンにするついでにrbenvで複数のバージョンを同居できるようにしておく。

インストール方法は以下を参照した。

Ruby - 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 OptionsI2 Change Timezoneアジア東京 で日本時間に設定できる。

NTPの設定については以下のページを参照した。

Raspberry Piの設定【NTPデーモンの設定】 - Aldebaranな人のブログ

2.2.2 ファイルディスクリプタの設定

Before Installing Fluentd | Fluentdを参考にファイルディスクリプタの最大値を上げておく。

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の立ち上げまで終わり。

関連エントリ


みんなのRaspberry Pi入門 第2版 [対応言語:Python] (リックテレコムの電子工作シリーズ)

みんなのRaspberry Pi入門 第2版 [対応言語:Python] (リックテレコムの電子工作シリーズ)