今回はSBC(シングルボードコンピュータ)へElasticsearchとKibanaをインストールする方法を改めて紹介します。対象のSBCはTinkerboardSです。以前にもSBCへElasticsearchとKibanaをインストールする方法を紹介しましたが、以前に比べて状況が変わっているため、改めて紹介します。
ARMベースのシングルボード上でElasticsearchとKibanaをアプリケーションとして動かすのではなく、サービスとして登録して運用する手順を紹介します。
■Java11ダウンロードとインストール
以前はoracleからarmhf版のJavaも配信されていましたが、最近のバージョンでは配信されていません。こちらのbellソフトウェアサイトからarmhf用のパッケージをダウンロードしてインストールします。
sudo dpkg -i bellsoft-jdk11-linux-arm32-vfp-hflt.deb
■elasticsearchダウンロード
最近のelasticsearchからJavaがバンドルされており、以前のようにJavaインストール関連のトラブルで起動しないといったことが起きづらくなりました。一方でSBCにインストールする際にはarm版である必要があるため、バンドルされたJavaは使えません。こちらのサイトからJavaがバンドルされていないバージョンのelasticsearchをダウンロードします。
■kibanaダウンロード
こちらのサイトからkibanaをダウンロードします。
合わせて、Armhf版現行のkibanaに対応したNodejsの10.16.0をダウンロードします。
■elasticsearchインストール
amd64用にパッケージされているため、そのままではインストールできません。
@強制的にARM環境にAMD64を追加するために設定を変更する
sudo dpkg --add-architecture amd64
※逆に削除する場合は dpkg --remove-architecture amd64
elasticsearchインストール
sudo dpkg -i --force-all --ignore-depends=libc6 elasticsearch-7.6.2-no-jdk-amd64.debAフォルダ権限変更
sudo chmod -vR 777 /etc/elasticsearch/
sudo chmod -vR 777 /var/lib/elasticsearch/
sudo chmod -vR 777 /usr/share/elasticsearch/
sudo chmod -vR 777 /var/lib/elasticsearch/
sudo chmod -vR 777 /usr/share/elasticsearch/
sudo chmod -vR 777 /var/log/elasticsearch/
BJavaディレクトリパス設定
Jdkのパスを通します。
sudo mkdir -p /usr/share/elasticsearch/jdk
sudo cp -rf /usr/lib/jvm/java-11-openjdk-armhf/* /usr/share/elasticsearch/jdk
Celasticsearch.yml設定変更
amd64専用の機能などを無効化しないと起動に失敗します。
少しおまじないを追加します。
sudo leafpad /etc/elasticsearch/elasticsearch.yml
xpack.ml.enabled: false
bootstrap.system_call_filter: false
※必要に応じて下記も追記する。
network.host: "0.0.0.0"
http.port: 9200
transport.host: localhost
transport.tcp.port: 9300
http.port: 9200
transport.host: localhost
transport.tcp.port: 9300
DJava設定
必要に応じてElasticsearchのメモリ割り当てを変更します。
sudo leafpad /etc/elasticsearch/jvm.options
デフォルトは
-Xms1g
-Xmx1g
-Xmx1g
-server
でメモリ1GをElasticsearchに割り当てる設定です。Tinkerboardならメモリ2GBなのでデフォルトでも問題ありませんが、raspberryPIの場合はメモリ1GBなのでシステム領域が全く確保できなくなってしまいます。設定したメモリ領域+200MBが実際のプロセス上で使用するため、raspberryPIの場合は
-Xms500m
-Xmx500m
-Xmx500m
-server
が妥当だと思います。
E一時フォルダ設定
sudo leafpad /etc/elasticsearch/jvm.options
-Djava.io.tmpdir=${ES_TMPDIR}
から
-Djava.io.tmpdir=/usr/share/elasticsearch/tmp
に変更します。
また、一時フォルダの作成と権限付与を行います。
sudo mkdir -p /usr/share/elasticsearch/tmp
sudo chmod -vR 777 /usr/share/elasticsearch/tmp
Fjna置き換え
sudo mv /usr/share/elasticsearch/lib/jna-4.5.1.jar /usr/share/elasticsearch/lib/jna-4.5.1.jar.old
sudo wget -P /usr/share/elasticsearch/lib https://repo1.maven.org/maven2/net/java/dev/jna/jna/4.5.1/jna-4.5.1.jar
Gサービス起動設定変更
デフォルトでは自動再起動の設定が無効のため、
下記のファイルに追記します。
sudo /bin/systemctl enable elasticsearch.service#ファイル生成
sudo leafpad /etc/systemd/system/multi-user.target.wants/elasticsearch.service
[Service]
・・・・
Restart=always
・・・・
Restart=always
・・・・
Environment=ES_TMPDIR=/usr/share/elasticsearch/tmp
↑2行追加する
・・・・
Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl daemon-reload
sudo /bin/systemctl enable elasticsearch.service
sudo service elasticsearch start
sudo service elasticsearch start
これでElasticsearchがシステム起動時に自動的に起動します。
sudo service elasticsearch statusでサービス状態を確認できます。
http://localhost:9200へアクセスして確認してもよいと思います。
statusで問題なくても9200へアクセスできない場合は
elasticsearch.ymlかjavaの設定に何か問題があることが多いです。
■Kibanaインストール
Kibanaはamd64用にパッケージされているため、そのままではインストールできません。
@強制的にARM環境にAMD64を追加するために設定を変更する(elasticsearchで実行済の場合は不要)
sudo dpkg --add-architecture amd64
※逆に削除する場合は dpkg --remove-architecture amd64
AAMD64が追加されているか確認する
sudo dpkg --print-foreign-architectures
BKibanaインストール
sudo dpkg -i kibana-7.6.2-amd64.deb
CARM版Nodejs解凍
tar xfv node-v10.16.0-linux-armv7l.tar.gz
DARM版Nodejsへ置き換え
sudo cp node-v10.16.0-linux-armv7l/bin/node /usr/share/kibana/node/bin
sudo cp node-v10.16.0-linux-armv7l/bin/npx /usr/share/kibana/node/bin
sudo cp node-v10.16.0-linux-armv7l/bin/npm /usr/share/kibana/node/bin
Dkibana.yml設定変更
sudo leafpad /etc/kibana/kibana.yml
下記を追記する
server.host: "0.0.0.0"
i18n.locale: "ja-JP"
Eサービス登録
下記のコマンドでサービスを有効化します。
sudo /bin/systemctl enable kibana.service
sudo service kibana start
sudo service kibana start
これでKibanaがシステム起動時に自動的に起動します。
sudo service kibana statusでサービス状態を確認できます。
http://localhost:5601へアクセスして確認してもよいと思います。
■おまけ
・Tinkerboard RTC設定方法
・日本語入力IME追加
sudo apt-get install ibus-mozc im-config
・Nodejsインストール
curl -sL https://deb.nodesource.com/setup_10.x | sudo bash -
・Node-Redインストール
sudo npm install -g --unsafe-perm node-red
・Node-Red serialportインストール
sudo npm install -g --unsafe-perm node-red-node-serialport
・apt-getで依存関係エラーが残ってしまう場合の対処方法
下記のコマンドでエディタを開き、依存関係エラーに関連するライブラリ名を検索し、対象のライブラリ数行を丸ごと削除して保存する。
sudo leafpad /var/lib/dpkg/status
以上の手順でシングルボードコンピュータへElasticsearchとKibanaをインストールすることができます。以前に比べてArm版のJavaがoracleから配布されなくなったり、elasticsearchにjdkがデフォルトでバンドルされたりといろいろ状況が変わっていました。ElasticStack7.2前後はnode系のgitバイナリ絡みの依存でSBCに根本的にインストールできない状況でしたが、ElasticStack7.6では解消されています。一方でelasticsearchのjna絡みでトラブルを抱えているため、jnaの置き換えが必要な状況でした。今回はdokcerを使わずにそのままElasticStackをサービスとして使用する方法を紹介しました。dockerを活用すればArm版への対応作業は必要ですが、多少、設定は楽になると思われます。