Rocky Linux 9にElasticsearchをインストールおよび設定する方法

はじめに

Elasticsearchは、リアルタイムでデータを分散検索・分析するためのプラットフォームです。使いやすさ、強力な機能、拡張性の高さから、人気のある選択肢となっています。

この記事では、Elasticsearch 8.xのインストール方法から、使用例に合わせた設定方法、インストールのセキュリティ確保、そしてElasticsearchサーバーの操作までを指南します。

前提条件

このチュートリアルを始める前に、必要なものがあります。

  • A Rocky Linux 9 server with 2GB RAM and 2 CPUs set up with a non-root sudo user. You can achieve this by following the Initial Server Setup with Rocky Linux 9

デフォルトではElasticsearchは約1GBのRAMを割り当てるため、比較的高い要件を持つことがあります。そのため、メモリ制約のある環境でスワップを有効にする必要があるかもしれません。Elasticsearchサーバーが必要とするCPU、RAM、ストレージの量は、生成するレコードの数に依存します。

ステップ1 — Elasticsearchのインストールと設定

Elasticsearchをインストールする前に、使えるテキストエディタがインストールされていることを確認してください。Rocky Linux 9にはデフォルトでviというテキストエディタが付属しています。viは非常に強力なテキストエディタですが、経験がないユーザーにとってはやや理解しづらいかもしれません。Rocky Linux 9サーバーで設定ファイルを編集するためにより使いやすいエディタ(例えばnano)をインストールすることをおすすめします。

  1. sudo dnf install nano -y

 

今すぐElasticsearchのインストールを行うことができます。ElasticsearchのコンポーネントはRockyのデフォルトのパッケージリポジトリでは利用できません。代わりに、Elasticsearchプロジェクトが維持するリポジトリから利用することができます。

すべてのパッケージはElasticsearch署名キーで署名されており、パッケージのなりすましを防ぐために保護されています。キーで認証されたパッケージは、パッケージマネージャーに信頼されたものとして扱われます。この手順では、Elasticsearchの公開GPGキーをインポートし、Elasticパッケージのソースリストを追加してElasticsearchをインストールします。

始めに、rpmパッケージツールを使用してelastic.coから鍵をインポートします。

  1. rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch

 

次に、nanoまたはお好みのテキストエディタを使用して、/etc/yum.repos.d/ディレクトリにelasticsearch.repoという名前のファイルを作成し、パッケージマネージャがElasticsearchリポジトリに接続できるようにします。

  1. sudo nano /etc/yum.repos.d/elasticsearch.repo

 

