ラズパイ4でelasticsearch+kibanaの構成

Raspberry Pi 4 Model Bでelasticsearch+kibanaを構成したので、備忘録を残したいと思います。

ここに記載した操作を行うと、カレントディレクトリにelasticsearch+kibanaのDockerコンテナ環境を作成することが出来ます。

1、構築準備


構築予定のディレクトリで以下のコマンドを実行し、必要なディレクトリ・Dockerイメージを作成します。

OS・Dockerのインストールは以下の記事「3-1」「3-2」を参照してインストールしてください。

OSのインストール

1-1、ディレクトリ作成

カレントディレクトリにelasticsearch+kibanaのデータを保存するディレクトリを作成します。

#作業内で使用する変数もここで定義します。
ELASTIC_PASSWORD="Passw0rd!"
ELASTIC_VERSION="7.8.0"

#ディレクトリ作成
mkdir -p ./data/cert ./data/elasticsearch/data ./data/kibana
mkdir -p ./dockerfile/rpi-elasticsearch ./dockerfile/rpi-kibana
chmod -R 777 ./data

1-2、docker-composeファイル作成の作成

lasticsearch+kibanaのコンテナを起動するためのdocker-composeファイルを作成します。

cat <<EOF > ./docker-compose.yaml
version: "3"
services:
  elasticsearch:
    image: rpi-elasticsearch:${ELASTIC_VERSION}
    privileged: true
    restart: always
    environment:
      - discovery.type=single-node
      - "ELASTIC_PASSWORD=${ELASTIC_PASSWORD}"
    ports:
      - 9200:9200
      - 9300:9300
    volumes:
      - ./data/elasticsearch/data:/usr/share/elasticsearch/data
      - ./data/cert:/usr/share/elasticsearch/config/cert
      - ./data/elasticsearch/elasticsearch.yml:/usr/share/elasticsearch/config/elasticsearch.yml

  kibana:
    image: rpi-kibana:${ELASTIC_VERSION}
    volumes:
      - ./data/kibana/kibana.yml:/opt/kibana/config/kibana.yml
      - ./data/cert:/etc/kibana
    restart: always
    ports:
      - 5601:5601
    depends_on:
      - elasticsearch
EOF

1-3、elasticsearch設定ファイル作成

elasticsearchの動作を制御する設定ファイルを作成します。同様の設定はDocker-composeファイルの環境変数を使用して定義することもできます。

今回は、設定ファイルを作成し、Dockerのマウント機能を使用してコンテナ内のelasticsearchに設定ファイルを読み込ませます。

設定ファイルの詳細な内容については以下のリンクを参照します。
Configuring Elasticsearch
edit

cat <<EOF > ./data/elasticsearch/elasticsearch.yml
cluster.name: "docker-cluster"
network.host: 0.0.0.0
xpack.security.enabled: true
xpack.monitoring.collection.enabled: true
xpack.security.transport.ssl.enabled: true
xpack.security.transport.ssl.verification_mode: certificate
xpack.security.transport.ssl.keystore.path: /usr/share/elasticsearch/config/cert/elastic-stack-ca.p12
xpack.security.transport.ssl.truststore.path: /usr/share/elasticsearch/config/cert/elastic-certificates.p12
xpack.security.http.ssl.enabled: true
xpack.security.http.ssl.keystore.path: /usr/share/elasticsearch/config/cert/elastic-certificates.p12
xpack.security.http.ssl.truststore.path: /usr/share/elasticsearch/config/cert/elastic-certificates.p12
EOF
chmod 666 ./data/elasticsearch/elasticsearch.yml

1-4、kibana設定ファイル作成

「1-3」同様kibana用の設定ファイルも作成します。

設定ファイルの詳細な内容については以下のリンクを参照します。

Configure Kibana

cat <<EOF > ./data/kibana/kibana.yml
server.host: "0.0.0.0"
i18n.locale: "ja-JP"
elasticsearch.hosts: ["https://elasticsearch:9200"]
elasticsearch.username: "elastic"
elasticsearch.password: "${ELASTIC_PASSWORD}"
elasticsearch.ssl.certificateAuthorities: ["/etc/kibana/elastic-stack-ca.pem"]
elasticsearch.ssl.verificationMode: certificate
server.ssl.enabled: true
server.ssl.key: /etc/kibana/kibana-server/kibana-server.key
server.ssl.certificate: /etc/kibana/kibana-server/kibana-server.crt
EOF
chmod 666 ./data/kibana/kibana.yml

1-5、elasticsearch用DockerFile作成

elasticsearchをdocker buildするための、Dockerファイルを作成します。

