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

序章

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

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

前提条件

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

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

  • OpenJDK11がインストールされています

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

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

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

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

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

  1. curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -

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

  1. echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-7.x.list

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

  1. sudo apt update

次に、次のコマンドを使用してElasticsearchをインストールします。

  1. sudo apt install elasticsearch

これでElasticsearchがインストールされ、構成する準備が整いました。

ステップ2—Elasticsearchを設定する

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

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

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

注: Elasticsearchの構成ファイルはYAML形式です。つまり、インデント形式を維持する必要があります。 このファイルを編集するときは、余分なスペースを追加しないでください。

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

ElasticsearchがすべてのインターフェースとバインドされたIPでリッスンするようにlocalhostを指定しました。 特定のインターフェースでのみリッスンする場合は、localhostの代わりにIPを指定できます。 elasticsearch.ymlを保存して閉じます。 nanoを使用している場合は、CTRL+XYENTERの順に押すと使用できます。

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

systemctlでElasticsearchサービスを開始します。 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を使用してネットワークの露出を制限できます。 前提条件のUbuntu20.04を使用したサーバーの初期設定チュートリアルの手順に従った場合、このファイアウォールはすでに有効になっているはずです。

次に、信頼できるリモートホスト(通常は198.51.100.0などの単一サーバー設定で使用しているサーバー)のデフォルトの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は市販のシールドプラグインを購入できます。

ステップ4—Elasticsearchのテスト

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

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

次の応答が返されます。

Output
{ "name" : "elasticsearch-ubuntu20-04", "cluster_name" : "elasticsearch", "cluster_uuid" : "qqhFHPigQ9e2lk-a7AvLNQ", "version" : { "number" : "7.6.2", "build_flavor" : "default", "build_type" : "deb", "build_hash" : "ef48eb35cf30adf4db14086e8aabd07ef6fb113f", "build_date" : "2020-03-26T06:34:37.794943Z", "build_snapshot" : false, "lucene_version" : "8.4.0", "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 -XGET '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' '{ "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' '{ "message": "Hello World!" }'

これは、結果の出力になります。

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'
  2. '
  3. {
  4. "message": "Hello, People!"
  5. }'

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を「Hello、People!」に変更しました。 これにより、バージョン番号は自動的に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ドキュメントを参照してください。