Elasticsearch インストールと初期設定:検索エンジン構築の第一歩
Elasticsearchは、オープンソースの分散型検索・分析エンジンです。大量のデータをリアルタイムで検索、分析、可視化する能力を備えており、ログ分析、セキュリティ分析、eコマース検索、アプリケーションパフォーマンス監視など、幅広い分野で活用されています。
本記事では、Elasticsearchのインストールから初期設定までを詳細に解説し、検索エンジン構築の第一歩を踏み出すための手順を網羅的にご紹介します。
1. Elasticsearchとは?
Elasticsearchは、Apache Luceneをベースとした全文検索エンジンであり、JSON形式のドキュメントをインデックス化し、高速かつ柔軟な検索を可能にします。以下の主な特徴があります。
- 分散型アーキテクチャ: 複数のノードで構成されたクラスタを構築し、データの分散と冗長性を実現。これにより、高い可用性とスケーラビリティを確保できます。
- リアルタイム検索: データのインデックス化と検索がほぼ同時に行われるため、リアルタイムな検索結果を提供できます。
- RESTful API: データの操作や検索、クラスタ管理など、あらゆる操作をRESTful APIを通じて実行できます。
- 柔軟なデータモデル: JSON形式のドキュメントを扱うため、様々なデータ構造に対応できます。
- 豊富な分析機能: 検索だけでなく、集計、フィルタリング、並べ替えなど、高度なデータ分析機能を備えています。
- Kibanaとの連携: データ可視化ツールであるKibanaと連携することで、データの傾向や異常を視覚的に把握できます。
2. インストール前の準備
Elasticsearchをインストールする前に、以下の準備が必要です。
- Java Runtime Environment (JRE) のインストール: ElasticsearchはJavaで動作するため、JREが必要です。OpenJDKまたはOracle JDKをインストールしてください。推奨バージョンは、Elasticsearchのバージョンによって異なりますので、公式ドキュメントを確認してください。
- OpenJDKインストール例 (Ubuntu):
bash
sudo apt update
sudo apt install openjdk-17-jdk
java -version # バージョン確認
- OpenJDKインストール例 (Ubuntu):
- メモリとディスク容量の確保: Elasticsearchは大量のメモリとディスク容量を使用する可能性があります。システムの要件に応じて、十分なリソースを確保してください。
- メモリ: 少なくとも4GB以上のRAMを推奨します。本番環境では、より多くのメモリが必要になる場合があります。
- ディスク容量: インデックス化するデータの量に応じて、十分なディスク容量を確保してください。SSDを使用することで、検索パフォーマンスを向上させることができます。
- OSのチューニング: Elasticsearchのパフォーマンスを最大限に引き出すために、OSのチューニングを行う必要があります。
- ulimitの設定: Elasticsearchプロセスが使用できるファイルディスクリプタの数とメモリの量を増やします。
/etc/security/limits.conf
を編集し、以下の行を追加します。
“`- soft nofile 65535
- hard nofile 65535
- soft memlock unlimited
- hard memlock unlimited
“`
- 設定を反映させるために、システムを再起動するか、セッションを再ログインします。
- swappinessの設定: スワップ領域の使用を抑制することで、パフォーマンスを向上させます。
/etc/sysctl.conf
を編集し、以下の行を追加します。
vm.swappiness = 1
- 設定を反映させるために、以下のコマンドを実行します。
bash
sudo sysctl -p
- ulimitの設定: Elasticsearchプロセスが使用できるファイルディスクリプタの数とメモリの量を増やします。
3. Elasticsearchのインストール
Elasticsearchは、複数の方法でインストールできます。ここでは、debパッケージを使用する方法、RPMパッケージを使用する方法、Dockerを使用する方法について説明します。
3.1. debパッケージを使用したインストール (Ubuntu/Debian)
-
Elasticsearchリポジトリの追加:
bash
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list
sudo apt update7.x
は、インストールするElasticsearchのバージョンに合わせて変更してください。
-
Elasticsearchのインストール:
bash
sudo apt install elasticsearch -
Elasticsearchサービスの起動:
bash
sudo systemctl start elasticsearch -
Elasticsearchサービスの自動起動設定:
bash
sudo systemctl enable elasticsearch
3.2. RPMパッケージを使用したインストール (CentOS/RHEL)
-
Elasticsearchリポジトリの追加:
bash
sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
sudo tee /etc/yum.repos.d/elasticsearch.repo <<EOF
[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
EOF7.x
は、インストールするElasticsearchのバージョンに合わせて変更してください。
-
Elasticsearchのインストール:
bash
sudo yum install elasticsearch -
Elasticsearchサービスの起動:
bash
sudo systemctl start elasticsearch -
Elasticsearchサービスの自動起動設定:
bash
sudo systemctl enable elasticsearch
3.3. Dockerを使用したインストール
Dockerを使用すると、Elasticsearchをコンテナ化して簡単に実行できます。
-
Dockerのインストール:
- Dockerがインストールされていない場合は、Docker公式ドキュメントに従ってインストールしてください。
-
Elasticsearchイメージのpull:
bash
docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6 # 例: バージョン7.17.67.17.6
は、インストールするElasticsearchのバージョンに合わせて変更してください。
-
Elasticsearchコンテナの実行:
bash
docker run -d -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.17.6-p 9200:9200
: ElasticsearchのREST APIポートをホストに公開します。-p 9300:9300
: Elasticsearchのノード間通信ポートをホストに公開します。-e "discovery.type=single-node"
: シングルノードクラスタとして実行する場合に指定します。
4. Elasticsearchの初期設定
Elasticsearchのインストールが完了したら、初期設定を行います。
4.1. 設定ファイルの編集
Elasticsearchの設定ファイルは、/etc/elasticsearch/elasticsearch.yml
にあります。このファイルを編集することで、クラスタ名、ノード名、ネットワーク設定、メモリ設定などを変更できます。
cluster.name
: クラスタ名を設定します。複数のElasticsearchインスタンスを同じクラスタに含める場合は、同じクラスタ名を指定します。
yaml
cluster.name: my-applicationnode.name
: ノード名を設定します。各ノードに一意の名前を付けることで、クラスタ内でノードを識別しやすくなります。
yaml
node.name: node-1network.host
: Elasticsearchがリッスンするネットワークインターフェースを設定します。0.0.0.0
を指定すると、すべてのインターフェースでリッスンします。ただし、セキュリティ上のリスクがあるため、本番環境では特定のインターフェースを指定することを推奨します。
yaml
network.host: 0.0.0.0
http.port
: ElasticsearchのREST APIがリッスンするポートを設定します。デフォルトは9200です。
yaml
http.port: 9200discovery.seed_hosts
: クラスタ内の他のノードを発見するためのホストリストを設定します。- シングルノードクラスタの場合は、自身のホスト名を指定します。
- 複数のノードでクラスタを構築する場合は、他のノードのホスト名を指定します。
yaml
discovery.seed_hosts: ["node-1", "node-2"]
cluster.initial_master_nodes
: クラスタの初期化時にマスター候補となるノードのリストを設定します。- 最初のノードを起動する際に、この設定が必要です。
yaml
cluster.initial_master_nodes: ["node-1"]
- 最初のノードを起動する際に、この設定が必要です。
path.data
: データの保存先ディレクトリを設定します。
yaml
path.data: /var/lib/elasticsearchpath.logs
: ログの保存先ディレクトリを設定します。
yaml
path.logs: /var/log/elasticsearchbootstrap.memory_lock
: メモリロックを有効にするかどうかを設定します。true
に設定すると、Elasticsearchプロセスが使用するメモリがスワップアウトされるのを防ぎ、パフォーマンスを向上させることができます。- ただし、root権限が必要です。
yaml
bootstrap.memory_lock: true
注意: 設定ファイルを変更した場合は、Elasticsearchサービスを再起動する必要があります。
4.2. Elasticsearchの動作確認
Elasticsearchサービスが正常に起動しているかどうかを確認するには、以下のコマンドを実行します。
bash
curl -X GET "http://localhost:9200"
成功した場合、以下のようなJSON形式のレスポンスが返されます。
json
{
"name" : "node-1",
"cluster_name" : "my-application",
"cluster_uuid" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"version" : {
"number" : "7.17.6",
"build_flavor" : "default",
"build_type" : "deb",
"build_hash" : "xxxxxxxxxxxxxxxxxxxxxxxxxxxx",
"build_date" : "2023-01-01T00:00:00.000000Z",
"build_snapshot" : false,
"lucene_version" : "8.11.1",
"minimum_wire_compatibility_version" : "6.8.0",
"minimum_index_compatibility_version" : "6.0.0-beta1"
},
"tagline" : "You Know, for Search"
}
4.3. セキュリティ設定
Elasticsearchを安全に運用するために、セキュリティ設定を行う必要があります。
-
Elasticsearch Security (旧X-Pack Security) の有効化:
- Elasticsearch Securityは、認証、認可、暗号化などのセキュリティ機能を提供します。
- Elasticsearch Securityは、Basicライセンスで利用できる機能と、より高度な機能を提供するGold/Platinumライセンスで利用できる機能があります。
-
Basicライセンスでも、ユーザー認証とロールベースアクセス制御を利用できます。
-
Elasticsearch Securityを有効にするには、以下のコマンドを実行します。
bash
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive- このコマンドを実行すると、
elastic
ユーザー、kibana_system
ユーザー、apm_system
ユーザーなどのパスワードを設定できます。 - 設定されたパスワードは、ElasticsearchのREST APIにアクセスする際に必要になります。
- このコマンドを実行すると、
-
TLS/SSL の設定:
- Elasticsearchノード間の通信とクライアントとElasticsearchノード間の通信を暗号化するために、TLS/SSLを設定します。
- TLS/SSLの設定には、証明書が必要です。自己署名証明書を使用することもできますが、本番環境では認証局から発行された証明書を使用することを推奨します。
- TLS/SSLの設定方法については、Elasticsearch公式ドキュメントを参照してください。
-
ファイアウォールの設定:
- Elasticsearchのポートへのアクセスを制限するために、ファイアウォールを設定します。
- Elasticsearchのポート(デフォルトでは9200と9300)へのアクセスを、信頼できるクライアントからのアクセスのみに許可します。
5. Kibanaとの連携
Kibanaは、Elasticsearchのデータを可視化するためのオープンソースのツールです。Kibanaを使用すると、データの傾向や異常を視覚的に把握し、インタラクティブなダッシュボードを作成できます。
-
Kibanaのインストール:
- Elasticsearchと同様に、debパッケージ、RPMパッケージ、Dockerなど、複数の方法でインストールできます。
-
Kibanaの設定:
- Kibanaの設定ファイルは、
/etc/kibana/kibana.yml
にあります。 - 以下の設定項目を確認してください。
elasticsearch.hosts
: Elasticsearchのホスト名とポートを設定します。
yaml
elasticsearch.hosts: ["http://localhost:9200"]elasticsearch.username
: Elasticsearchの認証に必要なユーザー名を設定します。
yaml
elasticsearch.username: "kibana_system"elasticsearch.password
: Elasticsearchの認証に必要なパスワードを設定します。
yaml
elasticsearch.password: "your_kibana_system_password"
- Kibanaの設定ファイルは、
-
Kibanaの起動:
bash
sudo systemctl start kibana -
Kibanaへのアクセス:
- ブラウザで
http://localhost:5601
にアクセスすると、KibanaのGUIが表示されます。
- ブラウザで
6. データ投入と検索
Elasticsearchにデータを投入し、検索を行う方法を説明します。
6.1. データ投入
Elasticsearchにデータを投入するには、REST APIを使用します。
bash
curl -X POST "http://localhost:9200/my-index/_doc?pretty" -H 'Content-Type: application/json' -d'
{
"title": "Elasticsearch入門",
"content": "Elasticsearchは、オープンソースの検索エンジンです。",
"author": "John Doe",
"timestamp": "2023-10-27T10:00:00Z"
}
'
my-index
: インデックス名_doc
: ドキュメントタイプ (バージョン7以降は_doc
を使用)pretty
: レスポンスを整形して表示
6.2. 検索
Elasticsearchに投入したデータを検索するには、REST APIを使用します。
bash
curl -X GET "http://localhost:9200/my-index/_search?pretty" -H 'Content-Type: application/json' -d'
{
"query": {
"match": {
"content": "検索エンジン"
}
}
}
'
my-index
: インデックス名_search
: 検索APIのエンドポイントquery
: 検索クエリmatch
: 指定されたフィールドに一致するドキュメントを検索
7. まとめ
本記事では、Elasticsearchのインストールから初期設定、データ投入、検索までを詳細に解説しました。これらの手順に従うことで、検索エンジン構築の第一歩を踏み出すことができます。
Elasticsearchは、非常に強力な検索エンジンであり、様々な分野で活用できます。本記事を参考に、Elasticsearchを活用して、あなたのアプリケーションに検索機能を組み込んでみてください。
8. 今後の学習
Elasticsearchは、非常に奥深い技術であり、本記事で解説した内容はほんの一部です。より高度な検索機能やデータ分析機能を活用するためには、以下の学習をおすすめします。
-
Elasticsearch公式ドキュメント:
- Elasticsearch公式ドキュメントは、Elasticsearchのすべての機能について網羅的に解説されています。
- https://www.elastic.co/guide/index.html
-
Elasticsearchの書籍:
- Elasticsearchに関する書籍は、初心者から上級者まで、様々なレベルに対応したものが多数出版されています。
-
Elasticsearchのトレーニング:
- Elastic社が提供するElasticsearchのトレーニングを受講することで、Elasticsearchの専門知識を習得できます。
-
Elasticsearchコミュニティ:
- Elasticsearchのコミュニティに参加することで、他のユーザーと情報交換したり、質問したりすることができます。
- https://discuss.elastic.co/
Elasticsearchは、常に進化し続けている技術です。最新の情報をキャッチアップし、継続的に学習することで、Elasticsearchのエキスパートを目指しましょう。