この記事の以前のバージョンはToliによって書かれました。

序章

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

この記事では、Elasticsearchのインストール、ユースケースに合わせた構成、インストールの保護、Elasticsearchサーバーの操作の開始について説明します。

前提条件

このチュートリアルを実行する前に、次のものが必要です。

  • ルート以外のsudoユーザーでセットアップされた2GBのRAMと2つのCPUを備えたUbuntu22.04サーバー。 これを実現するには、 Ubuntu22.04を使用したサーバーの初期設定に従います。

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

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

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

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

まず、URLを使用してデータを転送するためのコマンドラインツールであるcURLを使用して、Elasticsearchの公開GPGキーをAPTにインポートします。 引数-fsSLを使用して、すべての進行状況と発生する可能性のあるエラー(サーバー障害を除く)をサイレントにし、リダイレクトされた場合にcURLが新しい場所でリクエストを行えるようにしていることに注意してください。 出力をにパイプします 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

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

次に、パッケージリストを更新して、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形式です。つまり、インデント形式を維持する必要があります。 このファイルを編集するときは、余分なスペースを追加しないでください。

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

Elasticsearchは、ポート上のあらゆる場所からのトラフィックをリッスンします 9200. Elasticsearchインスタンスへの外部アクセスを制限して、部外者がデータを読み取ったり、[REST API]( https://en.wikipedia.org/wiki/Representational_state_transfer )を介して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を初めて起動できます。

でElasticsearchサービスを開始します systemctl. Elasticsearchを起動するまでしばらくお待ちください。 そうしないと、接続できないというエラーが発生する可能性があります。

  1. sudo systemctl start elasticsearch

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

  1. sudo systemctl enable elasticsearch

起動時にElasticsearchを有効にして、セキュリティについて説明する次のステップに進みましょう。

ステップ3—Elasticsearchの保護

デフォルトでは、ElasticsearchはHTTPAPIにアクセスできるすべての人が制御できます。 Elasticsearchはループバックインターフェイスでのみリッスンするため、これは必ずしもセキュリティリスクではありません(つまり、 127.0.0.1)、ローカルでのみアクセスできます。 したがって、パブリックアクセスは不可能であり、すべてのサーバーユーザーが信頼されている限り、セキュリティは大きな問題にはなりません。

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

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

  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は商用のシールドプラグインを購入できます。

ステップ4—Elasticsearchのテスト

これで、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'

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

ステップ5—Elasticsearchを使用する

Elasticsearchの使用を開始するには、最初にいくつかのデータを追加しましょう。 ElasticsearchはRESTfulAPIを使用します。これは、通常のCRUDコマンド c reate、 r ead、 u pdate、および 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サーバーにHTTPPOSTリクエストを送信しました。 リクエストのURIは /tutorial/helloworld/1 いくつかのパラメータで:

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

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

  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!" }}

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

  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ドキュメントを参照してください。