Ubuntu 22.04でElasticsearchのインストールと設定

A previous version of this article was written by Toli.

紹介

Elasticsearchは、リアルタイムでデータを分散検索および分析するプラットフォームです。その使いやすさ、強力な機能、拡張性から人気があります。

この記事では、Elasticsearchのインストール方法、ユースケースに合わせた設定、インストールのセキュリティ確保、そしてElasticsearchサーバーの操作を始める方法について説明します。

前提条件

このチュートリアルを進める前に、以下が必要です:

このチュートリアルでは、Elasticsearchを実行するのに必要な最小限のCPUとRAMで作業します。Elasticsearchサーバーに必要なCPU、RAM、およびストレージの量は、想定されるログのボリュームに依存することに注意してください。

ステップ1 — Elasticsearchのインストールと構成

ElasticsearchのコンポーネントはUbuntuのデフォルトのパッケージリポジトリでは利用できません。ただし、Elasticのパッケージソースリストを追加した後、APTを使用してインストールすることができます。

すべてのパッケージは、Elasticsearchの署名キーで署名されています。これにより、パッケージのスプーフィングからシステムを保護します。キーを使用して認証されたパッケージは、パッケージマネージャによって信頼されるものと見なされます。このステップでは、Elasticsearchの公開GPGキーをインポートし、Elasticパッケージソースリストを追加してElasticsearchをインストールします。

まず、cURLを使用して、Elasticsearchの公開GPGキーをAPTにインポートします。 URLでデータを転送するためのコマンドラインツールです。進行状況と可能なエラーをすべてサイレントにするために引数 -fsSL を使用しています(サーバーの障害を除く)。そして、出力を gpg --dearmor コマンドにパイプします。これにより、キーがaptがダウンロードしたパッケージを検証するために使用できる形式に変換されます。

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo gpg --dearmor -o /usr/share/keyrings/elastic.gpg

次に、Elasticソースリストを sources.list.d ディレクトリに追加します。ここには apt が新しいソースを検索します。

  1. echo "deb [signed-by=/usr/share/keyrings/elastic.gpg] https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

ファイルの [signed-by=/usr/share/keyrings/elastic.gpg] 部分は、aptがダウンロードしたElasticsearchパッケージのリポジトリおよびファイル情報を検証するためにダウンロードしたキーを使用するように指示します。

次に、パッケージリストを更新して、APTが新しいElasticソースを読み込むようにします。

  1. sudo apt update

その後、次のコマンドでElasticsearchをインストールします。

  1. sudo apt install elasticsearch

インストールを確認するプロンプトが表示されたら、Yを押してください。サービスの再起動を求められた場合は、デフォルトを受け入れて続行するためにENTERを押します。Elasticsearchがインストールされ、設定の準備ができました。

ステップ2 — Elasticsearchの設定

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

お好みのテキストエディタを使用してElasticsearchの設定ファイルを編集します。ここではnanoを使用します。

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

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

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

Elasticsearchはポート9200でのすべてのトラフィックを受信します。外部からのアクセスを制限してElasticsearchインスタンスへのアクセスを制限し、データの読み取りやElasticsearchクラスターのシャットダウンを防止します[REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer)。アクセスを制限してセキュリティを向上させるためには、network.hostを指定する行を見つけ、コメントを解除し、その値をlocalhostに置き換えて次のようにします:

/etc/elasticsearch/elasticsearch.yml
. . .
# ---------------------------------- ネットワーク -----------------------------------
#
# 特定のIP(IPv4またはIPv6)にバインドアドレスを設定:
#
network.host: localhost
. . .

ここではlocalhostを指定していますので、ElasticsearchはすべてのインターフェースとバインドされたIPでリスニングします。特定のインターフェースでのみリスニングする場合は、localhostの代わりにそのIPを指定することができます。 elasticsearch.ymlを保存して閉じます。 nanoを使用している場合は、CTRL+Xを押し、次にYを押してからENTERを押します。

これらは、Elasticsearchを使用するための最小の設定です。これで、Elasticsearchを初めて起動できます。

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

  1. sudo systemctl start elasticsearch

次に、次のコマンドを実行して、サーバーが起動するたびにElasticsearchが起動するようにします:

  1. sudo systemctl enable elasticsearch

起動時にElasticsearchが有効になっているので、次のステップに進んでセキュリティについて説明します。

ステップ3 — Elasticsearchのセキュリティを確保する

デフォルトでは、ElasticsearchはHTTP APIにアクセスできる誰にでも制御されます。これは常にセキュリティリスクではありません。なぜなら、Elasticsearchはループバックインターフェイス(つまり、127.0.0.1)でのみリスンしており、ローカルからのみアクセスできるからです。したがって、公共のアクセスは不可能であり、すべてのサーバーユーザーが信頼できる限り、セキュリティは大きな懸念事項ではないかもしれません。

