Elasticsearch は、無料のオープン ソース検索エンジンで、Apache Lucene に基づいており、フル テキスト機能と分散アーキテクチャのサポートを備えています。これは、リアルタイム データ分析の分野で長年にわたって確立されたソリューションです。
このチュートリアルでは、Linux Ubuntu 18.04 で Elasticsearch サーバーを作成および構成するために必要なすべての手順を確認できます。
まず、SSH 接続を介してサーバーに接続します。まだ行っていない場合は、ガイドに従って SSH で安全に接続することをお勧めします。ローカル サーバーの場合は、次の手順に進み、サーバーのターミナルを開きます。
Java のインストール
Elasticsearch のインストールに進む前に、Java Development Kit をインストールします。これを行うには、Ubuntu 18.04 に Java をインストールする方法に関するガイドに従ってください。 JDK がシステムに既にインストールされている場合は、この手順をスキップしてください。
Elasticsearch のインストール
インストール パッケージは、Elastic Web サイトから直接ダウンロードできます:
$ wget https://artifacts.elastic.co/downloads/elasticsearch/elasticsearch-7.3.2-amd64.deb
ダウンロードが完了したら、パッケージのインストールに進みます:
$ sudo dpkg -i elasticsearch-7.3.2-amd64.deb
次に、次の方法でサービスをインストールして開始します:
$ sudo systemctl enable elasticsearch.service
$ sudo systemctl start elasticsearch.service
ファイアウォールの構成
システムにファイアウォールがある場合は、適切なポートを有効にして、Elasticsearch サービスへのトラフィックを許可する必要がある場合があります。
UFW ファイアウォールを使用する場合は、次のコマンドを入力してデフォルトの Elasticsearch ポートのロックを解除します:
$ sudo ufw allow 9200
この時点で、ファイアウォールはポート 9200 での接続を許可します。
サービスのステータスを確認しています
次を実行して、サービスが実行されているかどうかを確認し、現在リッスンしている TCP ポートを確認します。
$ netstat -a -o -n | grep LISTEN
次に、リッスン ポート 9200 と 9300 が次のように表示されます:
tcp 0 0 127.0.0.53:53 0.0.0.0:* LISTEN off (0.00/0/0)
tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN off (0.00/0/0)
tcp6 0 0 127.0.0.1:9200 :::* LISTEN off (0.00/0/0)
tcp6 0 0 ::1:9200 :::* LISTEN off (0.00/0/0)
tcp6 0 0 127.0.0.1:9300 :::* LISTEN off (0.00/0/0)
tcp6 0 0 ::1:9300 :::* LISTEN off (0.00/0/0)
Elasticsearch の使用
サービスが実行されるようになったので、データを入力して後で検出されることを確認するテストを使用します。
N.B.リモート サーバーを使用する場合は、以下に示すコマンドの localhost をサーバーの IP アドレスに置き換えてください。
この例では、3 つの商用製品を入力してください:
$ curl -POST 'http://localhost:9200/products/1' -curl -H 'Content-Type: application/json' -d '
{
"name": "Coffe Machine 1",
"uuid": "00000010"
}'
上記の呼び出しを行うと、"Coffe Machine 1" に対応する属性 "name" と識別子 "uuid" を持つ新しいドキュメントがインデックス "products" に挿入されます:
{"_index":"index","_type":"products","_id":"cUqGY20Bm2mQybZCoeKU","_version":1,"result":"created","_shards":{"total":2,"successful":1,"failed":0},"_seq_no":1,"_primary_term":1}
Elasticsearch は、挿入された製品の ID とその他のレポート データを指定して、上記のように応答します。
次に、他の 2 つの製品を挿入します:
$ curl -POST 'http://localhost:9200/index/products' -curl -H 'Content-Type: application/json' -d '
{
"name": "White Desk",
"uuid": "WD000010"
}'
$ curl -POST 'http://localhost:9200/index/products' -curl -H 'Content-Type: application/json' -d '
{
"name": "Black Desk",
"uuid": "WD000011"
}'
完了したら、検索パラメータとして「机」を指定して最初の検索を実行することで続行できます:
$ curl -X GET "http://localhost:9200/index/_search?q=Desk*&pretty"
ご覧のとおり、上に挿入された 2 つの机を含む 2 つの結果が得られます:
{
...
"hits" : [
{
….
"_source" : {
"name" : "White Desk",
"uuid" : "WD000010"
}
},
{
...
"_score" : 1.0,
"_source" : {
"name" : "Black Desk",
"uuid" : "WD000011"
}
}
]
}
}
Elastisearch の構成
すべての Elasticsearch 構成ファイルは /etc/elasticsearch ディレクトリにあります。最も重要なファイルは elasticsearch.yml で、クラスター情報、TCP / IP 接続パラメーター、データを保存するフォルダーなど、システムの基本的な操作パラメーターを変更できます。
存在する構成ファイルはすべて YAML 形式を使用しているため、これらのファイルを編集するときはインデントに注意してください。
セキュリティの向上
サービスのセキュリティを強化するために最初に行うことの 1 つは、着信接続を制限し、ローカル接続のみを許可することです。このようにして、サーバー上のアプリケーションのみがサービスを使用できます。
リスニング カードを変更するには、ファイル /etc/elasticsearch/elasticsearch.yml を変更してコメントを外し、次の行を変更します:
…
network.host: 127.0.0.1
...
ファイルを保存し、サービスを再起動して変更を適用します:
$ sudo systemctl restart elasticsearch.service
数分待ってから、次のコマンドを起動して、サービスがローカル インターフェイスでのみリッスンしていることを確認します:
$ netstat -a -o -n | grep LISTEN
サービスを外部でも利用できるようにするために、Elasticsearch の存在を隠すようにリッスン ポートを変更することは常に可能です。
メイン構成ファイル /etc/elasticsearch/elasticsearch.yml を編集します:
…
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: 0.0.0.0
#
# Set a custom port for HTTP:
#
http.port: 2900
...
注意:2900 ドアの代わりに他のドアを挿入できます。
ファイルを保存したら、サービスを再起動します:
$ sudo systemctl restart elasticsearch.service
サービスのステータスを確認するには、変更を適用した後、必ず netstat を使用してください:
$ netstat -a -o -n | grep LISTEN