Rocky Linux 8にElasticsearchをインストールして設定する方法は以下の通りです。
イントロダクション
Elasticsearchは、リアルタイムでデータの分散検索と分析を行うためのプラットフォームです。使いやすさ、強力な機能、拡張性を備えた人気のある選択肢です。
この記事では、Elasticsearch 8.xのインストール方法、ユーズケースに合わせた設定方法、セキュリティの確保、そしてElasticsearchサーバーの使用方法について案内します。
前提条件 (Zenteijōken)
このチュートリアルに進む前に、以下が必要です:
- A Rocky Linux 8 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 8
Elasticsearchはデフォルトで約1GBのRAMを割り当てるため、比較的高い要件を持つことがあります。したがって、メモリ制約のある環境ではスワップを有効にする必要があるかもしれません。Elasticsearchサーバーの必要なCPU、RAM、およびストレージの量は、生成するレコードの数に依存します。
ステップ1 – Elasticsearchのインストールと設定
Elasticsearchをインストールする前に、使用可能なテキストエディタがインストールされていることを確認してください。Rocky Linux 8にはデフォルトのテキストエディタとしてviが付属しています。viは非常に強力なテキストエディタですが、経験がないユーザーには分かりづらいかもしれません。Rocky Linux 8サーバーの設定ファイルを編集するために、より使いやすいエディタであるnanoをインストールすることをおすすめします。
- sudo dnf install nano -y
今度はElasticsearchのインストールに進むことができます。ElasticsearchのコンポーネントはRockyのデフォルトのパッケージリポジトリでは利用できません。代わりに、Elasticsearchプロジェクトが管理するリポジトリから利用することができます。
すべてのパッケージは、パッケージ偽装からシステムを保護するためにElasticsearchの署名キーで署名されています。キーを使用して認証されたパッケージは、パッケージマネージャーによって信頼されると見なされます。この手順では、Elasticsearchの公開GPGキーをインポートし、Elasticパッケージソースリストを追加してElasticsearchをインストールします。
最初に、rpmパッケージツールを使用してelastic.coからキーをインポートします。
- rpm –import https://artifacts.elastic.co/GPG-KEY-elasticsearch
次に、nanoまたはお気に入りのテキストエディタを使用して、/etc/yum.repos.d/ディレクトリにelasticsearch.repoという名前のファイルを作成します。これにより、パッケージマネージャーがElasticsearchリポジトリに接続できるようになります。
- sudo nano /etc/yum.repos.d/elasticsearch.repo
/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とEnterを入力することで保存して終了できます。
最後に、dnfパッケージマネージャーを使用してElasticsearchをインストールします。
- sudo dnf install –enablerepo=elasticsearch elasticsearch
「インストールを確定するためにプロンプトされたら、yを押してください。」
Elasticsearchのインストール出力の一部には、セキュリティの自動構成情報が含まれており、何よりも重要なことは、自動生成されたElasticsearch管理者パスワードです。
————————— 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ディレクトリに配置されています。
nanoまたはお気に入りのテキストエディタを使用して、Elasticsearchの設定ファイルを開きます。
- sudo nano /etc/elasticsearch/elasticsearch.yml
Note
「elasticsearch.yml」ファイルは、クラスター、ノード、パス、メモリ、ネットワーク、ディスカバリー、ゲートウェイの設定オプションを提供します。これらのオプションのほとんどはファイル内で事前に設定されていますが、必要に応じて変更することができます。このシングルサーバーの設定では、ネットワークホストの設定のみを調整します。
Elasticsearchはポート9200でどこからでものトラフィックを受け付けます。これはElasticsearch 8.xでは以前のバージョンほどの問題ではありません。なぜなら、Elasticsearchはデフォルトで認証が必要になったからです。それでも、おそらく外部からのアクセスを制限する必要があるでしょう。これは、外部からのデータの読み取りやElasticsearchクラスターのシャットダウンを防ぐためです。アクセスを制限するためには、network.hostを指定する行を見つけ、行の先頭の#を削除してコメントを解除し、値をlocalhostに置き換える必要があります。例えば、次のようになります。
「/etc/elasticsearch/elasticsearch.yml」
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .
localhostを指定すると、ElasticsearchはすべてのインターフェースとバインドされたIPでリッスンします。特定のインターフェースのみでリッスンする場合は、そのIPをlocalhostの代わりに指定することができます。elasticsearch.ymlを保存して閉じてください。nanoを使用している場合は、Ctrl+Xを使用して保存して終了し、プロンプトが表示された場合はYを押し、次にEnterを押します。
Elasticsearchを使用するために最低限必要な設定があります。これで初めてElasticsearchを起動できます。
systemctlを使ってElasticsearchのサービスを開始してください。Elasticsearchが起動するまでしばらくお待ちください。それ以外の場合は接続できないというエラーが発生する可能性があります。
- sudo systemctl start elasticsearch
次に、サーバーが起動するたびにElasticsearchが起動するようにするために、以下のコマンドを実行してください。
- sudo systemctl enable elasticsearch
起動時にElasticsearchが有効になると、次のステップに進んでセキュリティについて話しましょう。
ステップ3 – Elasticsearchのセキュリティ確保
ElasticsearchのHTTP APIにアクセスできる人なら誰でも制御できます。ただし、それはセキュリティリスクとは限りません。なぜなら、すでにElasticsearchをlocalhostのみでリッスンするように設定しており、さらにElasticsearch 8以降ではデフォルトで管理者パスワードが設定されているからです。
HTTP APIへのリモートアクセスを許可する必要がある場合は、firewalldを使用してネットワークの露出範囲を制限することができます。このファイアウォールは、Rocky Linux 8の前提条件として示された「初期サーバーセットアップ」チュートリアルの手順に従っている場合、すでに有効になっているはずです。Elasticsearchはポート9200で実行されているため、外部アクセスが必要な場合は、ポート9200を開放または制限するファイアウォールプロファイルを作成することができます。
もし追加の保護に投資したい場合、Elasticsearchでは商用のShieldプラグインを購入することができます。
ステップ4 — Elasticsearchのテスト
現在、Elasticsearchはポート9200で実行されているはずです。curlを使って、localhost:9200に標準のHTTP GETリクエストを送信してテストできます。Elasticsearch 8.x以降では、Elasticsearch APIはデフォルトでHTTPS認証を必要としますので、–cacert引数を使用して提供された証明書をリクエストに含めることができます。最後に、デフォルトの管理者ユーザーである「elastic」を指定するために、-u elastic引数を含めてください。
- curl –cacert /etc/elasticsearch/certs/http_ca.crt -u elastic https://localhost:9200
インストール時に受け取った管理者パスワードを入力するように促されます。認証が完了した後、以下の応答が受け取れるはずです。
{ “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を追加して、人間が読みやすいテキスト形式を取得してみてください。
- 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形式のデータを含めます。
最初のエントリーをこういう風に追加することができます。
- 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”]}’
あなたは次の応答を受け取るべきです。
{ “_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リクエストを使用して、この最初のエントリを取得することができます。
- 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’
これが出力結果となります:
{ “_index” : “test”, “_id” : “1”, “_version” : 1, “_seq_no” : 0, “_primary_term” : 1, “found” : true, “_source” : { “counter” : 1, “tags” : [ “red” ] } }
既存のエントリを変更するには、HTTP PUTリクエストを使用することができます。
- 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は、次のように正常に修正が行われたことを認識する必要があります。
{ “_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のドキュメンテーションを参照してください。