以下の表現を日本語で解釈すると、
「/etc/yum.repos.d/elasticsearch.repo」
[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=0
autorefresh=1
type=rpm-md

ファイルの「 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch 」の部分は、Elasticsearchパッケージのリポジトリとファイル情報を検証するためにダウンロードしたキーをパッケージマネージャーに使用するよう指示します。

ファイルを保存して閉じる。もしnanoを使用している場合は、Ctrl+Xを押してから、Yとエンターキーを押すことで保存して終了できます。

最後に、dnfパッケージマネージャーを使用してElasticsearchをインストールしてください。

  1. sudo dnf install –enablerepo=elasticsearch elasticsearch

 

インストールを確認するように求められたら、yキーを押してください。

Elasticsearchのインストール出力には、セキュリティの自動設定情報が含まれるべきです。そして何よりも重要なのは、自動生成されたElasticsearch管理者パスワードです。

Output

————————— Security autoconfiguration information —————————— Authentication and authorization are enabled. TLS for the transport and HTTP layers is enabled and configured. The generated password for the elastic built-in superuser is : CH77_qG8ji8QCxwUCr3w

このチュートリアルの後で使用するために、このパスワードをメモしておいてください。また、他のElasticsearchユーザーを作成する際にも必要になります。Elasticsearchは今インストールされ、設定の準備ができています。

ステップ2 — Elasticsearchの設定

Elasticsearchの設定を行うには、主要な設定ファイルであるelasticsearch.ymlを編集します。ここには、ほとんどの設定オプションが保存されています。このファイルは、/etc/elasticsearchディレクトリにあります。

ナノまたはお気に入りのテキストエディタを使用して、Elasticsearchの設定ファイルを開いてください。

  1. sudo nano /etc/elasticsearch/elasticsearch.yml

 

Note

注意:Elasticsearchの設定ファイルはYAML形式ですので、インデント構文を保持する必要があります。このファイルを編集する際に余分なスペースを追加しないようにしてください。

elasticsearch.ymlファイルは、クラスタ、ノード、パス、メモリ、ネットワーク、ディスカバリ、およびゲートウェイの設定オプションを提供します。これらのオプションのほとんどはファイル内で事前に設定されていますが、必要に応じて変更することができます。このシングルサーバーの設定では、ネットワークホストの設定のみを調整します。

Elasticsearchは、ポート9200でどこからでものトラフィックを受け付けます。Elasticsearch 8.xでは、以前のバージョンと比べて、認証がデフォルトで必要になったため、これはそれほど問題ではありません。それにもかかわらず、おそらく外部からのアクセスを制限する必要があるでしょう。これにより、外部からのデータの読み取りやElasticsearchクラスターのシャットダウンを防ぐことができます。アクセスを制限するためには、network.hostを指定する行を探し、その行の先頭の#を削除してコメント解除し、その値をlocalhostに置き換えて次のようになるようにします。

以下はいくつかの日本語で表現された「/etc/elasticsearch/elasticsearch.yml」です。

1. 「/etc/elasticsearch/elasticsearch.yml」
2. 「/etc/elasticsearch/elasticsearch.yml」ファイル
3. 「/etc/elasticsearch/elasticsearch.yml」の場所

. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .

ローカルホストを指定すると、ElasticsearchはすべてのインターフェースとバインディングされたIPでリッスンすることができます。特定のインターフェースでのみリッスンする場合は、ローカルホストの代わりにそのIPを指定することができます。elasticsearch.ymlを保存して閉じてください。nanoを使用している場合は、Ctrl+Xを使用して保存して終了し、プロンプトが表示されたらY、次にEnterを押してください。

これはElasticsearchを使用するための最小の設定です。これで初めてElasticsearchを開始することができます。

systemctlを使ってElasticsearchサービスを起動してください。Elasticsearchが起動するまでしばらくお待ちください。それ以外の場合、接続できないというエラーが発生する可能性があります。

  1. sudo systemctl start elasticsearch

 

次に、サーバーが起動するたびにElasticsearchが起動するようにするために、次のコマンドを実行してください。

  1. sudo systemctl enable elasticsearch

 

エラスティックサーチを起動すると、次のステップでセキュリティについて話しましょう。

ステップ3 – Elasticsearchのセキュリティ確保

ElasticsearchのHTTP APIにアクセスできる人なら誰でも制御することができます。これは必ずしも安全上のリスクではありません。なぜなら、すでにElasticsearchをローカルホストのみでリスンするように設定しており、またElasticsearch 8以降ではデフォルトで管理者パスワードが設定されているからです。

HTTP APIへのリモートアクセスを許可する必要がある場合、firewalldを使用してネットワークの公開範囲を制限することができます。このファイアウォールは、Rocky Linux 9の前提条件である「Initial Server Setup with Rocky Linux 9」チュートリアルの手順に従った場合は既に有効になっているはずです。Elasticsearchはポート9200で実行されていますので、外部アクセスを選択する必要がある場合は、ポート9200を開放または制限するファイアウォールプロファイルを作成することができます。

もし追加の保護に投資したい場合、Elasticsearchは購入用の商用シールドプラグインを提供しています。

ステップ4 – Elasticsearchのテスト

今の時点では、Elasticsearchはポート9200で実行されているはずです。curlを使用して、localhost:9200に標準のHTTP GETリクエストを行うことで、テストできます。Elasticsearch 8.x以降、デフォルトでElasticsearch APIはHTTPS認証を必要とするため、–cacert引数を使用して提供された証明書をリクエストに含めることができます。最後に、デフォルトの管理者ユーザーであるelasticを指定するために-u elastic引数を含めてください。

  1. curl –cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200

 

インストール時に受け取った管理者パスワードの入力を求められます。認証が完了すると、次の応答が表示されるはずです。

Output

{ “name” : “elasticrocky”, “cluster_name” : “elasticsearch”, “cluster_uuid” : “_hb4dLuuR-ipiloXHT_AMw”, “version” : { “number” : “8.5.3”, “build_flavor” : “default”, “build_type” : “rpm”, “build_hash” : “4ed5ee9afac63de92ec98f404ccbed7d3ba9584e”, “build_date” : “2022-12-05T18:22:22.226119656Z”, “build_snapshot” : false, “lucene_version” : “9.4.2”, “minimum_wire_compatibility_version” : “7.17.0”, “minimum_index_compatibility_version” : “7.0.0” }, “tagline” : “You Know, for Search” }

もし上記と似たような応答が得られた場合、Elasticsearchは正常に動作しています。もし得られない場合は、インストール手順に従ったことを確認し、Elasticsearchが完全に起動するまで十分な時間を許可していることを確認してください。

Elasticsearchのより詳細なチェックを行うには、_nodesエンドポイントをクエリし、クエリの最後に?prettyを追加して人間が読みやすいテキスト形式を取得してください。

  1. curl –cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200/_nodes?pretty

 

[secondary label Output]
{
  "_nodes" : {
    "total" : 1,
    "successful" : 1,
    "failed" : 0
  },
  "cluster_name" : "elasticsearch",
  "nodes" : {
    "7TgeSgV2Tma0quqd6Mw6hQ" : {
…

この方法によって、ノード、クラスター、アプリケーションパス、モジュールなど、すべての現在の設定を確認することができます。

ステップ5 — Elasticsearchの使用

Elasticsearchを使用し始めるには、まずデータを追加しましょう。ElasticsearchはRESTful APIを使用しており、通常のCRUDコマンド(作成、読み取り、更新、削除)に応答します。APIにデータを送信するためには、再びcurlを使用しますが、今回はGETリクエストではなくPUTリクエストを行います。-X PUTを指定し、-dを使用してコマンドラインにJSON形式のデータを含めます。

最初のエントリーは、以下のように追加することができます。

  1. curl –cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT “https://localhost:9200/test/_doc/1?pretty” -k -H ‘Content-Type: application/json’ -d ‘{“counter” : 1, “tags” : [“red”]}’

 

次のような返答を受け取るべきです。

Output

{ “_index” : “test”, “_id” : “1”, “_version” : 1, “result” : “created”, “_shards” : { “total” : 2, “successful” : 1, “failed” : 0 }, “_seq_no” : 0, “_primary_term” : 1 }

cURLを使用して、ElasticsearchサーバーにHTTP PUTリクエストを送信しました。リクエストのURIは「/test/_doc/1」で、複数のパラメータがありました。

  • test is the index of the data in Elasticsearch.
  • _doc is the type.
  • 1 is the ID of our entry under the above index and type.

HTTP GETリクエストを使用して、この最初のエントリを取得することができます。

  1. curl –cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X GET “https://localhost:9200/test/_doc/1?pretty” -k -H ‘Content-Type: application/json’

 

これが予測される結果です。

Output

{ “_index” : “test”, “_id” : “1”, “_version” : 1, “_seq_no” : 0, “_primary_term” : 1, “found” : true, “_source” : { “counter” : 1, “tags” : [ “red” ] } }

既存のエントリを変更するには、HTTP PUTリクエストを使用することができます。

  1. curl –cacert /etc/elasticsearch/certs/http_ca.crt -u elastic -X PUT “https://localhost:9200/test/_doc/1?pretty” -k -H ‘Content-Type: application/json’ -d ‘{“counter” : 1, “tags” : [“blue”]}’

 

Elasticsearchは、次のように成功した変更を認識する必要があります。

Output

{ “_index” : “test”, “_id” : “1”, “_version” : 2, “result” : “updated”, “_shards” : { “total” : 2, “successful” : 1, “failed” : 0 }, “_seq_no” : 1, “_primary_term” : 1 }

上記の例では、最初のエントリーのメッセージを「こんにちは、みなさん!」に変更しました。これにより、バージョン番号は自動的に2に増加しました。

上記のリクエストには、「pretty」という追加引数があることに気づいたかもしれません。これにより、データフィールドを新しい行に書くことができるように、フォーマットが追加されます。prettyを使用しない場合、Elasticsearchの出力は改行やインデントなしで返されます。これはAPI通信には適していますが、コマンドラインの出力では読みにくくなります。

現在、Elasticsearchにデータを追加し、クエリを実行しました。他の操作については、APIドキュメントをご確認ください。

結論

現在、Elasticsearchをインストールし、設定し、利用する準備が整いました。Elasticsearchの機能をさらに探求するには、公式のElasticsearchのドキュメンテーションを参照してください。

コメントを残す 0

Your email address will not be published. Required fields are marked *