この記事の以前のバージョンはによって書かれました トリ.
序章
Elasticsearch は、データをリアルタイムで分散検索および分析するためのプラットフォームです。 使いやすさ、強力な機能、拡張性により、人気のある選択肢です。
この記事では、Elasticsearchのインストール、ユースケースに合わせた構成、インストールの保護、Elasticsearchサーバーの操作の開始について説明します。
前提条件
このチュートリアルを実行する前に、次のものが必要です。
-
ルート以外のsudoユーザーでセットアップされた4GBのRAMと2つのCPUを備えたUbuntu18.04サーバー。 これを実現するには、 Ubuntu18.04を使用したサーバーの初期設定に従います。
-
OpenJDK11がインストールされています。 手順については、ガイド Ubuntu18.04にAptを使用してJavaをインストールする方法を参照してください。
このチュートリアルでは、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に追加されます。
- curl -fsSL https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
次に、Elasticソースリストをsources.list.d
ディレクトリに追加します。ここで、APTは新しいソースを探します。
- 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ソースを読み取るようにします。
- sudo apt update
次に、次のコマンドを使用してElasticsearchをインストールします。
- sudo apt install elasticsearch
これでElasticsearchがインストールされ、構成する準備が整いました。
ステップ2—Elasticsearchを設定する
Elasticsearchを構成するには、ほとんどの構成オプションが保存されているメイン構成ファイルelasticsearch.yml
を編集します。 このファイルは/etc/elasticsearch
ディレクトリにあります。
お好みのテキストエディタを使用して、Elasticsearchの設定ファイルを編集します。 ここでは、nano
を使用します。
- 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
に置き換えて次のようにします。
. . .
# ---------------------------------- Network -----------------------------------
#
# Set the bind address to a specific IP (IPv4 or IPv6):
#
network.host: localhost
. . .
ElasticsearchがすべてのインターフェースとバインドされたIPでリッスンするようにlocalhost
を指定しました。 特定のインターフェースでのみリッスンする場合は、localhost
の代わりにIPを指定できます。 elasticsearch.yml
を保存して閉じます。 nano
を使用している場合は、CTRL+X
、Y
、ENTER
の順に押すと使用できます。
これらは、Elasticsearchを使用するために開始できる最小設定です。 これで、Elasticsearchを初めて起動できます。
systemctl
でElasticsearchサービスを開始します。 Elasticsearchを起動するまでしばらくお待ちください。 そうしないと、接続できないというエラーが発生する可能性があります。
- sudo systemctl start elasticsearch
次に、次のコマンドを実行して、サーバーが起動するたびにElasticsearchを起動できるようにします。
- sudo systemctl enable elasticsearch
起動時にElasticsearchを有効にして、セキュリティについて説明する次のステップに進みましょう。
ステップ3—Elasticsearchの保護
デフォルトでは、ElasticsearchはHTTPAPIにアクセスできるすべての人が制御できます。 Elasticsearchはローカルでのみアクセスできるループバックインターフェイス(つまり、127.0.0.1
)でのみリッスンするため、これは必ずしもセキュリティリスクではありません。 したがって、パブリックアクセスは不可能であり、すべてのサーバーユーザーが信頼されている限り、セキュリティは大きな問題にはなりません。
HTTP APIへのリモートアクセスを許可する必要がある場合は、UbuntuのデフォルトファイアウォールであるUFWを使用してネットワークの露出を制限できます。 前提条件のUbuntu18.04 チュートリアルによるサーバーの初期設定の手順に従った場合、このファイアウォールはすでに有効になっているはずです。
次に、信頼できるリモートホスト(通常は198.51.100.0
などの単一サーバー設定で使用しているサーバー)のデフォルトのElasticsearch HTTP APIポート(TCP 9200)へのアクセスを許可するようにファイアウォールを構成します。 アクセスを許可するには、次のコマンドを入力します。
- sudo ufw allow from 198.51.100.0 to any port 9200
それが完了したら、次のコマンドでUFWを有効にできます。
- sudo ufw enable
最後に、次のコマンドを使用してUFWのステータスを確認します。
- sudo ufw status
ルールを正しく指定した場合、出力は次のようになります。
OutputStatus: 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リクエストでテストできます。
- curl -X GET 'http://localhost:9200'
次の応答が表示されます。
Output{
"node.name" : "My First Node",
"cluster.name" : "mycluster1",
"version" : {
"number" : "2.3.1",
"build_hash" : "bd980929010aef404e7cb0843e61d0665269fc39",
"build_timestamp" : "2020-04-04T12:25:05Z",
"build_snapshot" : false,
"lucene_version" : "5.5.0"
},
"tagline" : "You Know, for Search"
}
上記のような応答が表示された場合、Elasticsearchは正常に機能しています。 そうでない場合は、インストール手順に正しく従っていて、Elasticsearchが完全に起動するまでしばらく待っていることを確認してください。
Elasticsearchのより徹底的なチェックを実行するには、次のコマンドを実行します。
- curl -XGET 'http://localhost:9200/_nodes?pretty'
上記のコマンドの出力では、ノード、クラスター、アプリケーションパス、モジュールなどの現在のすべての設定を確認できます。
ステップ5—Elasticsearchを使用する
Elasticsearchの使用を開始するには、最初にいくつかのデータを追加しましょう。 ElasticsearchはRESTfulAPIを使用します。これは、通常のCRUDコマンド c reate、 r ead、 u pdate、および deleteに応答します。 。 これを操作するには、cURLコマンドを再度使用します。
次のように最初のエントリを追加できます。
- 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リクエストを使用して取得できます。
- curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1' -d '{ "message": "Hello World!" }'
これは、結果の出力になります。
Output{"_index":"tutorial","_type":"helloworld","_id":"1","_version":1,"found":true,"_source":{ "message": "Hello, World!" }}
既存のエントリを変更するには、HTTPPUTリクエストを使用できます。
- curl -X PUT -H "Content-Type: application/json" 'localhost:9200/tutorial/helloworld/1?pretty' -d
- '
- {
- "message": "Hello, People!"
}'
Elasticsearchは、次のような変更が成功したことを確認する必要があります。
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"_shards" : {
"total" : 2,
"successful" : 1,
"failed" : 0
},
"created" : false
}
上記の例では、最初のエントリのmessage
を「Hello、People!」に変更しました。 これにより、バージョン番号は自動的に2
に増加しました。
上記のリクエストで余分な引数pretty
に気づいたかもしれません。 人間が読める形式を有効にして、各データフィールドを新しい行に書き込むことができるようにします。 次のコマンドを入力して、データを取得するときに結果を「プリティファイ」して、より読みやすい出力を取得することもできます。
- curl -X GET -H "Content-Type: application/json" 'http://localhost:9200/tutorial/helloworld/1?pretty'
これで、応答は人間が解析できるようにフォーマットされます。
Output{
"_index" : "tutorial",
"_type" : "helloworld",
"_id" : "1",
"_version" : 2,
"found" : true,
"_source" : {
"message" : "Hello, People!"
}
}
Elasticsearchにデータを追加してクエリしました。 その他の操作については、APIドキュメントを確認してください。
結論
これで、Elasticsearchがインストール、構成され、使用が開始されました。 Elasticsearchの最初のリリース以降、Elasticは、Elastic Stackの一部としてElasticsearchと組み合わせて使用する、Logstash、Kabana、Beatsの3つの追加ツールを開発しました。 これらのツールを一緒に使用すると、集中ログと呼ばれる方法で、任意のソースから任意の形式で生成されたログを検索、分析、および視覚化できます。 Ubuntu18.04でElasticStackの使用を開始するには、ガイド Ubuntu 18.04 にElasticsearch、Logstash、およびKibana(Elastic Stack)をインストールする方法を参照してください。