色々とデータ計測を行っていて、それの可視化のためにElasticsearchとKibanaを使ってみています。
初めて使いましたが、ひらすら突っ込んでおくだけで可視化が簡単にできるので良いですね。データ突っ込むのもJSON投げるだけなので良いです。
で、これを使うのにとりあえずという事で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
原因は内包しているnode
とnpm
がARMアーキテクチャのものではないためです。
対策としては簡単で、ARMアーキテクチャ向けのNode.js一式を入れてそれに差し替えるだけです。
package.json
のengines.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.yml
のserver.host
を0.0.0.0
に書き換えて起動し、http://(Pi3のIP):5601
にアクセスします。)
おわり
Raspberry Pi 3にElasticsearchとKibanaを入れて動かしてみました。
普通のLinuxと同じように使えるので、ARMアーキテクチャなのを忘れがちです。Kibanaに限らず、他のミドルウェアも似たようなケースで引っかかりそうですね。
Javaで動いているためそれなりに重く、データ量によっては読み書きも多いためmicroSDで動くRaspberry Piにはあまり向かないのですが、とりあえずお試しで動かす分には良いのかなと思いました。