ElasticSearch + kibana をRaspberryPi3B+で動かす

# 目的
ElasticSearch + kibana をRaspberryPi3B+で動かした際の備忘録です。
思ったより苦戦したのでハマったエラーを含めて記載します。

以下を参考にさせて頂きました。
> [Raspberry Pi で Elasticsearch と Kibana](https://mattintosh.hatenablog.com/entry/20190108/1546933567)


# ElasticSearchをインストール

```
sudo apt-get update
sudo apt-get install openjdk-8-jre-headless
mkdir ~/elastic
cd ~/elastic
wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-6.5.2.tar.gz
tar xf elasticsearch-6.5.2.tar.gz
```

jvm.optionsを変更する。（メモリ使用量を256MBにする。）

```diff:elasticsearch-6.5.2/config/jvm.options
-#-Xms1g
-#-Xmx1g
+-Xms256m
+-Xmx256m
```

elasticsearch.ymlを変更する。（起動オプションを変更する。）

```diff:elasticsearch-6.5.2/config/elasticsearch.yml
+xpack.ml.enabled: false
+network.host: 0.0.0.0
+http.port: 9200
+transport.host: localhost
+transport.tcp.port: 9300
```

起動

```
elasticsearch-6.5.2/bin/elasticsearch
```

数分待ってlocalhost:9020にアクセスして以下の画面が出ればOK
<img width="227" alt="スクリーンショット 2020-05-09 14.45.27.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/b490df2c-e09c-c51c-33d8-5178114d4921.png">

# kibanaのインストール

```
wget https://artifacts.elastic.co/downloads/kibana/kibana-6.5.2-linux-x86_64.tar.gz
tar xf kibana-6.5.2-linux-x86_64.tar.gz
```

そのままではnodejsが使えなかったので利用できるnodejsをダウンロード

```
$ ./kibana-6.5.2-linux-x86_64/node/bin/node 
-bash: ./kibana-6.5.2-linux-x86_64/node/bin/node: バイナリファイルを実行できません: 実行形式エラー
```

```
$ chmod -x kibana-6.5.2-linux-x86_64/node/bin/node
$ wget https://nodejs.org/dist/v8.14.0/node-v8.14.0-linux-armv7l.tar.xz
$ tar xf node-v8.14.0-linux-armv7l.tar.xz
$ ./node-v8.14.0-linux-armv7l/bin/node 
> .exit
```

nodejsにパスを通してkibanaを起動する

```
cd ~/elastic
echo "PATH=$HOME/elastic/node-v8.14.0-linux-armv7l/bin:$PATH" >> ~/.bashrc
echo "PATH=$HOME/elastic/kibana-6.5.2-linux-x86_64/bin/:$PATH" >> ~/.bashrc
echo "PATH=$HOME/elastic/elasticsearch-6.5.2/bin/:$PATH" >> ~/.bashrc
source ~/.bashrc                                         # nodejsのパスを通す
./kibana-6.5.2-linux-x86_64/bin/kibana                   # kibanaを起動
```

数分待ってブラウザからlocalhost:5601にアクセスできればOK

<img width="483" alt="スクリーンショット 2020-05-10 0.18.37.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/ce44a68a-685b-c313-4414-9565ba3b98fd.png">

# エラー対策
# elasticsearch-6.5.2/bin/elasticsearch が強制終了

```
$ elasticsearch-6.5.2/bin/elasticsearch
強制終了
```

メモリ不足で起動中にエラー。
他のアプリケーションプロセスを終了させて解決。

# SettingsException[Failed to load settings from [elasticsearch.yml]]; 

```
$ elasticsearch-6.5.2/bin/elasticsearch
Exception in thread "main" 2020-05-09 14:34:21,491 main ERROR No Log4j 2 configuration file found. Using default configuration (logging only errors to the console), or user programmatically provided configurations. Set system property 'log4j2.debug' to show Log4j 2 internal initialization logging. See https://logging.apache.org/log4j/2.x/manual/configuration.html for instructions on how to configure Log4j 2
SettingsException[Failed to load settings from [elasticsearch.yml]]; nested: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]];
	at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1216)
	at org.elasticsearch.common.settings.Settings$Builder.loadFromPath(Settings.java:1189)
	at org.elasticsearch.node.InternalSettingsPreparer.prepareEnvironment(InternalSettingsPreparer.java:100)
	at org.elasticsearch.cli.EnvironmentAwareCommand.createEnv(EnvironmentAwareCommand.java:95)
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86)
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:124)
	at org.elasticsearch.cli.Command.main(Command.java:90)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:93)
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:86)
Caused by: ParsingException[Failed to parse object: expecting token of type [START_OBJECT] but found [VALUE_STRING]]
	at org.elasticsearch.common.xcontent.XContentParserUtils.ensureExpectedToken(XContentParserUtils.java:78)
	at org.elasticsearch.common.settings.Settings.fromXContent(Settings.java:696)
	at org.elasticsearch.common.settings.Settings.access$500(Settings.java:84)
	at org.elasticsearch.common.settings.Settings$Builder.loadFromStream(Settings.java:1212)
	... 8 more
```

elasticsearch.yml の記載が誤っていた（変な文字列が入っていた）。修正して解決

### kinaba server is not ready yet

<img width="25" alt="スクリーンショット 2020-05-09 15.20.23.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/344880/2617e9db-bda0-76cb-f29f-e6a4ed3cf883.png">

数分待つと起動する...と思いきやなかなか起動しない。
メモリ不足？と思いelastic searchのメモリを256MB制限にして再起動すると無事に起動した。

# 参考
[Raspberry Pi で Elasticsearch と Kibana](https://mattintosh.hatenablog.com/entry/20190108/1546933567)
[データ分析基盤構築入門［Fluentd，Elasticsearch，Kibanaによる ...]()
[Raspbian buster でElastic Stack 7.5.1 を動かす (7.2〜からの情報有)](https://qiita.com/Y-Shikase/items/7e6025855454c443f620)
[流行りのKibana+fluentd+elasticsearchをLoggingで手軽に試してみた](https://qiita.com/yuta_h3/items/484e93e849fe374153bd)
[Macに ElasticSearch と Kibana を導入する（Homebrew利用）](https://www.yoheim.net/blog.php?q=20190903)