Raspberry Pi + Fluentd + Elasticsearch + Kibana でグラフ化したいものがあったので、まずは Raspberry Pi に Fluentd + Elasticsearch + Kibana の環境を構築する。

環境

各環境は下記の通り。

  • Raspberry Pi 2 Model B
  • Raspberry Pi 2 OS: Raspbian
  • Raspbian の Debian version: 9.4
  • Fluentd: 1.2.0
  • Elasticsearch: 6.2.4
  • Kibana: 6.2.4

Java JRE のインストール

Elasticsearch に Java JRE が必要なので、インストールする。

$ sudo apt-get install openjdk-9-jre

Elasticsearch のインストール

公式サイトの方法で 6.x をインストールしようとすると、うまくいかなかったので、マニュアルで Debian package でインストールする。

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.2.4.deb
$ sudo dpkg -i elasticsearch-6.2.4.deb

このまま起動しようとするとメモリ関連のエラーで起動しないので、メモリの使用量を 1GB から 512MB に設定を修正する。

$ sudo vi /etc/elasticsearch/jvm.options
#-Xms1g
#-Xmx1g
-Xms512m
-Xmx512m

続いて Elasticsearch を起動して、自動起動も設定する。

$ sudo systemctl start elasticsearch
$ sudo systemctl enable elasticsearch

http://localhost:9200 にアクセスして、起動状態を確認する。

$ curl http://localhost:9200
{
  "name" : "MoXbKSC",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "ySijyk1GRIihYz8WLkRVqw",
  "version" : {
    "number" : "6.2.4",
    "build_hash" : "ccec39f",
    "build_date" : "2018-04-12T20:37:28.497551Z",
    "build_snapshot" : false,
    "lucene_version" : "7.2.1",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

ndenv と Node.js のインストール

Kibana で必要になるので Node.js を ndenv (anyenv) でインストールする。

$ git clone https://github.com/riywo/anyenv ~/.anyenv
$ echo 'export PATH="$HOME/.anyenv/bin:$PATH"' >> ~/.bash_profile
$ echo 'eval "$(anyenv init -)"' >> ~/.bash_profile 
$ exec $SHELL -l
$ anyenv install ndenv
$ exec $SHELL -l

続いて Node.js の v8.11.1 をインストールする。(記事執筆時点の安定版なので。)

$ ndenv install v8.11.1
$ ndenv rehash
$ ndenv global v8.11.1

参考

Kibana のインストール

公式サイトを参考に Elasticsearch と同じようにマニュアルで Debian package をインストールしようとしたら、 CPU のアーキテクチャが違うのでインストールできなかった。

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-amd64.deb
$ sudo dpkg -i kibana-6.2.4-amd64.deb
dpkg: error processing archive kibana-6.2.4-amd64.deb (--install):
 package architecture (amd64) does not match system (armhf)
Errors were encountered while processing:
 kibana-6.2.4-amd64.deb

仕方がないので tar.gz をダウンロードして、起動することにする。

公式サイトから最新版をダウンロードして、 tar.gz を展開する。

$ wget https://artifacts.elastic.co/downloads/kibana/kibana-6.2.4-linux-x86_64.tar.gz
tar -zxvf kibana-6.2.4-linux-x86_64.tar.gz

./bin/kibana で Kibana を起動すると Node.js のエラーになる。

参考サイトによると同梱されている Node.js と npm の CPU アーキテクチャが Raspberry Pi のものと異なるために起こるらしい。

参考サイトの通りに Node.js と npm を差し替える。

$ cd node/bin/
$ mv node node.org
$ mv npm npm.org
$ ln -s `which node` node
$ ln -s `which npm` npm

Raspberry Pi の端末以外からもアクセスしたいので、 config/kibana.yml を下記のように修正する。

$ vi config/kibana.yml
# server.host: "localhost"
server.host: "0.0.0.0"

下記コマンドで Kibana を起動する。

$ bin/kibana

ブラウザで http://{Raspberry Pi の IP アドレスまたはホスト名}:5601 にアクセスして下記の画面が表示されたら OK 。

自動起動したいので cron で OS 起動時に実行するようにする。

$ crontab -e
# 下記行を追加
@reboot kibana-6.2.4-linux-x86_64/bin/kibana

参考

rbenv と Ruby のインストール

Fluentd で必要になるので Ruby を rbenv (anyenv) でインストールする。

$ anyenv install rbenv
$ exec $SHELL -l

続いて Ruby の 2.5.1 をインストールする。(記事執筆時点の最新版なので。)

$ rbenv install 2.5.1
$ rbenv global 2.5.1

Fluentd のインストール

公式サイトにある deb Package のインストール方法ではインストールできなかったので、 Ruby gem でインストールする。

$ gem install fluentd --no-ri --no-rdoc
$ fluent-gem install fluent-plugin-elasticsearch
$ fluentd --setup ./fluent

下記コマンドで起動する。

$ fluentd -c ./fluent/fluent.conf -vv &

下記コマンドで接続のテストをする。

$ echo '{"json":"message"}' | fluent-cat debug.test
2018-05-19 09:12:54.687770576 +0000 debug.test: {"json":"message"}

問題なく接続できている様子。

下記のように Fluentd の設定を修正する。

$ fluent/fluent.conf
# 下記行を追加
<match log.**>
    @type elasticsearch
    host localhost
    port 9200
    type_name raps
    logstash_format true
</match>

自動起動したいので cron で OS 起動時に実行するようにする。

$ crontab -e
# 下記行を追加
@reboot /home/pi/.anyenv/envs/rbenv/shims/fluentd -c /home/pi/fluent/fluent.conf -d /home/pi/fluent/fluent.pid

参考


以上で、 Raspberry Pi 上に Fluentd + Elasticsearch + Kibana の環境が構築できた。