Elasticsearch 導入の第一歩:インストール方法を徹底解説
データ活用がビジネスの成否を分ける現代において、高速な検索、リアルタイムな分析、大量ログの集約と可視化は必要不可欠な機能となっています。これらのニーズに応える強力なツールの一つが、オープンソースの分散型検索・分析エンジンである Elasticsearch です。
Elasticsearchは、その高いスケーラビリティと柔軟性から、Webサイトの検索エンジン、アプリケーションログの監視、セキュリティイベントの分析、IoTデータの収集・分析など、多岐にわたる用途で利用されています。
この記事は、「Elasticsearchを導入してみたいけれど、何から始めれば良いか分からない」という初心者の方や、開発環境で手軽に試してみたい方を対象としています。Elasticsearchのインストール方法に焦点を当て、様々な環境に応じた複数のインストール方法、インストール前の準備、インストール後の初期設定、そして基本的な動作確認までを、約5000語にわたる詳細な解説でお届けします。
この記事を読めば、あなたの環境に最適な方法でElasticsearchをインストールし、Elasticsearchの世界への第一歩を踏み出すことができるでしょう。
1. はじめに:Elasticsearchとは何か、なぜインストールするのか
Elasticsearchの具体的なインストール方法に入る前に、まずはElasticsearchがどのようなソフトウェアなのか、そしてなぜ多くのシステムで利用されているのかを簡単に理解しておきましょう。
Elasticsearchとは?
Elasticsearchは、Apache Luceneを基盤とした、分散型RESTful検索・分析エンジンです。テキストデータだけでなく、数値、地理空間情報、構造化データなど、様々な種類のデータを扱うことができます。
主な特徴は以下の通りです。
- 高速な検索: テキスト検索において特に強力で、大量のデータの中から関連性の高い情報を瞬時に見つけ出すことができます。
- リアルタイム分析: データを取り込みながら、ほぼリアルタイムで集計や分析を実行できます。これはログ分析やメトリクス監視において非常に重要です。
- 分散型: 複数のサーバー(ノード)にデータを分散して保存し、負荷を分散できます。これにより、大量のデータや高いトラフィックにも対応できるスケーラビリティを実現しています。ノードを追加することで容易に処理能力やストレージ容量を拡張できます。
- RESTful API: HTTPとJSONを介して操作するため、様々なプログラミング言語やツールから簡単に連携できます。
- スキーマフリー(ある程度): データの構造を事前に厳密に定義する必要がありません(ただし、マッピングによる最適化は推奨されます)。
- Elastic Stackの中核: Elasticsearchは、データ収集ツールのBeats、データ変換・転送ツールのLogstash、そしてデータの可視化ツールのKibanaと組み合わせて、強力なデータ活用プラットフォーム「Elastic Stack」(旧称ELK Stack)を構成します。
なぜElasticsearchをインストールするのか?
あなたのプロジェクトやビジネスにおいて、以下のような課題やニーズがある場合、Elasticsearchの導入が有効な解決策となるかもしれません。
- 大量のログデータを効率的に管理・分析したい: サーバーログ、アプリケーションログなどを集約し、エラーの特定、パフォーマンスの監視、セキュリティ分析を行いたい。
- Webサイトやアプリケーションに強力な検索機能を実装したい: ユーザーが求める情報を素早く正確に見つけられるようにしたい。オートコンプリートやサジェスト機能なども実現したい。
- ビジネスデータをリアルタイムに分析し、ダッシュボードで可視化したい: 販売データ、顧客行動データなどを集計し、ビジネスの意思決定に役立てたい。
- セキュリティイベントやネットワークトラフィックを監視・分析したい: 不正アクセスや異常な通信パターンを検知したい。
Elasticsearchをインストールすることで、これらの強力な機能をあなたのシステムに組み込む準備が整います。まずは開発環境や検証環境でインストールし、その機能を試してみることから始めましょう。
この記事の対象読者
- Elasticsearchという名前を聞いたことがあるが、実際に使ったことはない方。
- Elasticsearchを自分のコンピュータやサーバーにインストールしてみたい方。
- Windows、macOS、Linuxなど、様々なOS環境でのインストール方法を知りたい方。
- インストールだけでなく、その後の基本的な設定や起動方法についても知りたい方。
この記事は、Elasticsearchの高度な運用やチューニング、クラスタリングの詳細については深く立ち入りませんが、「動く状態にする」ことを目標に、必要な情報を網羅的に提供します。
2. Elasticsearch導入の前に:インストール前の準備事項
Elasticsearchのインストールは比較的簡単ですが、スムーズに進めるためにはいくつかの準備が必要です。お使いの環境と目的に合わせて、以下の点を確認してください。
2.1 システム要件の確認
Elasticsearchは多くのリソース(特にメモリとストレージ)を使用する可能性があるため、インストール先のシステムが以下の基本的な要件を満たしているか確認することが重要です。
- オペレーティングシステム: Elasticsearchは、主要なオペレーティングシステム(Linux、macOS、Windows)の多くのバージョンで動作します。公式にサポートされているOSバージョンはElasticsearchのバージョンによって異なるため、利用予定のバージョンに対応する公式ドキュメントを確認してください。一般的に、最新の主要ディストリビューションであれば問題ありません。
- CPU: 必須要件としての特定のCPUモデルはありませんが、処理性能に直結するため、適切なコア数とクロック周クエンシーを持つCPUが推奨されます。
- メモリ (RAM): Elasticsearchにとって最も重要なリソースの一つです。データ量や負荷によって大きく変動しますが、開発環境で試す場合でも最低限2GB以上、本番環境ではデータ量に応じて8GB、16GB、32GB、あるいはそれ以上のメモリが必要です。特に、ElasticsearchのJavaヒープサイズ設定はメモリ容量に依存します。後述のJavaヒープサイズ設定の項目で詳しく説明します。
- ストレージ:
- ディスク容量: インデックスするデータ量に加えて、オペレーティングシステム、Elasticsearchのインストールファイル、ログファイル、一時ファイルに必要な容量を考慮します。データ量に対して十分な容量を確保することが重要です。データは圧縮されて保存されますが、レプリカシャードの設定によってはデータ量が倍増することもあります。
- ディスクの種類: パフォーマンスに大きく影響するため、SSD (Solid State Drive) が強く推奨されます。特に検索やインデックス作成といったI/O負荷の高い操作において、HDD (Hard Disk Drive) と比較して劇的な性能差が出ます。本番環境では、高速で信頼性の高いSSDを利用することを強く推奨します。
- ネットワーク: ノード間通信やクライアントからのアクセスに必要です。シングルノードでの利用であればローカルネットワークで十分ですが、クラスタを組む場合はノード間の安定した低遅延のネットワーク接続が必要です。
2.2 Java Development Kit (JDK) の準備
ElasticsearchはJava上で動作するため、適切なバージョンのJava Development Kit (JDK) がシステムにインストールされている必要があります。
- Javaのバージョン: Elasticsearchは特定のバージョンのJavaを必要とします。利用予定のElasticsearchのバージョンに対応するJDKバージョンを公式ドキュメントで確認してください。Elasticsearch 7.x以降では、多くの場合 OpenJDK 11 または OpenJDK 8 が推奨・必須とされています。Elasticsearch 8.xでは OpenJDK 17 が推奨・必須です。
- ディストリビューション: OpenJDKまたはOracle JDKのどちらでも構いませんが、ライセンスの関係でOpen JDKを利用するのが一般的です。Adoptium (旧 AdoptOpenJDK)、Amazon Corretto、Azul Zuluなどが利用可能です。Elasticsearchの配布物には、互換性のあるOpenJDKが同梱されている場合もあります(特にZIP/TARアーカイブの場合)が、システムにJDKがインストールされている方が管理しやすいことが多いです。
- インストール確認: コマンドプロンプトやターミナルを開き、
java -version
コマンドを実行して、Javaがインストールされているか、そしてバージョンが正しいかを確認してください。
bash
java -version
もしJavaがインストールされていない、またはバージョンが古い場合は、適切なバージョンのJDKをダウンロードしてインストールしてください。多くのOSではパッケージマネージャー(apt, yum, brewなど)を使って簡単にインストールできます。
例 (Ubuntu):
bash
sudo apt update
sudo apt install openjdk-11-jdk
例 (CentOS/RHEL):
bash
sudo yum install java-11-openjdk-devel
例 (macOS with Homebrew):
bash
brew install openjdk@11
(注意: HomebrewでOpenJDKをインストールした場合、システムのデフォルトJDKとして設定するために追加のステップが必要になることがあります。brew info openjdk@11
の出力指示に従ってください。)
2.3 インストール方法の選択
Elasticsearchにはいくつかのインストール方法があります。目的や環境に合わせて最適な方法を選択しましょう。
- バイナリアーカイブ (.tar.gz または .zip): 公式サイトからアーカイブをダウンロードし、任意のディレクトリに展開する方法です。最も手軽な方法で、特定のバージョンを試したい場合や、パッケージ管理システムを使わない環境に適しています。Linux, macOS, Windowsに対応しています。
- パッケージ管理システム (APT/YUM): Linux環境で推奨される方法です。Elasticsearch公式のリポジトリを追加することで、パッケージマネージャーを使ってOS標準のソフトウェアのようにインストール、アップデート、管理ができます。システムのサービスとして登録されるため、OS起動時の自動起動設定なども容易です。Debian/Ubuntu (APT) と RHEL/CentOS/Fedora (YUM/DNF) に対応しています。
- Homebrew: macOSで推奨されるパッケージ管理システムです。Homebrewを使って簡単にインストール、管理できます。
- Dockerコンテナ: Dockerがインストールされている環境であれば、DockerイメージとしてElasticsearchを起動できます。環境構築の手間が少なく、他のサービスとの連携も容易です。開発・検証環境で手軽に試したい場合に非常に便利です。
- Elastic Cloud: Elastic社が提供するマネージドサービスです。クラウド上でElasticsearchクラスタを利用するため、自分でインストールや運用管理をする必要がありません。手軽に始められ、スケーラビリティや信頼性が高いのがメリットですが、費用が発生します。この記事ではインストール方法の代替手段として軽く触れます。
どの方法を選択しても、基本的な設定やAPI操作は同じです。開発環境で試す場合はバイナリアーカイブやDockerが手軽ですが、本番環境や長期的な利用を想定する場合は、パッケージ管理システムを使ったインストールが推奨されます。
2.4 開発環境 vs 本番環境
インストール後の設定は、開発環境か本番環境かによって大きく異なります。
- 開発環境:
- シングルノードでの構成が一般的です。
- リソース(メモリ、CPU)は最低限でも構いません。
- セキュリティ設定は緩め(または無効)でも構いません。
- 手軽に起動・停止できる方法(バイナリ展開後の直接実行、Docker)が便利です。
- 本番環境:
- 複数ノードによるクラスタ構成が必須です。
- 十分なリソース(特にメモリ、高速なSSD)が必要です。
- セキュリティ設定(TLS/SSL通信、認証/認可、ロールベースアクセス制御など)を厳格に行う必要があります。
- サービスの自動起動設定、監視設定が必要です。
- システム推奨設定(ファイルディスクリプタ数、メモリロックなど)を適切に行う必要があります。
この記事の主な対象は開発環境でのインストールですが、本番環境に移行する際に考慮すべき点についても補足します。
3. 多様なインストール方法の詳細
それでは、各インストール方法の詳細な手順を見ていきましょう。
3.1 Linuxでのパッケージ管理システムを使ったインストール (推奨)
Linux環境では、Elasticsearch公式リポジトリを追加してパッケージマネージャーでインストールするのが最も一般的な方法です。これにより、依存関係の管理やアップデートが容易になります。
3.1.1 Debian/Ubuntu (APT)
ステップ1:Elasticsearch Signing Keyのインポート
Elasticsearchのパッケージは署名されています。パッケージの信頼性を検証するために、公開鍵をインポートします。
bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
OK
と表示されれば成功です。
ステップ2:Elasticsearchリポジトリの追加
/etc/apt/sources.list.d/
ディレクトリにElasticsearchのリポジトリ設定ファイルを作成します。使用したいElasticsearchのバージョンに合わせてURLを変更してください。(例:7.x
, 8.x
)
“`bash
echo “deb https://artifacts.elastic.co/apt stable 7.x/” | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
または 8.x の場合
echo “deb https://artifacts.elastic.co/apt stable 8.x/” | sudo tee /etc/apt/sources.list.d/elastic-8.x.list
“`
ステップ3:APTパッケージリストの更新
新しいリポジトリ情報をシステムに反映させます。
bash
sudo apt update
apt update
実行中に、リポジトリからパッケージ情報が取得され、エラーが表示されなければリポジトリの追加は成功です。
ステップ4:Elasticsearchのインストール
パッケージマネージャーを使ってElasticsearchをインストールします。
bash
sudo apt install elasticsearch
依存するOpenJDKなどが同時にインストールされることがあります。途中で確認画面が表示されたら y
を入力して続行してください。
ステップ5:インストール後の確認
インストールが完了すると、Elasticsearchのファイルは /usr/share/elasticsearch/
に、設定ファイルは /etc/elasticsearch/
に、ログファイルは /var/log/elasticsearch/
に、データファイルは /var/lib/elasticsearch/
に配置されます。
ステップ6:システムの自動起動設定と起動
インストール時にサービスとして登録されているはずです。システム起動時にElasticsearchが自動的に起動するように設定し、サービスを起動します。
bash
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
ステップ7:サービスのステータス確認
サービスが正常に起動しているか確認します。
bash
sudo systemctl status elasticsearch.service
ステータスが active (running)
と表示されていれば成功です。もしエラーが発生している場合は、ログファイル /var/log/elasticsearch/elasticsearch.log
を確認して原因を特定してください。
ステップ8:サービスの停止と再起動
サービスの停止や再起動は以下のコマンドで行います。
bash
sudo systemctl stop elasticsearch.service
sudo systemctl restart elasticsearch.service
3.1.2 RHEL/CentOS/Fedora (YUM/DNF)
ステップ1:Elasticsearch Signing Keyのインポート
Debian/Ubuntuと同様に、パッケージの署名鍵をインポートします。
bash
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
ステップ2:Elasticsearchリポジトリの作成
/etc/yum.repos.d/
ディレクトリにElasticsearchのリポジトリ設定ファイル (elasticsearch.repo
) を作成します。使用したいElasticsearchのバージョンに合わせてURLを変更してください。(例:7.x
, 8.x
)
bash
sudo vi /etc/yum.repos.d/elasticsearch.repo
ファイルに以下の内容を記述します。
“`ini
[elasticsearch-7.x]
name=Elasticsearch repository for 7.x packages
baseurl=https://artifacts.elastic.co/packages/7.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
または 8.x の場合
[elasticsearch-8.x]
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
“`
ステップ3:Elasticsearchのインストール
YUMまたはDNFを使ってElasticsearchをインストールします。
“`bash
sudo yum install elasticsearch
または DNF の場合
sudo dnf install elasticsearch
“`
依存するOpenJDKなどが同時にインストールされることがあります。途中で確認画面が表示されたら y
を入力して続行してください。
ステップ4:インストール後の確認
インストールが完了すると、Elasticsearchのファイルは /usr/share/elasticsearch/
に、設定ファイルは /etc/elasticsearch/
に、ログファイルは /var/log/elasticsearch/
に、データファイルは /var/lib/elasticsearch/
に配置されます。
ステップ5:システムの自動起動設定と起動
インストール時にサービスとして登録されているはずです。システム起動時にElasticsearchが自動的に起動するように設定し、サービスを起動します。
bash
sudo systemctl daemon-reload
sudo systemctl enable elasticsearch.service
sudo systemctl start elasticsearch.service
ステップ6:サービスのステータス確認
サービスが正常に起動しているか確認します。
bash
sudo systemctl status elasticsearch.service
ステータスが active (running)
と表示されていれば成功です。もしエラーが発生している場合は、ログファイル /var/log/elasticsearch/elasticsearch.log
を確認して原因を特定してください。
ステップ7:サービスの停止と再起動
サービスの停止や再起動は以下のコマンドで行います。
bash
sudo systemctl stop elasticsearch.service
sudo systemctl restart elasticsearch.service
3.1.3 Linuxインストール時の注意点とトラブルシューティング
- Javaの互換性: パッケージマネージャーが適切なJavaをインストールしない、またはシステムに複数のJavaバージョンが存在する場合、起動時にJava関連のエラーが発生することがあります。
/etc/elasticsearch/jvm.options
ファイルでJava実行ファイルへのパス(JAVA_HOME
)を明示的に指定する必要があるかもしれません。 - メモリ不足: 起動時に
OutOfMemoryError
やヒープサイズ関連のエラーが出る場合、システムのメモリが不足しているか、Javaヒープサイズの設定が不適切です。システムメモリを増設するか、/etc/elasticsearch/jvm.options
でヒープサイズ設定を見直してください(詳細は後述)。 - ファイルディスクリプタ不足: 大量のインデックスやシャードを扱う場合、開けるファイル数の上限(ファイルディスクリプタ数)が不足してエラーになることがあります。
/etc/security/limits.conf
を編集して、Elasticsearchを実行するユーザー(通常はelasticsearch
)のファイルディスクリプタ数の上限を引き上げる必要があります(詳細は後述)。 - 仮想メモリ設定: Linuxカーネルの仮想メモリ設定 (
vm.max_map_count
) が低いとエラーが発生することがあります。sysctl vm.max_map_count
で現在の設定を確認し、必要であれば/etc/sysctl.conf
を編集して値を永続化してください(詳細は後述)。 - 権限: Elasticsearchの実行ユーザー(通常は
elasticsearch
)が、データディレクトリやログディレクトリに書き込む権限を持っているか確認してください。パッケージインストールでは適切に設定されるはずですが、手動でディレクトリを変更した場合などに問題が発生することがあります。 - SELinux/AppArmor: SELinuxやAppArmorが有効になっている場合、Elasticsearchの動作が制限されることがあります。必要に応じて設定を調整するか、無効にする必要があります(ただしセキュリティリスクを伴います)。
3.2 macOSでのインストール (Homebrew)
macOSユーザーには、Homebrewを使ったインストールが最も簡単です。
ステップ1:Homebrewのインストール
Homebrewがインストールされていない場合は、公式Webサイトの指示に従ってインストールしてください。
bash
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"
ステップ2:Elasticsearchのインストール
Homebrewを使ってElasticsearchをインストールします。
“`bash
brew install elasticsearch-full
または特定のバージョンを指定する場合 (例: 7.17)
brew install [email protected]
“`
elasticsearch-full
はElasticsearch本体に加え、通常使用される公式プラグインなども含まれています。
ステップ3:インストール後の確認
インストールされたファイルの場所はHomebrewの出力で確認できます。通常、Elasticsearchは /usr/local/var/homebrew/linked/elasticsearch-full/
あるいは同様のパスにリンクされ、設定ファイルは /usr/local/etc/elasticsearch/
に配置されます。データディレクトリやログディレクトリはデフォルトではインストールユーザーのHomebrew関連ディレクトリに作成されます。
ステップ4:サービスの起動
Homebrew servicesを使ってElasticsearchをサービスとして起動できます。システム起動時の自動起動も設定可能です。
bash
brew services start elasticsearch-full
自動起動しない場合は、手動で起動することも可能です。
“`bash
バックグラウンドで実行
elasticsearch &
“`
ステップ5:サービスのステータス確認
サービスが起動しているか確認します。
bash
brew services list
elasticsearch-full
のステータスが started
になっていれば成功です。
ステップ6:サービスの停止と再起動
bash
brew services stop elasticsearch-full
brew services restart elasticsearch-full
3.2.1 macOSインストール時の注意点とトラブルシューティング
- Javaのインストール: HomebrewでElasticsearchをインストールしても、Javaは自動的にインストールされない場合があります。事前に適切なバージョンのJDKをインストールしておく必要があります(例:
brew install openjdk@11
)。 - 権限: Homebrewでインストールした場合、通常は権限の問題は発生しにくいですが、データディレクトリなどをデフォルト以外の場所に設定した場合は、適切な権限があるか確認してください。
- リソース制限: macOSのデフォルト設定では、Linuxのようなシステムチューニングはあまり必要ありませんが、非常に大規模なデータを扱う場合は、ファイルディスクリプタ数などの制限に注意が必要かもしれません。
3.3 Windowsでのインストール
Windows環境では、主にZIPアーカイブをダウンロードしてインストールする方法と、MSIインストーラーを使う方法があります。ZIPアーカイブの方が手軽に始められるため、こちらを中心に解説します。
ステップ1:ZIPアーカイブのダウンロード
Elasticsearchの公式サイトのダウンロードページから、Windows用のZIPアーカイブをダウンロードします。使用したいバージョンを選択してください。
ステップ2:アーカイブの解凍
ダウンロードしたZIPファイルを、任意のディレクトリに解凍します。例えば C:\elasticsearch-7.x.x
のように、スペースや特殊文字を含まないパスに解凍するのが推奨されます。
ステップ3:JDKの確認/インストール
Windows環境にも適切なバージョンのJDKがインストールされている必要があります。コマンドプロンプトを開き java -version
で確認し、必要であればJDKをインストールしてください。環境変数 JAVA_HOME
が適切に設定されているか確認してください。
ステップ4:Elasticsearchの起動(手動)
解凍したディレクトリ内の bin
フォルダに移動し、elasticsearch.bat
を実行します。
cmd
cd C:\elasticsearch-7.x.x\bin
elasticsearch.bat
コマンドプロンプト上に起動ログが表示され、エラーが出ずに started
のようなメッセージが表示されれば成功です。このウィンドウを閉じるとElasticsearchも停止します。
ステップ5:サービスとしてのインストールと起動(任意)
ElasticsearchをWindowsサービスとして登録し、バックグラウンドで実行したり、システム起動時に自動起動させたりすることができます。
コマンドプロンプトを管理者として実行し、Elasticsearchのインストールディレクトリ(例: C:\elasticsearch-7.x.x
)に移動します。
cmd
cd C:\elasticsearch-7.x.x
サービスとしてインストールします。
cmd
bin\elasticsearch-service.bat install
インストールが成功したら、サービスを起動します。
cmd
bin\elasticsearch-service.bat start
サービスのステータス確認や停止、アンインストールも同様のコマンドで行えます。
cmd
bin\elasticsearch-service.bat status
bin\elasticsearch-service.bat stop
bin\elasticsearch-service.bat remove
Windowsの「サービス」管理ツールからも、Elasticsearchサービスの状態確認や起動/停止が可能です。
3.3.1 Windowsインストール時の注意点とトラブルシューティング
- パスに注意: スペースや特殊文字を含むパスに解凍すると、起動スクリプトが正しく動作しないことがあります。
C:\Elasticsearch
のようなシンプルなパスを使用しましょう。 - コマンドプロンプト/PowerShell:
elasticsearch.bat
を実行する際は、適切なディレクトリに移動しているか確認してください。サービスとしてインストールする場合は、管理者権限が必要です。 - メモリ不足: 起動時のメモリ関連エラーは、JVMオプションまたはシステムのメモリ不足が原因です。
config\jvm.options
ファイルでヒープサイズを調整してください。 - ファイル権限: Windowsでは通常大きな問題になりにくいですが、稀にデータディレクトリやログディレクトリへの書き込み権限が不足することがあります。
- ファイアウォール: デフォルトでは9200ポートを使用します。Windowsファイアウォールでこのポートがブロックされていないか確認してください。
3.4 Dockerコンテナを使ったインストール
Dockerが利用可能な環境であれば、公式のDockerイメージを使うのが最も手軽な方法かもしれません。環境構築の手間が少なく、他のサービスとの連携も容易です。
ステップ1:Docker Desktopのインストール
Docker Desktopがインストールされていない場合は、公式Webサイトの指示に従ってインストールしてください。Windows Home版の場合はWSL2が必要になることがあります。
ステップ2:Elasticsearchイメージの取得
Docker Hubから公式のElasticsearchイメージを取得します。使用したいバージョンを指定できます。(例: 7.17.1
)
“`bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.1
または 8.x の場合
docker pull docker.elastic.co/elasticsearch/elasticsearch:8.x.x
“`
ステップ3:Elasticsearchコンテナの起動(シングルノード)
基本的なシングルノードのコンテナを起動します。開発環境では、以下のようなコマンドで簡単に起動できます。
“`bash
メモリロックを無効にするための環境変数が必要です
本番環境ではメモリロックは推奨されますが、Dockerコンテナでは設定が複雑なため無効化することが多いです
docker run -d –name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e “ES_JAVA_OPTS=-Xms512m -Xmx512m” docker.elastic.co/elasticsearch/elasticsearch:7.17.1
8.x の場合、セキュリティ機能がデフォルトで有効になるため注意が必要です
無効化して起動する場合(開発環境向け)
docker run -d –name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e “xpack.security.enabled=false” -e “xpack.security.enrollment.enabled=false” -e “xpack.security.http.ssl.enabled=false” -e “xpack.security.transport.ssl.enabled=false” -e “ES_JAVA_OPTS=-Xms512m -Xmx512m” docker.elastic.co/elasticsearch/elasticsearch:8.x.x
8.x でセキュリティ有効のまま起動する場合は、起動後の設定が必要です(後述の動作確認で触れます)
“`
-d
: デタッチモードでバックグラウンド実行--name elasticsearch
: コンテナに名前を付ける-p 9200:9200
: ホストの9200ポートをコンテナの9200ポートにマッピング (REST API用)-p 9300:9300
: ホストの9300ポートをコンテナの9300ポートにマッピング (ノード間通信用)-e "discovery.type=single-node"
: シングルノードモードとして起動 (クラスタリングを無効化)-e "ES_JAVA_OPTS=-Xms512m -Xmx512m"
: Javaヒープサイズを設定 (コンテナのリソースに応じて調整)- イメージ名とタグ (
docker.elastic.co/...:tag
)
データ永続化の考慮: 上記コマンドではコンテナを削除するとデータも消えます。データを永続化するには、Docker Volumeやバインドマウントを使用する必要があります。
“`bash
Docker Volume を使用する場合
docker volume create elasticsearch-data
docker run -d –name elasticsearch -p 9200:9200 -p 9300:9300 -e “discovery.type=single-node” -e “ES_JAVA_OPTS=-Xms512m -Xmx512m” -v elasticsearch-data:/usr/share/elasticsearch/data docker.elastic.co/elasticsearch/elasticsearch:7.17.1
“`
ステップ4:コンテナの状態確認
bash
docker ps
elasticsearch
という名前のコンテナが Up
状態になっていれば起動成功です。
ステップ5:コンテナの停止と削除
“`bash
docker stop elasticsearch
docker rm elasticsearch
データ永続化している場合は Volume の削除も検討
docker volume rm elasticsearch-data
“`
3.4.1 Dockerインストール時の注意点とトラブルシューティング
- メモリ: Dockerコンテナのメモリ制限に注意してください。Docker Desktopの設定でコンテナに割り当てるメモリを調整できます。Elasticsearchコンテナ自体のJavaヒープサイズ設定も重要です。
- データ永続化: 開発・検証用途で一時的に使うだけでなければ、必ずDocker Volumeやバインドマウントを使ってデータをホストマシンに永続化させてください。コンテナを停止・削除してもデータが失われません。
- バージョン8.xのセキュリティ: Elasticsearch 8.xの公式Dockerイメージは、デフォルトでセキュリティ(TLS、認証/認可)が有効になっています。上記の例のように無効化して起動するか、起動後にセキュリティ設定を行う必要があります。セキュリティ有効のまま起動した場合、初回起動時に生成されるパスワードが必要になります。ログを確認してください (
docker logs elasticsearch
)。
3.5 Elastic Cloudの利用(インストール不要な代替手段)
Elasticsearchを自分でインストール・管理するのではなく、クラウド上のマネージドサービスとして利用することも可能です。これが Elastic Cloud です。
- メリット:
- サーバーを用意する必要がない。
- インストール、設定、アップデート、バックアップ、スケーリングといった運用管理の手間が省ける。
- 高い可用性と信頼性。
- 常に最新版または推奨バージョンを利用できる。
- デメリット:
- 費用が発生する(利用量に応じた従量課金制)。
- 環境のカスタマイズ性に制限がある場合がある。
手軽にElasticsearchを使ってみたい、まずは運用負荷をかけずに試したい、本番環境で高い信頼性が欲しい、といった場合に有力な選択肢となります。
利用開始の流れ (概要):
- Elastic CloudのWebサイトにアクセスし、アカウントを作成します。多くのプロバイダー(AWS, GCP, Azure)に対応しています。無料トライアルが提供されています。
- デプロイメント(ElasticsearchクラスタとKibanaなどのセット)を作成します。リージョン、バージョン、ハードウェアプロファイル(メモリやストレージ容量)を選択します。
- デプロイメントがプロビジョニングされるのを待ちます。
- プロビジョニングが完了すると、ElasticsearchエンドポイントのURL、ユーザー名、パスワードが提供されます。これを使ってKibanaや他のアプリケーションからElasticsearchにアクセスします。
自分でインストールする手間は全くかかりませんが、クラウドサービスであるため利用料金が発生することを理解しておく必要があります。無料トライアル期間中に、オンプレミスでのインストールと比較検討するのも良いでしょう。
4. インストール後の初期設定
Elasticsearchが起動できるようになったら、次に必要な初期設定を行います。設定は config/elasticsearch.yml
ファイルで行います。ファイルの場所はインストール方法によって異なりますが、前述の各インストール手順で確認できます。
4.1 elasticsearch.yml の場所
- パッケージインストール (Linux):
/etc/elasticsearch/elasticsearch.yml
- Homebrew (macOS):
/usr/local/etc/elasticsearch/elasticsearch.yml
- ZIP/TARアーカイブ: 解凍したディレクトリの
config/elasticsearch.yml
- Docker: Dockerコンテナ内部の
/usr/share/elasticsearch/config/elasticsearch.yml
(通常はバインドマウントでホストから設定ファイルを指定します)
4.2 重要な設定項目
elasticsearch.yml
はYAML形式で記述されています。コメントアウト (#
) されている行はデフォルト値が適用されます。設定を変更するには、コメントアウトを解除して値を指定します。
開発環境のシングルノード構成で最低限確認・設定しておきたい項目を説明します。
-
cluster.name
:- クラスタの名前を定義します。同じクラスタに属するノードは、必ず同じクラスタ名を設定する必要があります。
- デフォルトは
elasticsearch
です。特に変更する必要はありませんが、複数のクラスタを運用する場合は識別しやすい名前に変更することが推奨されます。 - 例:
cluster.name: my-application-cluster
-
node.name
:- クラスタ内のノードの名前を定義します。各ノードで一意の名前を設定します。
- デフォルトではホスト名が使用されます。特に変更する必要はありませんが、識別しやすい名前に変更すると監視や管理が容易になります。
- 例:
node.name: node-1
-
network.host
:- ElasticsearchがバインドするIPアドレスを指定します。
- 開発環境では、
network.host: localhost
または127.0.0.1
を使用することが多いです。 これはローカルホストからのアクセスのみを許可し、外部からのアクセスを防ぎます。 - デフォルトではコメントアウトされており、Elasticsearchはループバックアドレス (
127.0.0.1
) のみにバインドします。 - 本番環境では、他のノードやクライアントからのアクセスを許可するために、サーバーのプライベートIPアドレスやホスト名を指定する必要があります。 例えば、
network.host: 192.168.1.100
やnetwork.host: _site_
(サイトローカルアドレスにバインド) といった設定になります。 network.host: 0.0.0.0
は、すべてのインターフェースからのアクセスを許可しますが、セキュリティリスクが高いため本番環境では推奨されません。 ファイアウォール設定などで適切にアクセス制御する必要があります。
-
http.port
:- ElasticsearchのREST APIがリッスンするポート番号を指定します。
- デフォルトは
9200
です。競合がなければ変更する必要はありません。 - 例:
http.port: 9201
-
transport.port
:- ノード間通信に使用するポート番号を指定します。
- デフォルトは
9300
から始まります。ノードが複数ある場合、自動的に次のポートが使用されます。 - 通常はデフォルトのままで問題ありません。
-
path.data
:- インデックスデータやメタデータが保存されるディレクトリを指定します。
- 非常に重要です。 十分な容量があり、高速なディスク(SSD)を指定してください。本番環境ではOSやアプリケーションの実行ファイルとは別のパーティションに配置することを強く推奨します。
- デフォルトの場所はインストール方法によって異なります。
- 例:
path.data: /mnt/elasticsearch/data
-
path.logs
:- ログファイルが保存されるディレクトリを指定します。
- こちらも十分な容量を持つディスクを指定してください。
- デフォルトの場所はインストール方法によって異なります。
- 例:
path.logs: /var/log/elasticsearch
-
discovery.seed_hosts
:- クラスタ構成の場合に必須の設定です。 Elasticsearchクラスタを構成する際に、最初のノードが他のノードを発見するために使用する、既知のノードのリストを指定します。
- シングルノードとして実行する場合、この設定は不要です。
discovery.type: single-node
が設定されていれば、他のノードを探しに行きません。 - クラスタを組む場合は、リスト形式で他のノードのホスト名またはIPアドレスを指定します。
- 例 (複数ノードの場合):
yaml
discovery.seed_hosts: ["host1", "host2:9300", "192.168.1.10", "192.168.1.11"]
-
cluster.initial_master_nodes
:- クラスタ構成の場合に必須の設定です。 新しいクラスタを起動する際に、マスターノード候補となるノードの
node.name
のリストを指定します。これは「ブートストラップフェイズ」と呼ばれるクラスタの初期化処理で使われます。 - シングルノードとして実行する場合、この設定は不要です。
discovery.type: single-node
が設定されていれば使用されません。 - リストには、
discovery.seed_hosts
で指定したノードの中からマスター候補となるノードの名前を指定するのが一般的です。 - 例 (複数ノードの場合):
yaml
cluster.initial_master_nodes: ["node-1", "node-2"]
- クラスタ構成の場合に必須の設定です。 新しいクラスタを起動する際に、マスターノード候補となるノードの
開発環境(シングルノード)での推奨設定例 (elasticsearch.yml
):
特に設定を変更しない場合は、デフォルト設定のまま起動し、ローカルホストから http://localhost:9200
でアクセスする形になります。データやログのパスだけ変更したい場合は、その行のコメントを解除してパスを指定します。
“`yaml
cluster.name: my-application-cluster # オプション
node.name: single-node-dev # オプション
network.host: localhost # ローカルアクセスのみ許可(デフォルトと同じ)
http.port: 9200 # デフォルトポート(デフォルトと同じ)
path.data: /path/to/your/data/directory # 適切なパスに変更
path.logs: /path/to/your/logs/directory # 適切なパスに変更
discovery.type: single-node # シングルノードとして起動する場合に必須
“`
設定変更後の再起動: elasticsearch.yml
ファイルを変更した場合は、Elasticsearchサービスを再起動して設定を反映させる必要があります。
4.3 Javaヒープサイズの設定
ElasticsearchはJavaプロセスとして実行され、Javaのヒープメモリを大量に使用します。適切なヒープサイズの設定はパフォーマンスと安定性に直結するため、非常に重要です。
ヒープサイズは config/jvm.options
ファイルで設定します。
jvm.options
ファイルの場所は、elasticsearch.yml
と同じディレクトリか、インストール方法に依存します。パッケージインストールの場合は/etc/elasticsearch/jvm.options
です。- ヒープサイズは
-Xms
(初期ヒープサイズ) と-Xmx
(最大ヒープサイズ) オプションで設定します。これらの値は同じに設定することが強く推奨されます。これにより、実行中にヒープサイズが動的に変化するのを防ぎ、パフォーマンスを安定させます。 - 設定する値は、サーバーに搭載されている物理メモリの容量の半分以下にするのが基本的な推奨事項です。残りのメモリは、OSのファイルシステムキャッシュやその他のプロセスが利用できるように確保する必要があります。Elasticsearchはファイルシステムキャッシュを積極的に利用することで、ディスクI/O性能を向上させるため、十分なメモリをOSに割り当てることが重要です。
- 具体的な値は、例えばサーバーに8GBのメモリがあるなら
-Xms4g -Xmx4g
、16GBなら-Xms8g -Xmx8g
のように設定します。開発環境でメモリが少ない場合は、最低でも1GB (-Xms1g -Xmx1g
) を確保するようにしましょう。 - 設定値の単位は
g
(ギガバイト) またはm
(メガバイト) で指定します。
jvm.options
設定例:
“`ini
JVM configuration
Xms represents the initial size of the total heap space
Xmx represents the maximum size of the total heap space
-Xms4g # 初期ヒープサイズを 4GB に設定
-Xmx4g # 最大ヒープサイズを 4GB に設定
other options…
“`
設定変更後、Elasticsearchを再起動して反映させてください。
4.4 システム設定の推奨事項 (Linux)
Linux環境で本番運用を行う場合、Elasticsearchの性能と安定性を最大限に引き出すために、いくつかのシステム設定を変更することが強く推奨されます。開発環境では必須ではありませんが、知っておくと役立ちます。
-
ファイルディスクリプタ数の増加: Elasticsearchは大量のファイル(インデックスファイルなど)を開くため、開けるファイル数の上限(ファイルディスクリプタ数)をデフォルト値から引き上げる必要があります。推奨値は65536以上です。
- 設定方法:
/etc/security/limits.conf
ファイルに以下の行を追加します(Elasticsearchの実行ユーザーがelasticsearch
の場合)。
elasticsearch - nofile 65536
- 変更を有効にするには、ユーザーを再ログインするか、サーバーを再起動する必要があります。
- 設定方法:
-
仮想メモリ設定 (
vm.max_map_count
): Luceneはファイルのマッピング(memory mapping)を多用するため、利用可能なマップカウントの上限を引き上げる必要があります。推奨値は262144以上です。- 現在の設定確認:
sysctl vm.max_map_count
- 一時的な設定変更:
sudo sysctl -w vm.max_map_count=262144
- 永続的な設定変更:
/etc/sysctl.conf
ファイルに以下の行を追加し、sudo sysctl -p
を実行して反映させます。
vm.max_map_count=262144
- 現在の設定確認:
-
スワップの無効化: Elasticsearchはメモリを積極的に利用するため、スワップが発生するとディスクI/Oが増加し、性能が著しく低下します。Elasticsearchを実行するサーバーでは、スワップを無効にするか、Swappinessの値を極めて小さく設定することが強く推奨されます。
- 現在の設定確認:
swapon --show
(スワップパーティションが表示されるか確認)、cat /proc/sys/vm/swappiness
(Swappinessの値を確認、0が最小) - 一時的な無効化:
sudo swapoff -a
- 永続的な無効化:
/etc/fstab
ファイルからスワップパーティションに関する行をコメントアウトするか削除します。 - Swappinessの設定:
/etc/sysctl.conf
ファイルに以下の行を追加し、sudo sysctl -p
を実行して反映させます。
vm.swappiness=1 # または 0
- 現在の設定確認:
-
メモリロック (mlockall): Elasticsearchプロセスが使用するヒープメモリがスワップアウトされるのを防ぐために、メモリロックを有効にすることが推奨されます。これにより、Javaヒープ全体がRAMに固定されます。
- 設定方法:
elasticsearch.yml
でbootstrap.memory_lock: true
を設定します。 - この設定を有効にするためには、Elasticsearchを実行するユーザーに対してメモリロックを許可する権限が必要です。これは通常、
/etc/security/limits.conf
ファイルに以下の行を追加することで行います。
elasticsearch - memlock unlimited
- システムによっては、systemdのユニットファイルなどで
LimitMEMLOCK
の設定が必要な場合もあります(例:/usr/lib/systemd/system/elasticsearch.service
の[Service]
セクションにLimitMEMLOCK=infinity
を追加)。 - 設定後、Elasticsearchを再起動し、クラスタヘルスAPI (
GET /_cluster/stats
) でmlockall
がtrue
になっているか確認します。
- 設定方法:
これらのシステム設定は、本番環境でElasticsearchを安定かつ高性能に運用するために非常に重要です。導入前に、OSのドキュメントやElasticsearchの公式ドキュメントを参照しながら適切に設定してください。
4.5 簡単なセキュリティ設定 (開発環境)
Elasticsearch 8.x以降では、デフォルトでセキュリティ機能(TLS通信、認証/認可)が有効になっています。これは本番環境では必須の設定であり、セキュリティを向上させますが、開発環境で手軽に試す際には少し手間になる場合があります。
バージョン7.x以前ではセキュリティ機能はデフォルトで無効でした。
-
バージョン7.x以前:
- デフォルトではセキュリティが無効です。
network.host: 0.0.0.0
などで外部に公開している場合、認証なしで誰でもアクセスできてしまいます。 - 開発環境では
network.host: localhost
やファイアウォール設定でアクセスを制限するのが一般的です。 - セキュリティ機能を有効にするには、X-Pack Basic/Platinumなどのライセンスが必要でした(現在はElasticsearch本体に統合)。
- デフォルトではセキュリティが無効です。
-
バージョン8.x以降:
- デフォルトでセキュリティ機能が有効です。HTTPS (TLS) 通信が必須となり、Basic認証による認証も必要になります。
- 初回起動時に、Elasticsearchは自動的に証明書やパスワードを生成し、ログに出力します。
- 開発環境でセキュリティを一時的に無効にしたい場合:
elasticsearch.yml
で以下の設定を追加します。
yaml
xpack.security.enabled: false
ただし、これはあくまで開発・検証用途に限るべきです。本番環境では絶対に無効にしないでください。 - セキュリティを有効のまま進める場合: 初回起動時に生成された
elastic
ユーザーのパスワードをログファイルから取得し、そのパスワードを使ってアクセスする必要があります。また、TLS証明書に関する設定も必要になります。Kibanaを接続する際も、これらの認証情報と証明書を設定する必要があります。
この記事ではインストール方法に焦点を当てているため、セキュリティ設定の詳細には踏み込みませんが、特にバージョン8.x以降を試す場合は、セキュリティ設定がデフォルトで有効になっていることを理解しておいてください。
5. Elasticsearchの起動と停止
インストールと初期設定が完了したら、Elasticsearchを起動してみましょう。
5.1 サービスとしての起動・停止・再起動
パッケージ管理システム (APT/YUM/Homebrew) やWindowsサービスでインストールした場合、systemctl
や brew services
、Windowsのサービス管理ツールを使って起動・停止を行います。
- Linux (systemd):
bash
sudo systemctl start elasticsearch.service
sudo systemctl stop elasticsearch.service
sudo systemctl restart elasticsearch.service
sudo systemctl status elasticsearch.service - macOS (Homebrew services):
bash
brew services start elasticsearch-full
brew services stop elasticsearch-full
brew services restart elasticsearch-full
brew services list - Windowsサービス:
cmd
# 管理者として実行したコマンドプロンプトで
C:\elasticsearch-x.x.x\bin\elasticsearch-service.bat start
C:\elasticsearch-x.x.x\bin\elasticsearch-service.bat stop
C:\elasticsearch-x.x.x\bin\elasticsearch-service.bat status
または、Windowsの「サービス」管理ツールを開き、「Elasticsearch」サービスを選択して操作します。
5.2 手動での起動 (ZIP/TARアーカイブ, Docker)
ZIP/TARアーカイブをダウンロードした場合や、Dockerコンテナを手動で起動する場合です。
- ZIP/TARアーカイブ (Linux/macOS):
解凍したディレクトリに移動し、bin/elasticsearch
を実行します。デフォルトではフォアグラウンドで実行され、ログが標準出力に出力されます。
bash
cd /path/to/elasticsearch-x.x.x
bin/elasticsearch
バックグラウンドで実行する場合は、&
を付けて実行します。
bash
bin/elasticsearch & - ZIP/TARアーカイブ (Windows):
解凍したディレクトリに移動し、bin\elasticsearch.bat
を実行します。コマンドプロンプト上でフォアグラウンド実行されます。
cmd
cd C:\elasticsearch-x.x.x
bin\elasticsearch.bat - Docker:
既にdocker run
コマンドでコンテナを起動済みであれば、特別な操作は不要です。停止する場合はdocker stop <container_name>
を実行します。
5.3 ログファイルの確認
Elasticsearchの起動に失敗したり、動作がおかしいと感じたりした場合は、ログファイルを確認することが最も重要です。
- パッケージインストール:
/var/log/elasticsearch/elasticsearch.log
- ZIP/TARアーカイブ:
path.logs
で指定したディレクトリ(デフォルトはlogs/
サブディレクトリ) - Docker:
docker logs <container_name>
コマンドでコンテナのログを確認できます。
ログファイルには、起動時の情報、エラー、警告、重要なイベントなどが記録されています。エラーメッセージが表示されている場合は、その内容を基にトラブルシューティングを行います。
6. 動作確認と最初のステップ
Elasticsearchが無事起動したら、基本的な動作確認を行いましょう。
6.1 REST APIを使ったクラスタ情報の取得
ElasticsearchはREST APIを提供しています。curl
コマンドやWebブラウザを使って、Elasticsearchにアクセスしてみましょう。
デフォルト設定で network.host: localhost
および http.port: 9200
の場合、以下のコマンドを実行します。
bash
curl http://localhost:9200/
正常に起動していれば、以下のようなJSON形式の応答が返ってきます。
json
{
"name" : "your-node-name",
"cluster_name" : "your-cluster-name",
"cluster_uuid" : "...",
"version" : {
"number" : "x.x.x",
"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"
}
これにより、Elasticsearchプロセスが起動しており、HTTPリクエストに応答できる状態であることが確認できます。name
や cluster_name
が elasticsearch.yml
で設定した値になっているか確認してみましょう。
バージョン8.xでセキュリティが有効な場合:
HTTPS (https
) でアクセスする必要があります。証明書エラーが表示される場合は -k
オプションを使用します。また、Basic認証情報が必要です。
“`bash
初回起動時にログに出力された elastic ユーザーのパスワードを使用
curl -u elastic:
“`
パスワードを求められる対話モードで実行する場合は -u elastic
とだけ指定します。
6.2 Kibanaのインストールと接続(概要)
Elastic Stackの一部であるKibanaは、Elasticsearchのデータを探索、可視化、管理するためのWebインターフェースを提供します。Elasticsearchの動作確認やデータ操作をGUIで行うのに非常に便利です。
KibanaもElasticsearchと同様の方法(パッケージ、ZIP/TAR、Dockerなど)でインストールできます。Kibanaを起動したら、設定ファイル (config/kibana.yml
) でElasticsearchに接続するためのURL (elasticsearch.hosts
) を設定します。
デフォルトでは elasticsearch.hosts: ["http://localhost:9200"]
となっていることが多いので、Elasticsearchがデフォルト設定で起動していれば、Kibanaの設定を変更せずに接続できる可能性があります。
バージョン8.xでセキュリティが有効な場合:
KibanaからElasticsearchに接続する際も、セキュリティ設定が必要です。kibana.yml
で以下の設定を行います。
yaml
elasticsearch.hosts: ["https://localhost:9200"] # HTTPSを使用
elasticsearch.username: "kibana_system" # Kibana接続用のビルトインユーザー
elasticsearch.password: "<password>" # 初回起動時に Kibana ログに出力されるパスワード
または、初回起動時にKibanaとElasticsearchを連携させるためのトークンを使用する方法もあります。
Kibanaが起動し、Elasticsearchに接続できると、Webブラウザで http://localhost:5601
(デフォルトポート) にアクセスしてKibanaの管理画面が表示されます。KibanaのDev Toolsコンソールを使うと、Webブラウザから簡単にElasticsearchのREST APIを実行できます。
この記事ではKibanaのインストール手順は割愛しますが、Elasticsearchを本格的に使う上ではKibanaの導入もセットで検討することをお勧めします。
6.3 簡単なデータの投入と検索
Elasticsearchが起動し、アクセスできることが確認できたら、簡単なデータを投入(インデックス)して検索してみましょう。
以下の例は、KibanaのDev Toolsコンソール、または curl
コマンドで実行できます。
インデックスの作成とドキュメントの投入:
my-index
という名前のインデックスに、_doc
タイプで2つのドキュメントを投入します。_doc
の部分はバージョンによって変更されることがあります。
“`json
ドキュメント1
PUT /my-index/_doc/1
{
“title”: “Elasticsearch Installation Guide”,
“content”: “This article explains how to install Elasticsearch.”
}
ドキュメント2
PUT /my-index/_doc/2
{
“title”: “Introduction to Kibana”,
“content”: “Kibana is a visualization tool for Elasticsearch.”
}
“`
ドキュメントの検索:
my-index
インデックス内の全ドキュメントを検索します。
json
GET /my-index/_search
content
フィールドから “installation” という単語を含むドキュメントを検索します。
json
GET /my-index/_search
{
"query": {
"match": {
"content": "installation"
}
}
}
これらの操作が成功すれば、Elasticsearchがデータの投入と検索を実行できる状態であることが確認できます。
7. 発展的なトピックと考慮点
Elasticsearchのインストール方法は理解できましたが、実際に運用を始めるにあたっては、さらに考慮すべき点があります。約5000語の詳細な記事として、いくつかの発展的なトピックに触れておきます。
7.1 本番環境における設定のベストプラクティス
開発環境のシングルノードから本番環境の複数ノードクラスタに移行する場合、設定やシステムチューニングはより重要になります。
- 複数ノードでのクラスタリング:
discovery.seed_hosts
とcluster.initial_master_nodes
を適切に設定し、クラスタを構成します。- ノードには役割(マスターノード、データノード、インジェストノードなど)を持たせることができ、大規模なクラスタでは役割分担によって運用効率や安定性を高めます。
- ノード間の通信(
transport.port: 9300
)がファイアウォールでブロックされていないか確認します。
- セキュリティ:
- TLS/SSL通信: クライアント(Kibana, アプリケーション)とElasticsearch間、およびノード間の通信を暗号化するためにTLS/SSLを有効にします。これにより、通信の盗聴や改ざんを防ぎます。
- 認証/認可: ユーザー認証(Basic認証、APIキーなど)と、ユーザーがどのインデックスに対してどのような操作(読み込み、書き込みなど)を許可されるかを定義するロールベースアクセス制御(RBAC)を設定します。
- IPフィルタリング: ファイアウォールやElasticsearch自体の設定 (
network.host
や IPフィルタリング設定) で、信頼できるIPアドレスからのアクセスのみを許可するように制限します。
- リソース割り当て:
- 前述のメモリ、ストレージ(特にSSD)、CPUの要件を十分に満たすサーバーを用意します。
- Javaヒープサイズは物理メモリの半分以下に設定し、OSのファイルシステムキャッシュに十分なメモリを割り当てます。
- システムチューニング:
- ファイルディスクリプタ数、仮想メモリ設定 (
vm.max_map_count
)、スワップの無効化、メモリロック (mlockall
) といった推奨設定を必ず適用します。
- ファイルディスクリプタ数、仮想メモリ設定 (
- 監視とアラート:
- Elastic StackのMetricbeatやAPM、または外部の監視ツールを使って、クラスタの状態、ノードのリソース使用状況(CPU、メモリ、ディスク、ネットワーク)、Elasticsearchのメトリクス(検索スループット、インデックス遅延、ガーベージコレクションなど)を継続的に監視します。
- 閾値を超えた場合にアラートを送信する仕組みを構築し、問題発生時に迅速に対応できるようにします。
- バックアップとリカバリ:
- Repository APIを使って、インデックスのスナップショット(バックアップ)を定期的に取得し、安全な場所(共有ファイルシステム、S3などのオブジェクトストレージ)に保存します。
- 障害発生時にバックアップからデータを復旧する手順を確立しておきます。
7.2 データ永続化とストレージ設計の重要性
Elasticsearchのデータディレクトリ (path.data
) には、インデックスのシャードデータやメタデータといった失うと困るデータが保存されます。そのため、このディレクトリの設計は非常に重要です。
- 信頼性: データの損失を防ぐため、RAID構成やクラウドストレージの冗長化オプションなど、信頼性の高いストレージシステムを使用します。
- 性能: ElasticsearchはI/O負荷が高いため、高速なストレージ(SSD)が不可欠です。ディスクのランダムリード/ライト性能が検索やインデックス作成性能に大きく影響します。可能であれば、データディレクトリ専用の高速SSDを用意することが理想的です。
- 容量: 将来のデータ増加を見越して、十分な容量を確保します。古いデータを定期的に削除したり、Cold/Frozen Tierといったアーカイブ用のストレージ機能(有料ライセンスの場合)を利用することも検討します。
- 分離: OSやログファイルとは別の物理ディスクまたは論理ボリュームに配置することが推奨されます。これにより、OSの障害やログの増加がElasticsearchのデータディスクに影響を与えるのを防ぎます。
7.3 Javaバージョンの選択とOpenJDKの使用推奨
前述の通り、ElasticsearchはJava上で動作します。利用するElasticsearchのバージョンがサポートするJavaバージョンを確認し、インストールしてください。
- サポートされるバージョン: Elasticsearchの公式ドキュメントで、利用するバージョンがサポートするJDKのリストを確認します。一般的に、特定のメジャーバージョンのOpenJDK(例: OpenJDK 8, OpenJDK 11, OpenJDK 17)が推奨または必須とされています。
- OpenJDKの使用: Oracle JDKは商用利用にライセンス費用がかかる場合があるため、多くのElasticsearchユーザーはAdoptium (旧 AdoptOpenJDK)、Amazon Corretto、Azul ZuluなどのライセンスフリーなOpenJDKディストリビューションを使用しています。Elasticsearchの配布物には、互換性のあるOpenJDKが同梱されているものもあります。
- 互換性: サポートされていない古いJavaバージョンや、新しいJavaバージョン(まだElasticsearchが対応していないもの)を使用すると、予期しない問題やパフォーマンスの低下を招く可能性があります。
7.4 メモリ要件とヒープサイズ設定の詳細解説
Elasticsearchのパフォーマンスを決定する最も重要な要素の一つがメモリです。
- Javaヒープ (
-Xms
,-Xmx
): Elasticsearchの内部処理、インデックスデータの管理、検索処理などで使用されるメモリ領域です。前述の通り、物理メモリの半分以下に設定し、-Xms
と-Xmx
は同じ値に設定します。最大サイズは30GB程度までに抑えることが推奨される場合があります(Compressed Ordinary Object Pointers (OOPs) の上限による)。それ以上のメモリが必要な場合は、ノード数を増やすことを検討します。 - ファイルシステムキャッシュ: ElasticsearchはOSのファイルシステムキャッシュを積極的に利用します。検索やインデックス作成の際、ディスク上のデータをキャッシュから読み取れると、劇的に性能が向上します。Javaヒープ以外の物理メモリは、可能な限りファイルシステムキャッシュに割り当てられるように確保する必要があります。これが、ヒープサイズを物理メモリの半分以下に設定する最大の理由です。
7.5 システムチューニングの詳細
- ファイルディスクリプタ数 (
nofile
): Elasticsearchが同時に開くことができるファイルの最大数です。インデックスのシャードごとに多くのファイルを使用するため、データ量やシャード数に応じて増やす必要があります。デフォルトのままではすぐに枯渇し、エラーが発生します。limits.conf
で設定します。 - 仮想メモリマップ数 (
vm.max_map_count
): Luceneが使用するメモリマップファイルの数に関連します。これもデータ量やインデックス構造によって増加するため、上限を引き上げる必要があります。sysctl.conf
で設定します。 - スワップ: 繰り返しになりますが、スワップはElasticsearchの性能を致命的に低下させます。可能な限り無効化するか、極めて発生しにくいように設定します。
7.6 よくあるインストール時のトラブルシューティングパターン
インストールや起動時に遭遇しやすい問題とその原因、対処法をいくつか紹介します。
- Java関連のエラー:
- 原因: 適切なJavaバージョンがインストールされていない、またはElasticsearchが正しいJavaを見つけられていない。
- 対処:
java -version
でバージョンを確認し、必要であれば適切なJDKをインストールする。環境変数JAVA_HOME
を設定する。/etc/elasticsearch/jvm.options
でJava実行ファイルのパスを明示的に指定する。
- メモリ関連のエラー (
OutOfMemoryError
,bootstrap checks failed
でmemory lock failure
):- 原因: Javaヒープサイズ設定が不適切、システムメモリ不足、メモリロック設定ができていない(権限不足など)。
- 対処:
/etc/elasticsearch/jvm.options
でヒープサイズを調整する(物理メモリの半分以下に)。システムメモリを増設する。メモリロックを有効にする場合は、/etc/security/limits.conf
やsystemdユニットファイルでmemlock
権限を適切に設定する。
- ファイルディスクリプタ数/仮想メモリマップ数に関するエラー (
bootstrap checks failed
でmax file descriptors ...
,max number of memory map areas ...
):- 原因: OSのファイルディスクリプタ数や仮想メモリマップ数の上限がElasticsearchの推奨値を下回っている。
- 対処:
/etc/security/limits.conf
でnofile
を、/etc/sysctl.conf
でvm.max_map_count
をそれぞれ推奨値以上に設定し、システムに反映させる。
- ポート競合:
- 原因: 9200 (HTTP) や 9300 (Transport) といったElasticsearchが使用するポートが、既に他のプロセスに使用されている。
- 対処:
netstat
やlsof
コマンドを使ってどのプロセスがそのポートを使用しているか確認する。競合しているプロセスを停止するか、Elasticsearchのポート設定 (elasticsearch.yml
のhttp.port
,transport.port
) を変更する。
- 権限エラー:
- 原因: Elasticsearchプロセスが、データディレクトリ、ログディレクトリ、設定ファイルなどに書き込む権限を持っていない。
- 対処:
ls -l
やdir
コマンドでディレクトリの所有者と権限を確認する。必要であればchown
やchmod
コマンドでElasticsearchを実行するユーザーに適切な権限を与える。
7.7 ElasticsearchとElastic Stack全体の連携
Elasticsearchは、単体でもREST API経由で利用できますが、Elastic Stackの他のコンポーネントと組み合わせることで、その真価を発揮します。
- Kibana: Elasticsearchデータの可視化、分析、管理UI。インストール後はまずKibanaをセットアップすることをお勧めします。
- Logstash: 多様なデータソースからデータを収集・加工し、Elasticsearchに転送するETLツール。ログファイルやデータベースなどからデータを収集する場合に利用します。
- Beats: 軽量なデータシッパー。サーバーのログ(Filebeat)、メトリクス(Metricbeat)、ネットワークデータ(Packetbeat)、セキュリティデータ(Auditbeat)などを収集し、直接ElasticsearchまたはLogstashに転送します。
- APM (Application Performance Monitoring): アプリケーションの性能監視。
- Uptime: サービスの稼働状況監視。
- Security: セキュリティイベント管理(SIEM)やエンドポイントセキュリティ。
これらのコンポーネントも、Elasticsearchと同様の方法(パッケージ、Dockerなど)でインストールできます。連携設定は通常、接続先のElasticsearchのURLと認証情報を設定するだけで行えます。
7.8 Elastic Cloudのさらなる利点
Elastic Cloudは単にインストール・運用が不要なだけでなく、以下のようなさらなる利点があります。
- マネージドサービス: Elastic社が専門知識を持ってクラスタの監視、パッチ適用、バックアップ、スケーリングなどを代行してくれます。運用負担が大幅に軽減されます。
- エンタープライズ機能: セキュリティ、監視、アラート、機械学習、グラフ分析など、X-Packの商用機能(現在のSubscriptionレベルに応じた機能)を簡単に利用できます。
- 統合プラットフォーム: Elasticsearchだけでなく、Kibana、APM、Uptime、SecurityなどのElastic Stackコンポーネントを統合された環境で利用できます。
- グローバルな展開: 主要なクラウドプロバイダーの多くのリージョンで利用可能です。
- サポート: Elastic社からの公式サポートを受けることができます。
無料トライアルが提供されているため、まずは試してみて、オンプレミスでの運用と比較検討する価値は十分にあります。
8. まとめ:Elasticsearch導入の成功に向けて
この記事では、Elasticsearchのインストール方法に焦点を当て、様々なOS環境や利用方法に応じた具体的な手順、インストール前の準備、インストール後の初期設定、そして基本的な動作確認までを詳細に解説しました。
この記事の要点:
- Elasticsearchは高速な検索・分析を可能にする分散型エンジンであり、ログ分析、検索機能、リアルタイム分析など多岐にわたる用途で利用されます。
- インストール前には、システム要件(特にメモリとストレージ)、Javaの準備、そしてインストール方法の選択が重要です。
- 主要なインストール方法として、パッケージ管理システム (APT/YUM)、Homebrew、ZIP/TARアーカイブ、Docker、そしてElastic Cloud(マネージドサービス)があります。
- インストール後の初期設定では、
elasticsearch.yml
ファイルでクラスタ名、ノード名、ネットワーク設定、データ/ログパスなどを設定します。 - 特にJavaヒープサイズ (
jvm.options
) とLinux環境でのシステム設定(ファイルディスクリプタ数、vm.max_map_count、スワップ、メモリロック)は、パフォーマンスと安定性に大きく影響するため適切に行う必要があります。 - Elasticsearch 8.x以降ではセキュリティ機能がデフォルトで有効になっている点に注意が必要です。
curl
コマンドでREST APIにアクセスしてクラスタ情報を取得することで、基本的な動作確認ができます。Kibanaを導入すると、GUIでより簡単に操作できます。- 本番環境では、複数ノードでのクラスタリング、厳格なセキュリティ設定、十分なリソースとシステムチューニング、そして監視・バックアップが必須となります。
- DockerやElastic Cloudは、手軽にElasticsearchを試したい場合に有効な手段です。
Elasticsearchのインストールは、データ活用を始める上での最初の、そして非常に重要なステップです。この記事を参考に、あなたの環境でElasticsearchを立ち上げることができたなら、次はElasticsearchにデータを投入し、Kibanaを使ってそのデータを可視化・分析するステップに進みましょう。
公式ドキュメントは、Elasticsearchの機能、設定、運用に関する最も正確で詳細な情報源です。この記事で触れられなかったさらに高度な設定や、特定の機能について詳しく知りたい場合は、必ず公式ドキュメントを参照してください。
Elasticsearchの強力な機能は、あなたのビジネスやプロジェクトに新たな可能性をもたらすはずです。この記事が、その旅の良いスタート地点となることを願っています。
これで、約5000語の詳細な解説記事は完了です。