チラシの裏の書き置き

技術的な話をするブログのタイトルじゃない気がする

Raspberry Pi 3(Raspbian)でElasticsearch 6.1.1+Kibana 6.1.1を使う

色々とデータ計測を行っていて、それの可視化のためにElasticsearchとKibanaを使ってみています。
初めて使いましたが、ひらすら突っ込んでおくだけで可視化が簡単にできるので良いですね。データ突っ込むのもJSON投げるだけなので良いです。

www.elastic.co www.elastic.co

で、これを使うのにとりあえずという事でRaspberry Pi 3に入れてみました。
正式にサポートされている訳ではないので一筋縄でいくはずがないのですが、まさにその通りでした。

環境

  • Raspberry Pi 3
  • Raspbian Stretch (9.3)
  • Elasticsearch 6.1.1
  • Kibana 6.1.1

どちらも現時点での最新版です。
今回は特に考慮していませんが、プラグインとかElasticsearch/Kibana同士の相性があるのでバージョンは何を使うかは慎重に判断する必要があるようです。

流れ

Javaを入れる

Elasticsearchを動かすのにJavaが必要なので、導入していない場合は入れます。
ドキュメントによると1.8.0_131以上が必要です。
JREだけ入れましたが、とりあえず動いています。

$ sudo apt-get install openjdk-8-jre
$ java -version
openjdk version "1.8.0_151"
OpenJDK Runtime Environment (build 1.8.0_151-8u151-b12-1~deb9u1-b12)
OpenJDK Client VM (build 25.151-b12, mixed mode)

あとはJAVA_HOMEも追加しておきます。

Elasticsearch

ダウンロードして解凍します。

$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.1.1.tar.gz
$ tar zxvf elasticsearch-6.1.1.tar.gz
$ cd elasticsearch-6.1.1/

あとは$ ./bin/elasticsearchで起動するだけなのですが、そのまま起動するとメモリ関係のエラーが出てしまいます。
対策として、config/jvm.options-Xms1G-Xmx1G-Xms512M-Xmx512Mに書き換えてから起動します。
(Pi3でも物理メモリは1GBしかないにも関わらず、VMが1GB確保しようとしてエラーになる)

その後、http://localhost:9200にリクエストして、状態を確認します。

$ curl http://localhost:9200
{
  "name" : "uylZzju",
  "cluster_name" : "elasticsearch",
  "cluster_uuid" : "24Za13S_R26B53m6cxLYUw",
  "version" : {
    "number" : "6.1.1",
    "build_hash" : "bd92e7f",
    "build_date" : "2017-12-17T20:23:25.338Z",
    "build_snapshot" : false,
    "lucene_version" : "7.1.0",
    "minimum_wire_compatibility_version" : "5.6.0",
    "minimum_index_compatibility_version" : "5.0.0"
  },
  "tagline" : "You Know, for Search"
}

Kibana

Kibanaもダウンロードして解凍します。

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

こちらも$ ./bin/kibanaで起動しますが、Node.jsがエラーを出力して終了します。

$ cd kibana-6.1.1-linux-x86_64/
$ ./bin/kibana
./bin/kibana: 24: exec: ./bin/../node/bin/node: Exec format error

原因は内包しているnodenpmARMアーキテクチャのものではないためです。
対策としては簡単で、ARMアーキテクチャ向けのNode.js一式を入れてそれに差し替えるだけです。

package.jsonengines.nodeでは6.12.2が指定されていますが、今回は8.4.9を入れます。 すでに入っている場合は、インストール周りはスキップできます。

$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install nodejs
$ cd node/bin/
$ mv node node.orgin
$ mv npm npm.origin
$ ln -s `which node` node
$ ln -s `which npm` npm

再度$ ./bin/kibanaで起動して、http://localhost:5601にアクセスし、Kibanaの起動も確認して完了です。
(外部からアクセスする場合は、config/kibana.ymlserver.host0.0.0.0に書き換えて起動し、http://(Pi3のIP):5601にアクセスします。)

おわり

Raspberry Pi 3にElasticsearchとKibanaを入れて動かしてみました。
普通のLinuxと同じように使えるので、ARMアーキテクチャなのを忘れがちです。Kibanaに限らず、他のミドルウェアも似たようなケースで引っかかりそうですね。

Javaで動いているためそれなりに重く、データ量によっては読み書きも多いためmicroSDで動くRaspberry Piにはあまり向かないのですが、とりあえずお試しで動かす分には良いのかなと思いました。

参考