HTTP APIへのリモートアクセスを許可する必要がある場合は、UbuntuのデフォルトファイアウォールであるUFWを使用してネットワーク露出を制限できます。このファイアウォールは、前提条件のUbuntu 22.04の初期サーバーセットアップチュートリアルに従った場合、既に有効になっているはずです。

次に、信頼されたリモートホスト(通常は単一サーバーセットアップで使用しているサーバー)のデフォルトのElasticsearch HTTP APIポート(TCP 9200)へのアクセスを許可するために、ファイアウォールを構成します。アクセスを許可するには、次のコマンドを入力します:

  1. sudo ufw allow from 198.51.100.0 to any port 9200

それが完了したら、次のコマンドでUFWを有効にします:

  1. sudo ufw enable

最後に、次のコマンドでUFWのステータスを確認します:

  1. sudo ufw status

ルールを正しく指定した場合、次のような出力が表示されるはずです:

Output
Status: active To Action From -- ------ ---- 9200 ALLOW 198.51.100.0 22 ALLOW Anywhere 22 (v6) ALLOW Anywhere (v6)

これで、UFWが有効になり、Elasticsearchポート9200を保護するように設定されました。

追加の保護を投資したい場合、Elasticsearchは商用のShieldプラグインを購入できます。

この時点で、Elasticsearchはポート9200で実行されているはずです。cURLとGETリクエストを使用してテストできます。

  1. curl -X GET 'http://localhost:9200'

次の応答を受け取るはずです。

Output
{ "name" : "elastic-22", "cluster_name" : "elasticsearch", "cluster_uuid" : "DEKKt_95QL6HLaqS9OkPdQ", "version" : { "number" : "7.17.1", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "e5acb99f822233d62d6444ce45a4543dc1c8059a", "build_date" : "2022-02-23T22:20:54.153567231Z", "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" }

上記の応答と類似した応答を受け取った場合、Elasticsearchは正常に動作しています。そうでない場合は、インストール手順を正しく実行していることを確認し、Elasticsearchが完全に起動するのを待ってください。

より詳細なElasticsearchのチェックを実行するには、次のコマンドを実行してください。

  1. curl -X GET 'http://localhost:9200/_nodes?pretty'

上記のコマンドの出力から、ノード、クラスタ、アプリケーションパス、モジュールなどのすべての現在の設定を確認できます。

Elasticsearchを使用するには、まずデータを追加します。 ElasticsearchはRESTful APIを使用し、通常のCRUDコマンドに応答します: 作成(create)、読み取り(read)、更新(update)、削除(delete)。これを操作するには、再びcURLコマンドを使用します。

最初のエントリーを追加するには、次のようにします:

  1. curl -XPOST -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'

次の応答を受け取るはずです:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":2,"result":"updated","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}

cURLを使用して、ElasticsearchサーバーにHTTP POSTリクエストを送信しました。リクエストのURIは/tutorial/helloworld/1で、いくつかのパラメータが含まれています:

  • tutorialはElasticsearch内のデータのインデックスです。
  • helloworldはタイプです。
  • 1は、上記のインデックスとタイプの下にあるエントリーのIDです。

この最初のエントリーは、HTTP GETリクエストで取得できます。

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1'

これが結果の出力です:

Output
{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}

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

  1. curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d '
  2. {
  3. "message": "Hello, People!"
  4. }'

Elasticsearchは、次のように成功した変更を認識するはずです:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "result" : "updated", "_shards" : { "total" : 2, "successful" : 1, "failed" : 0 }, "_seq_no" : 1, "_primary_term" : 1 }

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

上記のリクエストで追加の引数prettyを使用していることに気付いたかもしれません。これにより、人が読みやすい形式が有効になり、各データフィールドを新しい行に記述できます。データを取得する際にも、結果をより読みやすくするために「整形」することができます。その方法は次のコマンドを入力するだけです:

  1. curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'

これで、応答が人間が解析するためにフォーマットされます:

Output
{ "_index" : "tutorial", "_type" : "helloworld", "_id" : "1", "_version" : 2, "_seq_no" : 1, "_primary_term" : 1, "found" : true, "_source" : { "message" : "Hello, People!" } } }

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

結論

あなたは今、Elasticsearchをインストールし、設定し、使用を開始しました。Elasticsearchの機能をさらに探るには、公式のElasticsearchドキュメントを参照してください。

Source:
https://www.digitalocean.com/community/tutorials/how-to-install-and-configure-elasticsearch-on-ubuntu-22-04