A previous version of this article was written by Toli.
紹介
Elasticsearchは、リアルタイムでデータを分散検索および分析するプラットフォームです。その使いやすさ、強力な機能、拡張性から人気があります。
この記事では、Elasticsearchのインストール方法、ユースケースに合わせた設定、インストールのセキュリティ確保、そしてElasticsearchサーバーの操作を始める方法について説明します。
前提条件
このチュートリアルを進める前に、以下が必要です:
- 2GBのRAMと2つのCPUが設定されたUbuntu 22.04サーバーと、非ルートsudoユーザーが必要です。Ubuntu 22.04の初期サーバーセットアップ
このチュートリアルでは、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がダウンロードしたパッケージを検証するために使用できる形式に変換されます。
次に、Elasticソースリストを sources.list.d
ディレクトリに追加します。ここには apt
が新しいソースを検索します。
ファイルの [signed-by=/usr/share/keyrings/elastic.gpg]
部分は、aptがダウンロードしたElasticsearchパッケージのリポジトリおよびファイル情報を検証するためにダウンロードしたキーを使用するように指示します。
次に、パッケージリストを更新して、APTが新しいElasticソースを読み込むようにします。
その後、次のコマンドでElasticsearchをインストールします。
インストールを確認するプロンプトが表示されたら、Y
を押してください。サービスの再起動を求められた場合は、デフォルトを受け入れて続行するためにENTER
を押します。Elasticsearchがインストールされ、設定の準備ができました。
ステップ2 — Elasticsearchの設定
Elasticsearchを設定するには、そのメイン設定ファイルであるelasticsearch.yml
を編集します。このファイルには、ほとんどの設定オプションが保存されています。このファイルは/etc/elasticsearch
ディレクトリにあります。
お好みのテキストエディタを使用してElasticsearchの設定ファイルを編集します。ここではnano
を使用します。
注意: Elasticsearchの設定ファイルはYAML形式です。したがって、このファイルを編集する際にはインデント形式を維持する必要があります。余分なスペースを追加しないようにしてください。
elasticsearch.yml
ファイルには、クラスター、ノード、パス、メモリ、ネットワーク、ディスカバリ、およびゲートウェイの設定オプションが提供されています。これらのオプションのほとんどはファイルで事前に構成されていますが、必要に応じて変更できます。単一サーバー構成のデモンストレーションの目的で、ネットワークホストの設定のみを調整します。
Elasticsearchはポート9200
でのすべてのトラフィックを受信します。外部からのアクセスを制限してElasticsearchインスタンスへのアクセスを制限し、データの読み取りやElasticsearchクラスターのシャットダウンを防止します[REST API] (https://en.wikipedia.org/wiki/Representational_state_transfer)。アクセスを制限してセキュリティを向上させるためには、network.host
を指定する行を見つけ、コメントを解除し、その値をlocalhost
に置き換えて次のようにします:
. . .
# ---------------------------------- ネットワーク -----------------------------------
#
# 特定のIP(IPv4またはIPv6)にバインドアドレスを設定:
#
network.host: localhost
. . .
ここではlocalhost
を指定していますので、ElasticsearchはすべてのインターフェースとバインドされたIPでリスニングします。特定のインターフェースでのみリスニングする場合は、localhost
の代わりにそのIPを指定することができます。 elasticsearch.yml
を保存して閉じます。 nano
を使用している場合は、CTRL+X
を押し、次にY
を押してからENTER
を押します。
これらは、Elasticsearchを使用するための最小の設定です。これで、Elasticsearchを初めて起動できます。
Elasticsearchサービスをsystemctl
で起動します。 Elasticsearchが起動するまでしばらくお待ちください。 それ以外の場合は、接続できないというエラーが発生する場合があります。
次に、次のコマンドを実行して、サーバーが起動するたびにElasticsearchが起動するようにします:
起動時にElasticsearchが有効になっているので、次のステップに進んでセキュリティについて説明します。
ステップ3 — Elasticsearchのセキュリティを確保する
デフォルトでは、ElasticsearchはHTTP APIにアクセスできる誰にでも制御されます。これは常にセキュリティリスクではありません。なぜなら、Elasticsearchはループバックインターフェイス(つまり、127.0.0.1
)でのみリスンしており、ローカルからのみアクセスできるからです。したがって、公共のアクセスは不可能であり、すべてのサーバーユーザーが信頼できる限り、セキュリティは大きな懸念事項ではないかもしれません。
HTTP APIへのリモートアクセスを許可する必要がある場合は、UbuntuのデフォルトファイアウォールであるUFWを使用してネットワーク露出を制限できます。このファイアウォールは、前提条件のUbuntu 22.04の初期サーバーセットアップチュートリアルに従った場合、既に有効になっているはずです。
次に、信頼されたリモートホスト(通常は単一サーバーセットアップで使用しているサーバー)のデフォルトのElasticsearch HTTP APIポート(TCP 9200)へのアクセスを許可するために、ファイアウォールを構成します。アクセスを許可するには、次のコマンドを入力します:
それが完了したら、次のコマンドでUFWを有効にします:
最後に、次のコマンドでUFWのステータスを確認します:
ルールを正しく指定した場合、次のような出力が表示されるはずです:
OutputStatus: 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リクエストを使用してテストできます。
次の応答を受け取るはずです。
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のチェックを実行するには、次のコマンドを実行してください。
上記のコマンドの出力から、ノード、クラスタ、アプリケーションパス、モジュールなどのすべての現在の設定を確認できます。
Elasticsearchを使用するには、まずデータを追加します。 ElasticsearchはRESTful APIを使用し、通常のCRUDコマンドに応答します: 作成(create)、読み取り(read)、更新(update)、削除(delete)。これを操作するには、再びcURLコマンドを使用します。
最初のエントリーを追加するには、次のようにします:
次の応答を受け取るはずです:
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リクエストで取得できます。
これが結果の出力です:
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
既存のエントリーを変更するには、HTTP PUTリクエストを使用できます。
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
を使用していることに気付いたかもしれません。これにより、人が読みやすい形式が有効になり、各データフィールドを新しい行に記述できます。データを取得する際にも、結果をより読みやすくするために「整形」することができます。その方法は次のコマンドを入力するだけです:
これで、応答が人間が解析するためにフォーマットされます:
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ドキュメントを参照してください。