配布元から提供されているDockerイメージには、日本語解析用のプラグインが含まれていません。そのため、ここで日本語解析用のプラグインを含めたDockerイメージを作成します。

cat <<EOF > ./dockerfile/rpi-elasticsearch/Dockerfile
FROM docker.elastic.co/elasticsearch/elasticsearch:${ELASTIC_VERSION}
RUN \
elasticsearch-plugin install --batch analysis-icu && \
elasticsearch-plugin install --batch analysis-kuromoji
EOF

1-6、kibana用DockerFile作成

配布元では、ラズベリーパイ用のDockerイメージが現時点で提供されていません。そのため、ラズベリーパイ用のDockerイメージを作成するためのDockerFileを作成します。

cat <<EOF > ./dockerfile/rpi-kibana/Dockerfile
FROM node:10.21.0
COPY ./dockerfile/rpi-kibana/kibana-${ELASTIC_VERSION}-linux-x86_64.tar.gz /opt
RUN tar xzf /opt/kibana-*.tar.gz -C /opt && \
    rm /opt/kibana-*.tar.gz && \
    ln -s /opt/kibana-* /opt/kibana && \
    rm /opt/kibana/node/bin/node && \
    ln -sr \`which node\` /opt/kibana/node/bin/node
ENV NODE_OPTIONS=--max-old-space-size=512
CMD ["/opt/kibana/bin/kibana","--allow-root"]
EOF

1-7、kibanaソースファイルをダウンロード

ラズベリーパイ用のDockerイメージを作成するために必要な、kibanaのソースファイルをダウンロードします。

wget -P ./dockerfile/rpi-kibana https://artifacts.elastic.co/downloads/kibana/kibana-${ELASTIC_VERSION}-linux-x86_64.tar.gz

1-8、elasticsearch・kibanaのDockerイメージ作成

「1-5」・「1-6」で作成したDockerFileでラズベリーパイ用のDockerイメージを作成します。

docker build -t rpi-elasticsearch:${ELASTIC_VERSION} -f ./dockerfile/rpi-elasticsearch/Dockerfile .
docker build -t rpi-kibana:${ELASTIC_VERSION} -f ./dockerfile/rpi-kibana/Dockerfile .

2、自己証明書の作成


2-1、証明書作成用Dockerコンテナ起動

以下のコマンドを実行し、証明書作成用のDockerコンテナを起動します。

※このコンテナは、証明書作成後に削除します。

#Dockerコンテナ起動
docker run  \
--name Elasticsearch -d \
--privileged \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-v `pwd`/data/cert:/usr/share/elasticsearch/config/cert \
rpi-elasticsearch:${ELASTIC_VERSION}

2-2、証明書の作成

Dockerコンテナへログイン

docker exec -it Elasticsearch bash

opensslとunzipを使えるようにする

yum install -y openssl unzip

認証局を作成

bin/elasticsearch-certutil ca
#ダイアログは何も入れずenterを押し続ける(お好みで入力してもいい)

秘密鍵を生成

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12
#ダイアログは何も入れずenterを押し続ける(お好みで入力してもいい)

証明書を作成

openssl pkcs12 -in elastic-certificates.p12 -cacerts -nokeys -out elastic-stack-ca.pem

Kibanaをhttps化するのに必要なサーバ証明書と秘密鍵を生成

bin/elasticsearch-certutil cert --ca elastic-stack-ca.p12 --pem --name kibana-server
#ダイアログは何も入れずenterを押し続ける(お好みで入力してもいい)
unzip certificate-bundle.zip

諸々をホスト側に移動してコンテナを抜ける

mv elastic-* ./config/cert
mv kibana-server ./config/cert
exit

証明書作成用Docker削除

docker stop Elasticsearch
docker rm Elasticsearch

証明書ファイルの権限変更

chmod 644 ./data/cert/elastic-certificates.p12
chmod 644 ./data/cert/elastic-stack-ca.p12

4、起動


以下のコマンドを実行し、elasticsearch・kibanaを起動する。

docker-compose up -d

5、kibanaへログイン・各種設定


ブラウザーでkibanaのIPアドレスを入力し、ログインします。

https://ホストIPアドレス:5601/

ログイン名・パスワードは以下を入力します。

ユーザー名:elastic
パスワード:「1-1、」で設定した「ELASTIC_PASSWORD」

その他


ここで作成した証明書は、オレオレ証明書のため、外部ツールなどと連携して使用する場合は注意が必要です。

必要に応じて、ssl証明書発行機関が発行した証明書を使用したり、nginxを間に挟み、証明書を適用するなどしましょう。

nginxのDockerコンテナ設定方法は以下リンクの「3-3、Docker環境の準備」「3-4、nginx-proxyの作成」に記載しています。

参照記事


コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)