簡単!Elasticsearchインストール&セットアップ方法:初心者でも迷わない徹底ガイド
はじめに:Elasticsearchとは? なぜ使うのか?
近年、爆発的に増加するデータの中から、必要な情報を素早く、柔軟に見つけ出すことは、ビジネスや開発において不可欠な能力となっています。ログデータ、アプリケーションのメトリック、セキュリティイベント、顧客行動データなど、様々な種類の非構造化データや半構造化データが日々生成されています。これらのデータを効率的に収集、保存、分析、検索するための強力なツールとして、Elasticsearchはその存在感を増しています。
Elasticsearchは、分散型のRESTfulな検索・分析エンジンです。Apache Luceneライブラリをベースとしており、その最大の特長は、大量のデータに対して高速かつ柔軟な全文検索と構造化データの検索を同時に実行できる点にあります。秒速で数百万、数千万件のドキュメントをインデックス化し、瞬時に検索結果を返す能力を持っています。
Elasticsearchがよく利用されるユースケースは多岐にわたります。
- ログ分析: サーバーログ、アプリケーションログなどを集約し、エラーの追跡、パフォーマンスの監視、セキュリティイベントの分析を行います。SplunkやSumo Logicのような商用ログ管理ツールと比べ、柔軟性とコスト効率に優れる場合があります。
- メトリック監視: システムやアプリケーションのパフォーマンスメトリック(CPU使用率、メモリ使用量、ネットワークトラフィックなど)を収集し、リアルタイムの監視やトレンド分析を行います。
- セキュリティ分析 (SIEM): セキュリティログやイベントデータを収集・分析し、脅威の検出やインシデントレスポンスを支援します。
- アプリケーション検索: Eコマースサイトの商品検索、Webサイトのコンテンツ検索、ドキュメント管理システムのファイル検索など、エンドユーザー向けの強力な検索機能を提供します。
- ビジネスインテリジェンス (BI): 顧客データやトランザクションデータを分析し、ビジネスインサイトを得るために利用されます。
- 地理空間情報分析: 位置情報データを含むドキュメントを検索・分析し、例えば特定のエリア内のPOI検索や移動パターンの分析を行います。
Elasticsearchは単独で利用されることもありますが、多くの場合、データの収集・変換ツールであるLogstashやBeats、そしてデータの可視化・分析ツールであるKibanaと組み合わせて使用されます。この3つのツールを総称して「Elastic Stack」(以前は「ELK Stack」と呼ばれていました。Elasticsearch, Logstash, Kibanaの頭文字を取っています)と呼びます。さらに、セキュリティ機能やモニタリング機能などを追加するX-Packも含まれるようになり、より広範な機能をカバーしています。
本記事では、この強力なElasticsearchを、あなたのローカル環境やサーバーにインストールし、基本的なセットアップを行う手順を、初心者の方でも迷わないように詳細に解説します。様々なインストール方法の中から、主要なものをピックアップし、それぞれのステップを丁寧に追っていきます。また、Elasticsearch 8.x系でデフォルト有効となったセキュリティ機能についても触れ、Kibanaと連携するまでの基本的な流れを説明します。
さあ、Elasticsearchの世界へ足を踏み入れましょう!
Elasticsearchインストール前の準備
Elasticsearchのインストールを開始する前に、いくつかの準備が必要です。これらの準備を怠ると、インストールやセットアップの段階で問題が発生する可能性があります。
システム要件の確認
まず、Elasticsearchをインストールするマシンが、最低限のシステム要件を満たしているかを確認します。ElasticsearchはJava上で動作するため、OS、メモリ、ディスク容量、CPUなどが重要になります。具体的な要件はElasticsearchのバージョンによって異なりますが、一般的には以下の点に注意が必要です。
- OS: Windows、macOS、Linux (様々なディストリビューションに対応) など、主要なOSで動作します。本記事では、これらの主要OSでのインストール方法を解説します。
- メモリ: Elasticsearchはインデックスのキャッシュなどにメモリを大量に使用します。単一ノードのテスト環境であれば最低1GB程度でも起動は可能ですが、実用的な用途では最低4GB、推奨は8GB以上が必要です。プロダクション環境では、ノードあたり数十GB以上のメモリを割り当てることも珍しくありません。Javaのヒープサイズ設定(後述)が非常に重要になります。
- ディスク容量: インデックス化するデータの量に比例してディスク容量が必要です。また、Elasticsearchはデータの耐久性を高めるために、デフォルトでレプリカシャードを作成します。そのため、ソースデータの量に加えて、レプリカの分も考慮する必要があります。最低でも数GBは必要ですが、扱うデータ量に応じて数百GB〜数TB以上を確保する必要があります。SSDの使用が強く推奨されます。
- CPU: インデックス化や検索処理はCPUリソースを消費します。コア数が多いほど、並列処理能力が向上し、パフォーマンスが向上します。テスト環境であれば最小構成でも構いませんが、本番環境では十分なコア数を持つCPUが必要です。
Java Development Kit (JDK) のインストール
ElasticsearchはJava仮想マシン (JVM) 上で動作します。そのため、適切なバージョンのJDKがインストールされている必要があります。Elasticsearchのバージョンによって対応するJDKのバージョンが異なりますので、公式ドキュメントで確認することが重要です。Elasticsearch 7.x以降は、多くのバージョンでJava 11またはJava 17が必要です。Elasticsearch 8.x系では、Java 17が推奨されています。
Elasticsearch自体がJDKを同梱しているバイナリも提供されていますが、システムにJDKを別途インストールしておくと、他のJavaアプリケーションとの連携や、トラブルシューティングの際に便利です。
JDKインストールの手順例 (OS別):
ここでは、OpenJDKをインストールする手順を例に示します。
-
Linux (Debian/Ubuntu):
bash
# パッケージリストを更新
sudo apt update
# OpenJDK 17をインストール
sudo apt install openjdk-17-jdk
# インストール確認
java -version
javac -version -
Linux (RHEL/CentOS/Fedora):
bash
# パッケージリストを更新
sudo yum update # または sudo dnf update (Fedora, CentOS Stream 8以降)
# OpenJDK 17をインストール
sudo yum install java-17-openjdk-devel # または sudo dnf install java-17-openjdk-devel
# インストール確認
java -version
javac -version -
macOS (Homebrewを使用):
bash
# Homebrewがインストールされていない場合はインストール
# /bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
# OpenJDK 17をインストール
brew install openjdk@17
# 環境変数を設定 (指示が出力される場合)
# 例: echo 'export PATH="/usr/local/opt/openjdk@17/bin:$PATH"' >> ~/.zshrc
# source ~/.zshrc (シェルの再読み込み)
# インストール確認
java -version
javac -version -
Windows:
OpenJDKのバイナリをダウンロードして手動でインストールするか、winget
などのパッケージマネージャーを使用します。- 手動インストール: Adoptium (旧 AdoptOpenJDK) や Oracle OpenJDK の公式サイトからWindows版のインストーラー (MSI) またはZIPファイルをダウンロードし、実行します。インストールウィザードに従ってください。
- winget (Windows Package Manager):
powershell
# OpenJDK 17を探す
winget search openjdk
# 例えば Adoptium OpenJDK 17 LTS をインストール
winget install EclipseAdoptium.Temurin.17.JDK
# インストール確認 (コマンドプロンプトまたはPowerShellを再起動する必要がある場合がある)
java -version
javac -version
JAVA_HOME環境変数の設定 (任意だが推奨):
システムの環境変数として JAVA_HOME
にJDKのインストールディレクトリを設定しておくと、様々なJava関連ツールやアプリケーションがJDKの場所を特定しやすくなります。設定方法はOSによって異なります。
- Linux/macOS: シェル設定ファイル (~/.bashrc, ~/.zshrcなど) に以下を追加します。
bash
export JAVA_HOME="/path/to/your/jdk" # インストールしたJDKのパスに置き換える
export PATH="$JAVA_HOME/bin:$PATH"
設定ファイルを再読み込み (source ~/.bashrc
など) してください。 - Windows: システムの詳細設定 > 環境変数 から、ユーザーまたはシステムの環境変数として
JAVA_HOME
を追加し、JDKのインストールディレクトリを指定します。Path変数に%JAVA_HOME%\bin
を追加します。
セキュリティに関する考慮事項
インストール前に、以下のセキュリティ関連の点を考慮しておきましょう。
- ユーザー権限: Elasticsearchはroot権限での実行が推奨されません。専用のユーザー (例:
elasticsearch
) を作成し、そのユーザーでサービスを起動するのが一般的なベストプラクティスです。 - ネットワーク: ElasticsearchはデフォルトでHTTPポート (9200) とTransportポート (9300) を使用します。これらのポートがファイアウォールで適切に設定されているか確認してください。特に、クラスター内のノード間通信にはTransportポートが必要です。外部からのアクセスを許可する場合は、アクセス元IPアドレスを制限するなど、セキュリティグループやファイアウォールで制御することが不可欠です。
- ディレクトリ権限: Elasticsearchがデータやログを書き込むディレクトリには、Elasticsearchを実行するユーザーが書き込み権限を持っている必要があります。
バージョン選択の考え方
Elasticsearchは頻繁にバージョンアップが行われます。インストールする際は、最新の安定版を選択するのが一般的です。ただし、既存のシステムや他のソフトウェアとの連携を考慮する場合、互換性のあるバージョンを選択する必要があります。特に、KibanaやLogstash/BeatsなどのElastic Stack製品は、通常、Elasticsearchと同じか、あるいは互換性のあるバージョンを使用する必要があります。公式ドキュメントで互換性マトリクスを確認することを強く推奨します。
本記事では、執筆時点での比較的最新かつ広く使われているバージョン (例えば8.x系) を念頭に置いて説明を進めます。8.x系ではセキュリティ機能がデフォルトで有効になるなど、7.x以前とは異なる点がありますので、その点も解説します。
Elasticsearchのインストール方法:主要なオプション
Elasticsearchをインストールするには、いくつかの方法があります。利用しているOSや環境、管理方法の好みに応じて最適な方法を選択できます。ここでは、主要なインストールオプションを解説します。
-
パッケージマネージャーを使用する方法 (DEB/RPM):
- Linuxディストリビューションの標準的なパッケージマネージャー (APT for Debian/Ubuntu, YUM/DNF for RHEL/CentOS/Fedora) を使用してインストールします。
- Elasticsearch公式リポジトリを追加することで、パッケージとしてインストール、アップグレード、削除が容易に行えます。
- サービスの起動や停止、自動起動設定は、systemdなどの標準的なサービス管理ツールで行えるため、システム管理が容易です。
- 推奨される方法の一つです。
-
アーカイブファイルからインストールする方法 (ZIP/TGZ):
- ZIP (.zip) またはTAR/GZ (.tar.gz) 形式の圧縮ファイルをダウンロードし、任意の場所に展開します。
- どのOSでも利用できる普遍的な方法です。
- システム全体に影響を与えずにインストールできるため、テスト目的や、特定のディレクトリ構成にインストールしたい場合に便利です。
- サービスの自動起動設定などは手動で行う必要があります。
-
Dockerを使用する方法:
- DockerコンテナとしてElasticsearchを実行します。
- ホストOSの環境に依存せず、隔離された環境でElasticsearchを実行できます。
- 開発環境の構築や、複数のサービスをまとめて管理するコンテナオーケストレーション環境 (Kubernetesなど) での利用に適しています。
- Dockerの知識が必要です。
-
Cloud環境で利用する方法 (Elastic Cloud):
- Elastic社が提供するマネージドサービス「Elastic Cloud」を利用します。
- Elasticsearchクラスターの構築、運用、スケーリング、バックアップなどをElastic社が行ってくれます。
- 自身でインストールやサーバー管理をする必要がないため、最も手軽に利用を開始できますが、サービス利用料が発生します。
- 厳密には「インストール」ではありませんが、セットアップの一部として紹介します。
これらの方法の中から、最も一般的な「パッケージマネージャー」「アーカイブファイル」「Docker」を使ったインストール方法を、OS別に詳しく見ていきましょう。
OS別インストール手順の詳細
Linux (Debian/Ubuntu)
APTパッケージマネージャーを使用してインストールします。
-
前提条件の確認:
- JDK 17 (またはElasticsearchのバージョンに応じたJDK) がインストールされていることを確認します。
curl
コマンドが利用できることを確認します (sudo apt install curl
でインストールできます)。
-
Elasticsearch Signing Keyの追加:
Elasticsearchパッケージの署名検証に使用するGPGキーをシステムに追加します。
bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elasticsearch-keyring.gpg
これにより、Elasticsearchリポジトリからダウンロードしたパッケージが正規のものであることを確認できます。/usr/share/keyrings/
ディレクトリにキーが保存されます。 -
Elasticsearch リポジトリの追加:
APTがElasticsearchパッケージを見つけられるように、ソースリストにElasticsearchリポジトリを追加します。/etc/apt/sources.list.d/
ディレクトリに新しいファイルを作成します。
例えば、Elasticsearch 8.x系の場合:
bash
echo "deb [signed-by=/usr/share/keyrings/elasticsearch-keyring.gpg] https://artifacts.elastic.co/packages/8.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
8.x
の部分は、インストールしたいElasticsearchのバージョンに合わせて変更してください。例えば、7.x系であれば7.x
となります。 -
パッケージリストの更新:
新しいリポジトリを認識させるために、APTのパッケージリストを更新します。
bash
sudo apt update -
Elasticsearchのインストール:
Elasticsearchパッケージをインストールします。
bash
sudo apt install elasticsearch
このコマンドにより、Elasticsearchとその依存関係(JVMなど、必要であれば)がインストールされます。デフォルトでは/usr/share/elasticsearch
にインストールされ、設定ファイルは/etc/elasticsearch
、データは/var/lib/elasticsearch
、ログは/var/log/elasticsearch
に配置されます。 -
システムの制限設定 (必要に応じて):
Elasticsearchはファイルディスクリプタ数やメモリマッピングに関するシステム設定を高く要求する場合があります。インストール時に自動で設定される場合もありますが、必要に応じて/etc/sysctl.d/elasticsearch.conf
や/etc/security/limits.d/elasticsearch.conf
などを編集して設定を調整します。代表的な設定項目は以下の通りです。vm.max_map_count
: プロセスのメモリマップ領域の最大数を増やします。Elasticsearchは大量のmmap領域を使用するため、最低でも262144
に設定する必要があります。
bash
# /etc/sysctl.d/elasticsearch.conf に以下を追加
vm.max_map_count=262144
# 設定を反映
sudo sysctl -p- オープンファイルディスクリプタ数: Elasticsearchユーザーのオープンファイルディスクリプタ制限を引き上げます。
bash
# /etc/security/limits.d/elasticsearch.conf に以下を追加 (ユーザー名は適宜変更)
elasticsearch - nofile 65536
elasticsearch - memlock unlimited # メモリロック設定 (ヒープスワップ抑制、後述)
これらの設定はシステムを再起動するか、ユーザーを再ログインさせることで有効になります。
-
サービスの有効化と起動:
systemdを使用してElasticsearchサービスを管理します。インストール直後はサービスが停止している場合があります。- 起動コマンド:
bash
sudo systemctl start elasticsearch - システムの起動時に自動的に開始されるように設定:
bash
sudo systemctl enable elasticsearch - ステータス確認:
bash
sudo systemctl status elasticsearch
ステータスがactive (running)
になっていれば成功です。
- 起動コマンド:
-
ログの確認:
起動に失敗した場合や、より詳細なログを確認したい場合は、journaldを使用します。
bash
sudo journalctl -u elasticsearch --since "5 minutes ago" # 最近のログを確認
または、ログファイル自体を確認します (/var/log/elasticsearch/
).
これで、Debian/UbuntuへのElasticsearchインストールは完了です。次に基本的な設定に進みます。
Linux (RHEL/CentOS/Fedora)
YUMまたはDNFパッケージマネージャーを使用してインストールします。
-
前提条件の確認:
- JDK 17 (またはElasticsearchのバージョンに応じたJDK) がインストールされていることを確認します。
curl
コマンドが利用できることを確認します (sudo yum install curl
またはsudo dnf install curl
でインストールできます)。
-
Elasticsearch Signing Keyのインポート:
Elasticsearchパッケージの署名検証に使用するGPGキーをインポートします。
bash
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch -
Elasticsearch リポジトリの追加:
YUMまたはDNFがElasticsearchパッケージを見つけられるように、リポジトリファイルを作成します。/etc/yum.repos.d/
ディレクトリにelasticsearch.repo
というファイルを作成します。
例えば、Elasticsearch 8.x系の場合:
bash
sudo nano /etc/yum.repos.d/elasticsearch.repo
ファイルに以下の内容を記述します。
ini
[elasticsearch]
name=Elasticsearch repository for 8.x packages
baseurl=https://artifacts.elastic.co/packages/8.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
8.x
の部分は、インストールしたいElasticsearchのバージョンに合わせて変更してください。例えば、7.x系であれば7.x
となります。 -
Elasticsearchのインストール:
Elasticsearchパッケージをインストールします。
bash
sudo yum install elasticsearch # または sudo dnf install elasticsearch
このコマンドにより、Elasticsearchとその依存関係がインストールされます。デフォルトのインストールディレクトリ、設定ファイル、データ、ログの場所は、Debian/Ubuntuの場合と同様です(/usr/share/elasticsearch
,/etc/elasticsearch
,/var/lib/elasticsearch
,/var/log/elasticsearch
)。 -
システムの制限設定 (必要に応じて):
Debian/Ubuntuと同様に、ファイルディスクリプタ数やメモリマッピングに関するシステム設定を調整します。vm.max_map_count
:/etc/sysctl.d/elasticsearch.conf
を編集し、vm.max_map_count=262144
を追加します。その後sudo sysctl -p
で反映します。- オープンファイルディスクリプタ数など:
/etc/security/limits.d/elasticsearch.conf
を編集し、elasticsearch - nofile 65536
,elasticsearch - memlock unlimited
などを追加します。
-
サービスの有効化と起動:
systemdを使用してElasticsearchサービスを管理します。- 起動コマンド:
bash
sudo systemctl start elasticsearch - システムの起動時に自動的に開始されるように設定:
bash
sudo systemctl enable elasticsearch - ステータス確認:
bash
sudo systemctl status elasticsearch
- 起動コマンド:
-
ログの確認:
ログは/var/log/elasticsearch/
ディレクトリに保存されます。または journald を使用します。
bash
sudo journalctl -u elasticsearch --since "5 minutes ago"
これで、RHEL/CentOS/FedoraへのElasticsearchインストールは完了です。
macOS
macOSでは、Homebrewを使用する方法が最も簡単で推奨されます。アーカイブファイルから手動でインストールすることも可能です。
Homebrewを使用する方法:
-
Homebrewのインストール (未導入の場合):
Homebrewの公式サイト (https://brew.sh/) にアクセスし、指示に従ってインストールします。通常はターミナルで以下のコマンドを実行します。
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
インストール後、指示に従ってPATHを設定してください。 -
Elasticsearchのインストール:
Homebrewを使用してElasticsearchをインストールします。
bash
brew install elasticsearch
これにより、Homebrewのセルラーディレクトリ (/usr/local/Cellar
または/opt/homebrew/Cellar
on Apple Silicon) にElasticsearchがインストールされます。依存関係としてJDKがインストールされる場合もありますが、自分で適切なJDKをインストールしておくことを推奨します。 -
サービスの起動と停止:
Homebrewのサービス管理機能を使用してElasticsearchを起動、停止、再起動できます。- 起動コマンド:
bash
brew services start elasticsearch - 停止コマンド:
bash
brew services stop elasticsearch - 再起動コマンド:
bash
brew services restart elasticsearch - ステータス確認:
bash
brew services list
サービスの自動起動設定も Homebrew で行われます。
- 起動コマンド:
-
設定ファイルとログの場所:
- 設定ファイル (
elasticsearch.yml
):brew info elasticsearch
を実行すると、設定ファイルのパスが表示されます。通常は/usr/local/etc/elasticsearch/
または/opt/homebrew/etc/elasticsearch/
にあります。 - ログファイル: 通常は
/usr/local/var/log/elasticsearch/
または/opt/homebrew/var/log/elasticsearch/
にあります。
- 設定ファイル (
アーカイブファイルを使用する方法:
-
Elasticsearchのダウンロード:
Elastic公式サイトのダウンロードページから、macOS用の.tar.gz
アーカイブファイルをダウンロードします。
例:wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-8.x.y-darwin-x86_64.tar.gz
(バージョンとアーキテクチャは適宜変更) -
アーカイブの展開:
ダウンロードしたファイルを任意のディレクトリ (例:/usr/local/elasticsearch
または$HOME/Applications/elasticsearch
) に展開します。
bash
tar -xzf elasticsearch-8.x.y-darwin-x86_64.tar.gz
# 展開されたディレクトリに移動 (ディレクトリ名はバージョンによる)
cd elasticsearch-8.x.y -
手動での起動:
展開したディレクトリのbin
サブディレクトリにある実行ファイルを実行してElasticsearchを起動します。
bash
./bin/elasticsearch
このコマンドはフォアグラウンドでElasticsearchを起動します。ターミナルを閉じるとElasticsearchも終了します。バックグラウンドで実行したい場合は、nohup
コマンドなどを使用します。
bash
nohup ./bin/elasticsearch &
ログはデフォルトではコンソールに出力されますが、設定ファイル (config/elasticsearch.yml
) でログファイルの出力先を指定することも可能です。 -
設定ファイルとログの場所:
- 設定ファイル (
elasticsearch.yml
): 展開したディレクトリ内のconfig/
サブディレクトリにあります。 - ログファイル: デフォルトでは
logs/
サブディレクトリに保存されます。
- 設定ファイル (
これで、macOSへのElasticsearchインストールは完了です。
Windows
Windowsでは、ZIPアーカイブファイルを使用する方法が一般的です。MSIインストーラーも存在していましたが、最新版ではZIP/TGZが推奨されています。
-
Elasticsearchのダウンロード:
Elastic公式サイトのダウンロードページから、Windows用の.zip
アーカイブファイルをダウンロードします。
例: ブラウザでダウンロードページにアクセスし、Windows 64-bit ZIP Archive を選択します。 -
アーカイブの展開:
ダウンロードしたファイルを任意のディレクトリ (例:C:\elasticsearch
) に展開します。展開されたディレクトリには、バージョン番号が付いたディレクトリが含まれている場合があります。例:C:\elasticsearch\elasticsearch-8.x.y
-
コマンドプロンプト/PowerShellからの起動:
展開したディレクトリ内のbin
サブディレクトリに移動し、elasticsearch.bat
ファイルを実行します。
cmd
C:\> cd C:\elasticsearch\elasticsearch-8.x.y\bin
C:\elasticsearch\elasticsearch-8.x.y\bin> elasticsearch.bat
PowerShellの場合:
powershell
PS C:\> Set-Location C:\elasticsearch\elasticsearch-8.x.y\bin
PS C:\elasticsearch\elasticsearch-8.x.y\bin> .\elasticsearch.bat
このコマンドはフォアグラウンドでElasticsearchを起動します。コマンドプロンプト/PowerShellウィンドウを閉じるとElasticsearchも終了します。Windowsサービスとしての実行:
Elasticsearchには、Windowsサービスとしてインストール・実行するための専用ツール(Service ManagerまたはPowerShellスクリプト)が付属しています。本記事では簡単な手動起動に留めますが、本番環境などではサービスとして実行することを検討してください。これにより、システムの起動時に自動的にElasticsearchが起動し、バックグラウンドで実行されるようになります。詳細はElasticsearchの公式ドキュメント「Install Elasticsearch with Windows Service」を参照してください。 -
設定ファイルとログの場所:
- 設定ファイル (
elasticsearch.yml
): 展開したディレクトリ内のconfig\
サブディレクトリにあります。 - ログファイル: デフォルトでは
logs\
サブディレクトリに保存されます。
- 設定ファイル (
これで、WindowsへのElasticsearchインストールは完了です。
Dockerを使用する方法
Dockerがインストールされている前提で説明します。
-
Elasticsearchイメージの取得:
Docker HubからElasticsearchの公式イメージを取得します。タグを指定しない場合は最新版がダウンロードされます。特定のバージョンを指定することを推奨します。
bash
docker pull elasticsearch:8.x.y # 8.x.y はインストールしたいバージョンに置き換える -
コンテナの起動 (単一ノードの基本例):
以下のコマンドでElasticsearchコンテナを起動します。これは単一ノードの開発/テスト用の簡単な例です。
bash
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-e "xpack.security.enabled=false" \
elasticsearch:8.x.y-d
: デタッチモードでバックグラウンド実行--name elasticsearch
: コンテナにelasticsearch
という名前を付ける-p 9200:9200
: ホストの9200ポートをコンテナの9200ポートにマッピング (HTTPアクセス用)-p 9300:9300
: ホストの9300ポートをコンテナの9300ポートにマッピング (Transport通信用、必須ではないが慣例)-e "discovery.type=single-node"
: 単一ノードクラスターとして起動するための設定。プロダクション環境では使用しません。-e "xpack.security.enabled=false"
: セキュリティ機能を無効にする設定 (8.x系ではデフォルト有効ですが、この例では簡単のために無効にしています。本番環境では絶対に無効にしないでください! 後述の8.x系セキュリティ設定を参考に、有効化したまま起動してください)。
8.x系のセキュリティを有効にしたままDockerで起動する例:
8.x系ではセキュリティがデフォルトで有効です。初回起動時にパスワードなどが生成されます。以下のコマンドは、セキュリティを有効にしたまま起動する基本的な例です。データ永続化のため、ボリュームマウントも行っています。
bash
docker run -d \
--name elasticsearch \
-p 9200:9200 \
-p 9300:9300 \
-e "discovery.type=single-node" \
-v elasticsearch-data:/usr/share/elasticsearch/data \
elasticsearch:8.x.y
*-v elasticsearch-data:/usr/share/elasticsearch/data
:elasticsearch-data
という名前付きボリュームを作成し、コンテナのデータディレクトリ (/usr/share/elasticsearch/data
) にマウントします。これにより、コンテナを停止・削除してもデータが保持されます。注意: このコマンドで8.x系を起動すると、標準出力またはログファイルに
elastic
ユーザーのパスワードや Enrollment Token が出力されます。これらの情報はKibanaへの接続や他のツールとの連携に必要なので、必ず控えてください。 -
コンテナの状態確認:
bash
docker ps
コンテナがUp
状態になっていれば起動成功です。 -
ログの確認:
起動時のログやエラーを確認します。
bash
docker logs elasticsearch -
コンテナの停止と削除:
bash
docker stop elasticsearch
docker rm elasticsearch -
Docker Composeの使用 (推奨):
複数のコンテナ (Elasticsearch, Kibanaなど) をまとめて管理する場合、Docker Composeを使用するのが便利です。docker-compose.yml
ファイルを作成します。
例 (docker-compose.yml
):
“`yaml
version: ‘3.8’services:
elasticsearch:
image: elasticsearch:8.x.y # バージョンを指定
container_name: elasticsearch
environment:
– discovery.type=single-node # 開発/テスト用
# 8.x系でセキュリティ有効の場合、これらは不要 (デフォルト有効)
# – xpack.security.enabled=true
# – xpack.security.enrollment.enabled=true
# – xpack.security.http.ssl.enabled=true
# – xpack.security.transport.ssl.enabled=true
volumes:
– elasticsearch-data:/usr/share/elasticsearch/data # データ永続化
ports:
– “9200:9200”
– “9300:9300” # クラスター通信用 (単一ノードでは必須ではないが含めておく)
ulimits: # Linuxホストの場合に推奨される設定
memlock:
soft: -1
hard: -1
# healthcheck: # ヘルスチェック設定 (任意)
# test: [“CMD-DU”, “curl”, “-f”, “http://localhost:9200”]
# interval: 10s
# timeout: 5s
# retries: 10volumes:
elasticsearch-data:
driver: local
このファイルがあるディレクトリで以下のコマンドを実行して起動します。
bash
docker-compose up -d
``
docker-compose down` です。
停止は
これで、Dockerを使ったElasticsearchのインストールと起動は完了です。
Elasticsearchの基本的な設定
Elasticsearchの挙動を制御する主要な設定ファイルは elasticsearch.yml
です。このファイルは、インストール方法によって場所が異なります。
- パッケージインストール (DEB/RPM):
/etc/elasticsearch/elasticsearch.yml
- アーカイブインストール (ZIP/TGZ): 展開したディレクトリ内の
config/elasticsearch.yml
- Homebrew (macOS):
brew info elasticsearch
で表示されるパス (例:/usr/local/etc/elasticsearch/elasticsearch.yml
) - Docker: コンテナ内の
/usr/share/elasticsearch/config/elasticsearch.yml
に該当しますが、通常はコンテナ起動時の環境変数やボリュームマウントで設定を上書きまたは追加します。
elasticsearch.yml
はYAML形式で記述されており、多くの設定項目がコメントアウトされています。デフォルト値が設定されている項目が多く、必要に応じてコメントを外して値を変更します。
必須または重要な初期設定項目
インストール後に最低限確認・設定しておきたい項目です。
-
node.name
: ノードの名前を設定します。クラスター内の各ノードは一意の名前を持つ必要があります。ログなどでノードを識別するのに役立ちます。デフォルトではランダムな名前が付きますが、分かりやすい名前を設定することを推奨します。
yaml
node.name: my-elasticsearch-node-1 -
cluster.name
: クラスターの名前を設定します。同じクラスター名を持つノード同士が互いを認識し、クラスターを形成します。デフォルトはelasticsearch
です。特に複数のElasticsearchクラスターが同じネットワーク上に存在する可能性がある場合は、ユニークな名前を設定することが重要です。
yaml
cluster.name: my-application-cluster -
network.host
: ElasticsearchがどのIPアドレスでHTTPおよびTransport通信を待ち受けるかを設定します。localhost
: ローカルマシンからのアクセスのみ許可します (デフォルト)。_local_
: ループバックアドレスとローカルNICのIPアドレスの両方で待ち受けます。_site_
: サイトローカルアドレス (プライベートIPアドレス) で待ち受けます。_global_
: グローバルアドレス (パブリックIPアドレス) で待ち受けます。- 特定のIPアドレス: 指定したIPアドレスで待ち受けます。
0.0.0.0
: 全てのインターフェースで待ち受けます (セキュリティリスクがあるため、ファイアウォールなどで適切にアクセス元を制限してください)。
開発環境でローカルマシン以外のPCからアクセスする場合や、複数のノードでクラスターを組む場合は、_site_
やノードのプライベートIPアドレスなどを設定する必要があります。
yaml
network.host: _site_ # プライベートIPで待ち受ける例
-
http.port
: HTTP通信に使用するポートを設定します。デフォルトは9200
です。
yaml
http.port: 9200 -
transport.port
: クラスター内のノード間通信に使用するポートを設定します。デフォルトは9300
です。このポートは、同じクラスター名のノードが互いを発見し、通信するために使用されます。ファイアウォールでノード間の9300ポート通信を許可する必要があります。
yaml
transport.port: 9300 -
path.data
: インデックスデータ、シャードデータ、メタデータなどが保存されるディレクトリを設定します。デフォルトではインストールディレクトリ内のdata
サブディレクトリになりますが、OSによっては/var/lib/elasticsearch
のようなシステムデフォルトパスになります。プロダクション環境では、データが失われないように、専用のディスクまたはパーティションをマウントしたディレクトリを指定することを強く推奨します。複数のパスを指定すると、それらをラウンドロビンで使用します。
yaml
path.data: /path/to/your/data/directory -
path.logs
: ログファイルが保存されるディレクトリを設定します。デフォルトではインストールディレクトリ内のlogs
サブディレクトリまたは/var/log/elasticsearch
のようなシステムデフォルトパスになります。
yaml
path.logs: /path/to/your/logs/directory -
discovery.seed_hosts
: クラスターを組む際に、初期のノードが他のノードを発見するために使用する、既知のノードのリストを指定します。単一ノード構成の場合は設定不要、またはdiscovery.type: single-node
を設定します。複数のノードでクラスターを組む場合は、ここに他のノードのIPアドレスやホスト名をリスト形式で指定します。
yaml
# 複数のノードでクラスターを組む場合の設定例
discovery.seed_hosts: ["host1", "host2:9300", "192.168.1.10"] -
cluster.initial_master_nodes
: クラスターの初回起動時に、マスターノードとして立候補するノードのnode.name
のリストを指定します。これにより、新しいクラスターが形成される際に、どのノードが初期のマスター資格ノードとなるかが明確になります。プロダクション環境で複数ノードのクラスターを組む場合は必須の設定です。単一ノード構成でdiscovery.type: single-node
を設定している場合は不要です。
yaml
# クラスターを構成する最初のマスター候補ノードの名前リスト
cluster.initial_master_nodes: ["node-name-1", "node-name-2"]
単一ノードでDockerコンテナを使用し、discovery.type: single-node
を設定する場合は、これらの発見モジュールに関する設定は不要です。
メモリ設定 (jvm.options
)
Elasticsearchのパフォーマンスに最も大きな影響を与える設定の一つがJVMのヒープサイズです。Elasticsearchはデータの一部や内部キャッシュをJVMヒープに保持します。ヒープサイズが小さすぎると OutOfMemoryError
が発生したり、ガベージコレクションが頻繁に発生してパフォーマンスが低下します。大きすぎると、JVMの起動時間が長くなったり、システムの利用可能なメモリを圧迫してOSによるスワップ発生のリスクが高まります。
JVMのヒープサイズは、jvm.options
というファイルで設定します。このファイルは elasticsearch.yml
と同じディレクトリにあります。ヒープサイズは -Xms
(初期ヒープサイズ) と -Xmx
(最大ヒープサイズ) オプションで設定します。これらの値は同じに設定することが推奨されており、これによりJVMがヒープサイズを動的に調整する必要がなくなり、ガベージコレクションの効率が向上します。
“`
jvm.options ファイル内の設定例
-Xms4g # 最小ヒープサイズを4GBに設定
-Xmx4g # 最大ヒープサイズを4GBに設定
“`
ヒープサイズの推奨値は、サーバーの物理メモリの約半分、かつ32GBを超えないようにすることが一般的です。32GBを超えると、JavaのCompressed Ordinary Object Pointers (Compressed Oops) が使えなくなり、ポインタサイズが倍増するため、メモリ効率が逆に低下する可能性があります。例えば、サーバーに64GBのメモリがある場合、ヒープサイズは30GB程度に設定するのが良いでしょう。残りのメモリはOSやElasticsearchがファイルシステムキャッシュとして使用します。ファイルシステムキャッシュは、頻繁にアクセスされるインデックスデータをOSがメモリにキャッシュするために非常に重要です。
また、メモリロック (memlock
) の設定も重要です。これは、Elasticsearchのヒープメモリがディスクにスワップアウトされるのを防ぐ設定です。スワップアウトが発生すると、ディスクI/Oが発生し、Elasticsearchのパフォーマンスが劇的に低下します。jvm.options
ファイルで -XX:+DisableExplicitGC
の行をアンコメントし、/etc/security/limits.d/elasticsearch.conf
などで memlock unlimited
を設定することで、Elasticsearchがヒープをロックできるようになります。
その他の重要な設定
- セキュリティ設定 (X-Pack Basic Security): Elasticsearch 7.x以降、X-Packの基本セキュリティ機能(認証、ロールベースアクセス制御、TLS暗号化など)は無償で利用できるようになりました。そして 8.x系からは、これらのセキュリティ機能がデフォルトで有効になっています。これにより、インストール直後からHTTP/Transport通信がTLSで暗号化され、ユーザー認証が必要になります。このデフォルト設定はセキュリティ強化に大きく貢献しますが、設定手順が少し複雑になります (後述)。開発やテスト目的で一時的に無効にしたい場合は、
elasticsearch.yml
でxpack.security.enabled: false
と設定することも可能ですが、本番環境では絶対に無効にしないでください。 - パス設定 (
path.data
,path.logs
): 前述の通り、データの永続性と管理の観点から、これらのパスは適切に設定することが重要です。 - 役割設定 (
node.roles
): 大規模なクラスターでは、ノードに特定の役割(マスター、データ、インジェスト、マシーンラーニングなど)を割り当てることで、クラスターの安定性と効率を高めることができます。単一ノード構成では通常すべての役割を持ちます。
設定変更後の反映方法
elasticsearch.yml
や jvm.options
ファイルを変更した場合は、Elasticsearchサービスを再起動する必要があります。
- パッケージインストール (systemd):
bash
sudo systemctl restart elasticsearch - アーカイブインストール (手動起動):
Elasticsearchプロセスを終了させ、再度起動コマンドを実行します。 - Homebrew:
bash
brew services restart elasticsearch - Docker:
コンテナを再起動します。
bash
docker restart elasticsearch
Docker Composeの場合はdocker-compose restart elasticsearch
またはdocker-compose up -d
を使用します。
Elasticsearchの起動と確認
設定が完了したら、Elasticsearchを起動し、正しく動作しているか確認します。
サービスの起動
インストール方法によって起動コマンドが異なります。
-
パッケージインストール (DEB/RPM) – systemd:
bash
sudo systemctl start elasticsearch
# システム起動時に自動起動したい場合
sudo systemctl enable elasticsearch -
アーカイブインストール (ZIP/TGZ):
Elasticsearchをインストールしたディレクトリに移動し、bin/elasticsearch
(Linux/macOS) またはbin\elasticsearch.bat
(Windows) を実行します。
bash
# Linux/macOS
/path/to/elasticsearch/bin/elasticsearch
# Windows (コマンドプロンプト)
C:\path\to\elasticsearch\bin\elasticsearch.bat
デフォルトではフォアグラウンドで起動します。バックグラウンド実行やサービス登録の方法はOSによって異なります(前述)。 -
Homebrew (macOS):
bash
brew services start elasticsearch -
Docker:
コンテナを起動します(前述のdocker run
またはdocker-compose up -d
コマンドを使用)。既に起動している場合は不要です。
起動状態の確認
サービスが起動したことを確認します。
-
パッケージインストール (systemd):
bash
sudo systemctl status elasticsearch
active (running)
と表示されれば成功です。エラーが表示されている場合は、ログを確認してください。 -
アーカイブインストール (手動起動):
起動したターミナルに表示されるログメッセージを確認します。エラーが出ていないか、そして以下のようなメッセージが表示されているかを確認します。
... [INFO ][o.e.n.Node ] [node-name] starting ...
... [INFO ][o.e.t.TransportService ] [node-name] publish_address {127.0.0.1:9300}, bound_addresses {[::1]:9300}, {127.0.0.1:9300}
... [INFO ][o.e.h.AbstractHttpServer ] [node-name] publish_address {127.0.0.1:9200}, bound_addresses {[::1]:9200}, {127.0.0.1:9200}
... [INFO ][o.e.n.Node ] [node-name] started
特にstarted
のメッセージと、publish_address に設定したnetwork.host
とポートが表示されているかを確認します。 -
Homebrew:
bash
brew services list
elasticsearchのステータスがstarted
になっていることを確認します。 -
Docker:
bash
docker ps
elasticsearchコンテナがUp
状態になっていることを確認します。ログはdocker logs elasticsearch
で確認できます。
APIアクセスによる確認
ElasticsearchはRESTful APIを提供しています。curl
コマンドやWebブラウザを使って、APIにアクセスし、正常に応答するかを確認するのが最も確実な方法です。
デフォルト設定でElasticsearchがローカルホストの9200ポートで待ち受けている場合、以下のコマンドを実行します。
bash
curl http://localhost:9200
セキュリティが有効になっていない場合、以下のようなJSON形式のレスポンスが返ってきます。
json
{
"name" : "my-elasticsearch-node-1",
"cluster_name" : "my-application-cluster",
"cluster_uuid" : "...",
"version" : {
"number" : "8.x.y",
"build_flavor" : "default",
"build_type" : "...",
"build_hash" : "...",
"build_date" : "...",
"build_snapshot" : false,
"lucene_version" : "...",
"minimum_wire_compatibility_version" : "...",
"minimum_index_compatibility_version" : "..."
},
"tagline" : "You Know, for Search"
}
name
, cluster_name
, version
などの情報が表示されていれば、Elasticsearchは正常に起動し、APIリクエストに応答しています。ブラウザで http://localhost:9200
にアクセスしても同じJSONが表示されます。
8.x系の初期セットアップ (セキュリティ有効時)
Elasticsearch 8.x系では、インストール直後の起動時にセキュリティ機能(TLSとBasic認証)がデフォルトで有効になります。これにより、APIアクセス時には認証情報が必要になります。
-
初回起動時の認証情報取得:
初めて8.x系を起動すると、ログに以下のような重要な情報が出力されます。elastic
ユーザーのパスワード- Kibanaを接続するための Enrollment Token
...
-> The elastic user password is : XXXXXXXXXXXXXXXXXX
-> The enrollment token for Kibana is : YYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYYY
...
これらの情報は非常に重要なので、必ず控えてください。
-
APIアクセス (認証が必要):
セキュリティが有効な場合、http://localhost:9200
へのアクセスは認証エラー (HTTPステータスコード 401 Unauthorized) となります。アクセスするには、控えておいたelastic
ユーザーとパスワードを使用します。
bash
curl -u elastic:<password> http://localhost:9200
<password>
の部分を控えておいたelastic
ユーザーのパスワードに置き換えて実行してください。正しく認証されれば、前述のJSONレスポンスが表示されます。 -
パスワードのリセット (必要なら):
初回起動時に生成されたパスワードが気に入らない場合や忘れてしまった場合、elasticsearch-setup-passwords
ツールを使ってパスワードをリセットできます。このツールはElasticsearchのbin
ディレクトリにあります。
“`bash
# Linux/macOS
./bin/elasticsearch-setup-passwords interactiveWindows (コマンドプロンプト)
.\bin\elasticsearch-setup-passwords.bat interactive
``
elastic
このコマンドを実行すると、ユーザーを含む各組み込みユーザーのパスワードを対話形式で設定できます。自動モード (
auto`) もあります。 -
Kibanaへの接続:
KibanaをインストールしてElasticsearchに接続する際、この Enrollment Token を使用すると、証明書の設定や認証情報の入力なしに簡単に接続設定が完了します。Kibanaのセットアップ手順の中でトークン入力が求められます。
注意: Dockerで8.x系を起動した場合も、ログ (docker logs <container_name>
) に認証情報が出力されます。
簡単なデータの投入と検索(動作確認)
Elasticsearchが起動したら、実際にデータを投入して検索できるか確認してみましょう。ここでは、ElasticsearchのREST APIに直接 curl
コマンドでアクセスする方法と、後述するKibanaのDev Toolsを使用する方法を紹介します。Kibanaを使う方がGUIで分かりやすいですが、ここではまず curl
で基本的な動作を確認します。
※ 8.x系でセキュリティが有効な場合は、以下の curl
コマンドに -u elastic:<password>
オプションを追加してください。
-
インデックスの作成:
Elasticsearchはリレーショナルデータベースのテーブルに相当する「インデックス」にデータを保存します。インデックスはスキーマレスですが、必要に応じてマッピング(フィールドの型定義など)を事前に定義することも可能です。ここでは、マッピングを指定せずにmy_index
という名前のインデックスを作成します。
bash
curl -X PUT "http://localhost:9200/my_index"
成功すると、以下のようなレスポンスが返ります。
json
{"acknowledged":true,"shards_acknowledged":true,"index":"my_index"} -
ドキュメントの追加 (登録):
ElasticsearchはJSON形式の「ドキュメント」を保存します。リレーショナルデータベースの行に相当します。各ドキュメントは特定のインデックス内に保存され、ユニークなIDを持ちます。ドキュメントを追加するにはPOST
またはPUT
メソッドを使用します。IDを指定する場合はPUT /<index>/_doc/<id>
、IDを自動生成する場合はPOST /<index>/_doc
を使用します。
IDを自動生成してドキュメントを追加します。
bash
curl -X POST "http://localhost:9200/my_index/_doc" -H "Content-Type: application/json" -d'
{
"title": "はじめてのElasticsearch",
"author": "太郎 山田",
"published_date": "2023-01-15",
"content": "Elasticsearchのインストールとセットアップは思ったより簡単でした。"
}
'
成功すると、以下のようなレスポンスが返ります。_id
に自動生成されたドキュメントIDが含まれています。
json
{
"_index": "my_index",
"_type": "_doc",
"_id": "...", # 自動生成されたID
"_version": 1,
"result": "created",
"_shards": {
"total": 2,
"successful": 1,
"failed": 0
},
"_seq_no": 0,
"_primary_term": 1
}
さらにいくつかドキュメントを追加してみましょう。
“`bash
curl -X POST “http://localhost:9200/my_index/_doc” -H “Content-Type: application/json” -d’
{
“title”: “ElasticsearchとKibana連携”,
“author”: “花子 佐藤”,
“published_date”: “2023-02-20”,
“content”: “Kibanaを使うとデータの可視化が簡単にできます。”
}
‘curl -X POST “http://localhost:9200/my_index/_doc” -H “Content-Type: application/json” -d’
{
“title”: “ログ分析入門”,
“author”: “太郎 山田”,
“published_date”: “2023-03-10”,
“content”: “LogstashとBeatsを使ってログを収集し、Elasticsearchに送ります。”
}
‘
“` -
データの取得:
特定のドキュメントを取得するには、GET /<index>/_doc/<id>
を使用します。IDは、ドキュメント追加時のレスポンスで確認したIDを指定します。
bash
# 前のステップで自動生成されたIDに置き換えてください
curl -X GET "http://localhost:9200/my_index/_doc/自動生成されたID"
ドキュメントの内容を含むレスポンスが返ります。 -
インデックス内の全ドキュメント検索:
インデックス内のすべてのドキュメントを検索するには、GET /<index>/_search
を使用します。クエリを指定しない場合は、すべてのドキュメントが返されます (ただしデフォルトでは上位10件)。
bash
curl -X GET "http://localhost:9200/my_index/_search"
追加したドキュメントがhits
配列に含まれてレスポンスされます。 -
簡単なキーワード検索:
特定のキーワードを含むドキュメントを検索するには、リクエストボディに検索クエリ (Query DSL) を指定します。
例えば、「インストール」というキーワードを含むドキュメントを検索します。
bash
curl -X GET "http://localhost:9200/my_index/_search" -H "Content-Type: application/json" -d'
{
"query": {
"match": {
"content": "インストール"
}
}
}
'
content
フィールドに「インストール」という単語が含まれるドキュメントがヒットするはずです。
これで、Elasticsearchがデータの保存と検索の基本的な操作を実行できることが確認できました。
Kibanaのインストールとセットアップ (オプションだが重要)
Elasticsearch単体でもREST APIを介して操作できますが、より直感的にデータの投入、検索、分析、そしてElasticsearchクラスターの管理を行うには、KibanaというUIツールを使うのが一般的です。KibanaはElastic Stackの一部であり、Elasticsearchのデータを探索・可視化するための強力な機能を提供します。
KibanaはElasticsearchと同じバージョンまたは互換性のあるバージョンをインストールする必要があります。インストール方法はElasticsearchと類似しており、パッケージ、アーカイブ、Dockerなどがあります。ここでは、Elasticsearchと同じ方法でのインストール手順の概要を説明します。
Kibanaのインストール
Linux (DEB/RPM):
Elasticsearchと同じリポジトリを使ってインストールします。
“`bash
Debian/Ubuntu
sudo apt update
sudo apt install kibana
RHEL/CentOS/Fedora
sudo yum update # または dnf update
sudo yum install kibana # または dnf install kibana
``
kibana.yml
インストールディレクトリ、設定ファイル () の場所などはElasticsearchと同様のルールに従います (例: 設定ファイルは
/etc/kibana/kibana.yml`)。
macOS (Homebrew):
bash
brew install kibana
設定ファイル (kibana.yml
) は brew info kibana
で確認できます (例: /usr/local/etc/kibana/kibana.yml
)。
Windows (ZIP):
Elastic公式サイトからWindows用ZIPアーカイブをダウンロードし、展開します。
展開したディレクトリ内の bin\kibana.bat
で起動します。
設定ファイル (kibana.yml
) は展開したディレクトリ内の config\
にあります。
Docker:
Kibanaの公式Dockerイメージを取得します。
bash
docker pull kibana:8.x.y # Elasticsearchのバージョンと合わせる
Kibanaコンテナを起動します。多くの場合、Elasticsearchコンテナと同じネットワークで起動し、Elasticsearchコンテナの名前やIPアドレスを指定して接続します。Docker Composeを使うのが便利です(前述のdocker-compose.ymlにKibanaサービスを追加するなど)。
例 (docker-compose.yml
にKibanaを追加):
“`yaml
version: ‘3.8’
services:
elasticsearch:
# … elasticsearchの設定 (前述と同じ)
networks:
– elastic-net # Kibanaと同じネットワークに入れる
kibana:
image: kibana:8.x.y # Elasticsearchのバージョンと合わせる
container_name: kibana
ports:
– “5601:5601” # ホストの5601ポートをコンテナの5601ポートにマッピング (Kibana UI用)
environment:
# Kibanaが接続するElasticsearchのエンドポイントを指定
# Docker Composeのサービス名で指定できる
– ELASTICSEARCH_HOSTS=http://elasticsearch:9200
# 8.x系でセキュリティ有効の場合、認証情報を指定 (推奨されない方法。Enrollment Tokenがより安全)
# – ELASTICSEARCH_USERNAME=elastic
# – ELASTICSEARCH_PASSWORD=your_password
networks:
– elastic-net # Elasticsearchと同じネットワークに入れる
depends_on:
– elasticsearch # Elasticsearchコンテナが起動してからKibanaを起動
# healthcheck: # ヘルスチェック設定 (任意)
# test: [“CMD-DU”, “curl”, “-sf”, “http://localhost:5601/api/status”]
# interval: 10s
# timeout: 5s
# retries: 10
volumes:
elasticsearch-data:
driver: local
networks:
elastic-net: # コンテナ間通信用のネットワークを定義
driver: bridge
``
docker-compose.yml
こので
docker-compose up -d` を実行すると、ElasticsearchとKibanaが連携して起動します。
Kibanaの基本的な設定 (kibana.yml
)
Kibanaの主要な設定ファイルは kibana.yml
です。
server.port
: Kibanaが待ち受けるポートを設定します。デフォルトは5601
です。
yaml
server.port: 5601server.host
: Kibanaが待ち受けるIPアドレスを設定します。Elasticsearchのnetwork.host
と同様に設定します。localhost
(デフォルト) 以外からアクセスする場合や、コンテナ環境の場合は適切に設定する必要があります。
yaml
server.host: "0.0.0.0" # 全てのインターフェースで待ち受ける例 (アクセス制限は別途行う)-
elasticsearch.hosts
: Kibanaが接続するElasticsearchのエンドポイントを指定します。Elasticsearchのnetwork.host
とhttp.port
で指定したIPアドレスとポートを指定します。複数のElasticsearchノードを指定することも可能です。
yaml
elasticsearch.hosts: ["http://localhost:9200"] # 単一ローカルノードの場合
# 複数のノードの場合
# elasticsearch.hosts: ["http://192.168.1.10:9200", "http://192.168.1.11:9200"]
Docker Composeの例のように、同じDockerネットワーク上のElasticsearchサービス名で指定することもできます。 -
elasticsearch.username
/elasticsearch.password
(8.x系セキュリティ有効時): 8.x系でElasticsearchのセキュリティが有効な場合、KibanaがElasticsearchに接続する際に認証情報が必要です。kibana.yml
にelastic
ユーザーのパスワードを直接記述することも可能ですが、これはセキュリティ上推奨されません。
8.x系セキュリティ有効時のKibanaセットアップ
8.x系では、KibanaをElasticsearchに接続する最も簡単な方法は、Elasticsearchの初回起動時に取得した Enrollment Token を使用することです。
-
Kibanaの起動:
Elasticsearchと同様に、各OSのサービス管理ツールや手動、DockerなどでKibanaを起動します。- パッケージインストール (systemd):
bash
sudo systemctl start kibana
sudo systemctl enable kibana - Homebrew:
bash
brew services start kibana - アーカイブ/ZIP:
bin/kibana
またはbin\kibana.bat
を実行します。 - Docker Compose:
docker-compose up -d
を実行します (前述のkibanaサービスを含む場合)。
- パッケージインストール (systemd):
-
Kibanaへのアクセス:
Kibanaが起動したら、Webブラウザでhttp://<kibanaのホスト名またはIPアドレス>:5601
にアクセスします。
デフォルト設定でローカル環境であればhttp://localhost:5601
にアクセスします。 -
Elasticsearchへの接続設定 (Enrollment Token):
8.x系でElasticsearchのセキュリティが有効な場合、Kibanaに初めてアクセスすると、Elasticsearchへの接続設定画面が表示されます。「Connect to your Elasticsearch instance」という画面が表示され、Enrollment Token の入力を求められます。
ここに、Elasticsearchの初回起動時にログに出力された Enrollment Token をコピー&ペーストして「Configure Elastic」ボタンをクリックします。 -
認証:
Enrollment Tokenでの接続が成功すると、次にKibanaへのログイン画面が表示されます。
デフォルトの組み込みユーザーとしてelastic
ユーザーがいますので、Elasticsearchの初回起動時に控えておいたelastic
ユーザーのパスワードでログインします。
ログインに成功すると、Kibanaのホーム画面が表示されます。
Enrollment Tokenを使用することで、証明書の設定や秘密鍵の管理などを行わずに、安全にKibanaとElasticsearchを連携させることができます。
KibanaのDev Toolsの使い方
Kibanaにログインできたら、「Management」または「Dev Tools」セクションに移動します。Dev Toolsを使うと、ElasticsearchのREST APIリクエストをGUI上で簡単に実行できます。前述の curl
コマンドで行った操作(インデックス作成、ドキュメント追加、検索など)をここで行うことができます。
左側のエディタペインにAPIリクエストを記述し、右側のコンソールペインで結果を確認できます。
例えば、インデックス my_index
の全てのドキュメントを検索するには、以下のように記述して実行ボタン(▶︎)をクリックします。
json
GET /my_index/_search
ドキュメントを追加するには:
json
POST /my_index/_doc
{
"title": "Kibanaからドキュメント追加",
"content": "Dev Toolsを使うと便利です。"
}
Dev Toolsは、Elasticsearch APIを試したり、デバッグしたりするのに非常に便利なツールです。
トラブルシューティング
Elasticsearchのインストールや起動、運用中に発生しうる一般的な問題とその対処法について説明します。
-
Elasticsearchが起動しない:
- ログの確認: まずはElasticsearchのログファイル(
/var/log/elasticsearch/
またはインストールディレクトリのlogs/
)や systemd の journald (sudo journalctl -u elasticsearch
) を確認します。起動に失敗した原因を示すエラーメッセージが出力されているはずです。 - Javaバージョンの確認: インストールされているJDKのバージョンがElasticsearchのバージョンと互換性があるか確認します。
- システムの制限:
vm.max_map_count
やオープンファイルディスクリプタ数の制限がElasticsearchの要求を満たしているか確認します。ログに警告やエラーが出力されている場合があります。 - メモリ不足:
OutOfMemoryError
がログに出ている場合、JVMヒープサイズが不足している可能性があります。jvm.options
でヒープサイズ (-Xms
,-Xmx
) を増やしてみてください。ただし、物理メモリの上限を超えないように注意が必要です。 - ディスク容量: データディレクトリのディスク容量が不足している場合、起動に失敗することがあります。
df -h
コマンドなどで空き容量を確認します。 - 設定ファイルの誤り:
elasticsearch.yml
やjvm.options
ファイルに構文エラーや誤った設定がないか確認します。YAML形式のインデントやスペルミスなどに注意が必要です。
- ログの確認: まずはElasticsearchのログファイル(
-
Elasticsearchに接続できない (APIアクセスできない):
- Elasticsearchは起動しているか?: まず、Elasticsearchサービス自体が正常に起動しているか確認します (systemctl status, docker psなど)。
- ネットワーク設定:
elasticsearch.yml
のnetwork.host
設定が適切か確認します。localhost
になっている場合、リモートからのアクセスはできません。外部からのアクセスが必要な場合は、適切なIPアドレスや0.0.0.0
などを設定します (ただしセキュリティに注意)。 - ファイアウォール: Elasticsearchが使用するポート (デフォルトでHTTP: 9200, Transport: 9300) が、ファイアウォールで閉じられていないか確認します。
telnet <host> <port>
やnc -vz <host> <port>
コマンドでポートが開いているか確認できます。 - セキュリティ設定 (8.x系): 8.x系でセキュリティが有効な場合、APIアクセスには認証が必要です。ユーザー名とパスワードが正しいか、
curl
コマンドで-u
オプションを正しく使用しているか確認します。TLS/SSL関連のエラーが出ている場合は、証明書設定に問題がある可能性があります。
-
KibanaがElasticsearchに接続できない:
- KibanaとElasticsearchの起動: 両方のサービスが正常に起動しているか確認します。
- Kibanaの設定:
kibana.yml
のelasticsearch.hosts
設定が正しいElasticsearchのエンドポイントを指しているか確認します。IPアドレス、ポート、プロトコル (http/https) が正しいか再確認します。 - ネットワーク到達性: Kibanaが動作しているマシンからElasticsearchが動作しているマシンへ、指定したポート (デフォルト9200) でネットワーク的に到達可能か確認します。ファイアウォール設定などを再確認します。
- セキュリティ設定 (8.x系): 8.x系でElasticsearchのセキュリティが有効な場合、KibanaはElasticsearchに認証して接続する必要があります。Enrollment Tokenを使用した場合、トークンが正しいか、有効期限が切れていないか確認します。パスワードを使用している場合、ユーザー名とパスワードが正しいか確認します。TLS/SSL証明書の設定が必要な場合もありますが、Enrollment Tokenを使えば大部分は自動化されます。Kibanaのログ (
/var/log/kibana/
または Kibanaのコンソール出力) に接続失敗の原因が記録されている可能性が高いです。
-
クラスターが組めない/ノードがクラスターに参加しない:
cluster.name
: クラスターに参加させたいノード全てで、elasticsearch.yml
のcluster.name
が完全に一致しているか確認します。network.host
とtransport.port
: 各ノードが、他のノードからTransportポート (デフォルト9300) でアクセス可能なIPアドレス/ホスト名とポートで待ち受けているか確認します。network.host
の設定が適切でないと、他のノードからのアクセスを受け付けられません。- ファイアウォール: ノード間でTransportポート (デフォルト9300) の通信が許可されているか確認します。
discovery.seed_hosts
とcluster.initial_master_nodes
: これらの設定が適切か確認します。特に新しいクラスターを構成する際はcluster.initial_master_nodes
が正しく設定されていることが重要です。既存クラスターに新しいノードを追加する場合は、discovery.seed_hosts
に既存のマスター候補ノードを指定する必要があります。- ノードのログ: クラスターに参加できないノードのログを詳しく確認します。発見モジュール関連のエラーが出ているはずです。
トラブルシューティングでは、ログを確認することが最も重要です。エラーメッセージを丁寧に読み、それに従って原因を特定し、対処を進めてください。ElasticsearchやKibanaの公式ドキュメントも、詳細な情報や特定のバージョンに関する既知の問題などが記載されており、トラブルシューティングの強力な味方になります。
次のステップ
Elasticsearchのインストールと基本的なセットアップが完了し、簡単なデータの投入・検索ができるようになりました。単一ノードでの動作確認はできましたが、Elasticsearchの真価は分散クラスターによるスケーラビリティと可用性にあります。
今後の学習・検討課題として、以下のようなステップに進むことができます。
- 単一ノードからクラスターへの拡張: 複数のノードを協調させて一つのクラスターを構築し、データの分散、レプリケーション、検索負荷の分散を実現します。
discovery.seed_hosts
やcluster.initial_master_nodes
設定が重要になります。 - シャードとレプリカ: インデックスを複数のシャードに分割し、それぞれのシャードを複数のノードに配置することで、水平スケーリングと耐障害性を実現します。レプリカシャードは、プライマリシャードのコピーを作成し、データの冗長性と検索パフォーマンスの向上に貢献します。
- データ投入 (Ingestion): Logstash, Beats (Filebeat, Metricbeat, Packetbeat, Auditbeat, Heartbeatなど), Ingest Node (Elasticsearch自身のデータ変換機能) などを使って、様々なソースからElasticsearchにデータを効率的に収集・変換・投入する方法を学びます。
- 高度な検索と分析: Query DSL (Domain Specific Language) を使って、より複雑な検索クエリや集計 (Aggregation) を実行する方法を学びます。全文検索のカスタマイズ(アナライザーの設定など)や、構造化データの検索と組み合わせる方法なども重要です。
- インデックステンプレートとILM: 新しいインデックスが作成される際にデフォルト設定(マッピング、設定、エイリアスなど)を適用するためのインデックステンプレート、そして古いデータを自動的に管理(ロールオーバー、Shrink、Force Merge、Deleteなど)するためのインデックスライフサイクル管理 (ILM) を活用します。
- セキュリティの強化: ユーザー/ロール管理、フィールドレベル/ドキュメントレベルセキュリティ、IPフィルタリングなど、X-Packの高度なセキュリティ機能を活用して、本番環境でのセキュリティを強化します。8.x系でデフォルト有効になったTLSやBasic認証の設定をカスタマイズすることも含まれます。
- モニタリングとアラート: Elastic StackのMonitoring機能やアラート機能を使って、ElasticsearchクラスターやKibanaの稼働状況を監視し、問題発生時に通知を受ける仕組みを構築します。
- スナップショットとリストア: 定期的にクラスターのスナップショットを取得し、外部ストレージに保存することで、災害発生時のデータ復旧に備えます。
- キャパシティプランニング: 扱うデータ量や検索/インデックス負荷に基づいて、必要なノード数、メモリ、ディスク容量、CPUなどを計画します。
これらのステップは、Elasticsearchをより深く理解し、本番環境で安定して運用するために不可欠です。Elastic社の公式ドキュメント、ウェビナー、トレーニング資料などが学習に役立ちます。
まとめ
本記事では、Elasticsearchの基本的な概要から、インストール前の準備、主要なOS (Linux, macOS, Windows) およびDockerを使った詳細なインストール手順、そして最低限必要な基本的な設定について、初心者の方にも分かりやすいように解説しました。さらに、Elasticsearch 8.x系でデフォルト有効となったセキュリティ機能への対応、Kibanaを使った基本的な操作方法、そしてインストールやセットアップでつまずきやすいポイントに対するトラブルシューティングについても触れました。
Elasticsearchのインストール自体は、適切な準備と手順を踏めばそれほど難しくありません。しかし、その設定や運用には、分散システムならではの考慮事項が多く存在します。本記事が、あなたがElasticsearchの第一歩を踏み出すための手助けとなり、さらにElasticsearchの強力な機能を探求していくきっかけとなれば幸いです。
Elasticsearchは非常に柔軟で強力なツールであり、様々な可能性を秘めています。ぜひ、実際に手を動かしながら、その能力を体験してみてください。