Elasticsearch インストールと初期設定:検索エンジン構築の第一歩

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 # バージョン確認
  • メモリとディスク容量の確保: 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

3. Elasticsearchのインストール

Elasticsearchは、複数の方法でインストールできます。ここでは、debパッケージを使用する方法、RPMパッケージを使用する方法、Dockerを使用する方法について説明します。

3.1. debパッケージを使用したインストール (Ubuntu/Debian)

  1. 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 update

    • 7.x は、インストールするElasticsearchのバージョンに合わせて変更してください。
  2. Elasticsearchのインストール:
    bash
    sudo apt install elasticsearch

  3. Elasticsearchサービスの起動:
    bash
    sudo systemctl start elasticsearch

  4. Elasticsearchサービスの自動起動設定:
    bash
    sudo systemctl enable elasticsearch

3.2. RPMパッケージを使用したインストール (CentOS/RHEL)

  1. 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
    EOF

    • 7.x は、インストールするElasticsearchのバージョンに合わせて変更してください。
  2. Elasticsearchのインストール:
    bash
    sudo yum install elasticsearch

  3. Elasticsearchサービスの起動:
    bash
    sudo systemctl start elasticsearch

  4. Elasticsearchサービスの自動起動設定:
    bash
    sudo systemctl enable elasticsearch

3.3. Dockerを使用したインストール

Dockerを使用すると、Elasticsearchをコンテナ化して簡単に実行できます。

  1. Dockerのインストール:

    • Dockerがインストールされていない場合は、Docker公式ドキュメントに従ってインストールしてください。
  2. Elasticsearchイメージのpull:
    bash
    docker pull docker.elastic.co/elasticsearch/elasticsearch:7.17.6 # 例: バージョン7.17.6

    • 7.17.6 は、インストールするElasticsearchのバージョンに合わせて変更してください。
  3. 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-application
  • node.name: ノード名を設定します。各ノードに一意の名前を付けることで、クラスタ内でノードを識別しやすくなります。
    yaml
    node.name: node-1
  • network.host: Elasticsearchがリッスンするネットワークインターフェースを設定します。
    • 0.0.0.0 を指定すると、すべてのインターフェースでリッスンします。ただし、セキュリティ上のリスクがあるため、本番環境では特定のインターフェースを指定することを推奨します。
      yaml
      network.host: 0.0.0.0
  • http.port: ElasticsearchのREST APIがリッスンするポートを設定します。デフォルトは9200です。
    yaml
    http.port: 9200
  • discovery.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/elasticsearch
  • path.logs: ログの保存先ディレクトリを設定します。
    yaml
    path.logs: /var/log/elasticsearch
  • bootstrap.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の起動:
    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のエキスパートを目指しましょう。

コメントする

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

上部へスクロール