Elasticsearch は拡張性の高いオープンソースの全文検索および分析エンジンです。 。このソフトウェアは、大量のデータを迅速かつほぼリアルタイムで保存、検索、分析できるRESTful操作をサポートしています。 Elasticsearchは、Luceneライブラリに基づく強力な検索エンジンであるため、システム管理者や開発者の間で人気があり、人気があります。これは通常、複雑な検索機能と要件を備えたアプリケーションを強化する基盤となるエンジン/テクノロジーとして使用されます。
次のチュートリアルでは、 Debian11BullseyeにElasticSearchをインストールする方法を学習します 。
前提条件
- 推奨OS: Debian11ブルズアイ
- ユーザーアカウント: sudoまたはrootアクセス権を持つユーザーアカウント。
- 必要なパッケージ: カールとJava
Curlのインストール
カール このガイドの一部に必要です。このパッケージをインストールするには、次のコマンドを入力します。
sudo apt install curl -y
Javaのインストール
正常にインストールし、さらに重要なことに、 Elasticsearchを使用するには 、 Javaをインストールする必要があります 。プロセスは非常に簡単です。
次のコマンドを入力して、 OpenJDKをインストールします パッケージ:
sudo apt install default-jdk
インストールするパッケージの出力例:

インストールを続行するには、(Y)と入力します 次に、(ENTER)を押します キー。
次に、次のコマンドを使用して、インストールされているJavaバージョンとビルドを確認します。
java -version
以下の出力例:

Elasticsearchのインストール
Elasticsearchは標準のDebian11リポジトリでは利用できないため、ElasticsearchAPTリポジトリからインストールする必要があります。
リポジトリを追加する前に、GPGキーをインポートしてください 次のコマンドを使用します:
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
(OK)を使用した出力例 成功したことの確認:

GPGキーを追加したので、Elasticsearchリポジトリは信頼されます。次のターミナルコマンドを使用して、公式リポジトリのインストールに進みます。
sudo sh -c 'echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" > /etc/apt/sources.list.d/elastic-7.x.list'
チュートリアルの作成時点では、Elasticsearch 7.13.4が最新バージョンですが、時間の経過とともに変更され、追加したリポジトリは将来の7.x.xバージョンで機能します。
次に、リポジトリリストを更新し、次のようにElasticsearchをインストールします。
sudo apt update && sudo apt install elasticsearch
デフォルトでは、Elasticsearchサービスは起動時に無効になり、アクティブではありません。サービスを開始してシステム起動時に有効にするには、次のように入力します(systemctl) コマンド:
sudo systemctl enable elasticsearch.service --now
次に、Elasticsearchが正しく実行されていることを確認するために、 curlを使用します HTTPリクエストを送信するコマンド ポート9200 ローカルホスト 次のように:
curl -X GET "localhost:9200/"
Elasticsearchが正しく機能していることを確認するための出力例:

Elasticsearchがシステムに記録するシステムメッセージを表示するには、次のコマンドを入力します。
sudo journalctl -u elasticsearch
出力ログの例:

Elasticsearchの設定
Elasticsearchデータはデフォルトのディレクトリの場所(/ var / lib / elasticsearch)に保存されます 。構成ファイルを表示または編集するには、ディレクトリの場所(/ etc / elasticsearch)にあります。 、およびjava起動オプションは(/ etc / default / elasticsearch)で構成できます 構成ファイル。
Elasticsearchはlocalhostで実行されるため、デフォルト設定は、単一のオペレーティングサーバーではほとんど問題ありません。 それだけ。ただし、クラスターをセットアップする場合は、リモート接続を許可するように構成ファイルを変更する必要があります。
リモートアクセスの設定(オプション)
デフォルトでは、Elasticsearchはlocalhostのみをリッスンします。これを変更するには、次のように構成ファイルを開きます。
sudo nano /etc/elasticsearch/elasticsearch.yml
次に、下にスクロールして[ネットワーク]セクションを見つけ、コメント解除(#) 次の行を次のように内部プライベートIPアドレスまたは外部IPアドレスに置き換えます。

この例では、コメントを外しました(#) (network.host) 社内プライベートIPアドレスに変更しました。
セキュリティ上の理由から、アドレスを指定するのに理想的です。ただし、サーバーにアクセスする複数の内部または外部IPアドレスがある場合は、ネットワークインターフェイスを変更して、(0.0.0.0)を入力してすべてをリッスンします。 次のように:

次に、構成ファイルを保存します(CTRL + O) 次に、(CLTR + X)を終了します 。
変更を有効にするには、次のコマンドを使用してElasticsearchサービスを再起動する必要があります。
sudo systemctl restart elasticsearch
リモート接続を許可するようにUFWファイアウォールを構成する
リモート接続を許可する場合は、ファイアウォールがそれらのIPアドレスの接続を許可することを許可する必要があります。これは、次のコマンドで実行できます。
sudo ufw allow from <IP Address> to any port 9200
DebianとUFWファイアウォールの詳細については、DebianでUFWファイアウォールを構成する方法を参照してください。
Elasticsearchの使用方法
curlコマンドを使用してElasticsearchを使用するには 簡単なプロセスです。以下は、最も一般的に使用されるものの一部です。
インデックスの削除
インデックスの下にはサンプルという名前が付けられています 。
curl -X DELETE 'http://localhost:9200/samples'
すべてのインデックスを一覧表示
curl -X GET 'http://localhost:9200/_cat/indices?v'
すべてのドキュメントをインデックスに一覧表示
curl -X GET 'http://localhost:9200/sample/_search'
URLパラメータを使用したクエリ
ここでは、Luceneクエリ形式を使用してq =school:Harvardを記述します。
curl -X GET http://localhost:9200/samples/_search?q=school:Harvard
JSONを使用したクエリ(別名ElasticsearchクエリDSL)
URLのパラメータを使用してクエリを実行できます。ただし、次の例に示すように、JSONを使用することもできます。複雑なクエリがある場合、URLパラメータの1つの巨大な文字列よりも、JSONの方が読みやすくデバッグしやすいでしょう。
curl -XGET --header 'Content-Type: application/json' http://localhost:9200/samples/_search -d '{
"query" : {
"match" : { "school": "Harvard" }
}
}'
リストインデックスマッピング
すべてのElasticsearchフィールドはインデックスです。したがって、これにより、インデックス内のすべてのフィールドとそのタイプが一覧表示されます。
curl -X GET http://localhost:9200/samples
データの追加
curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/samples/_doc/1 -d '{
"school" : "Harvard"
}'
ドキュメントの更新
既存のドキュメントにフィールドを追加する方法は次のとおりです。まず、新しいものを作成します。次に、それを更新します。
curl -XPUT --header 'Content-Type: application/json' http://localhost:9200/samples/_doc/2 -d '
{
"school": "Clemson"
}'
curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/samples/_doc/2/_update -d '{
"doc" : {
"students": 50000}
}'
バックアップインデックス
curl -XPOST --header 'Content-Type: application/json' http://localhost:9200/_reindex -d '{
"source": {
"index": "samples"
},
"dest": {
"index": "samples_backup"
}
}'
JSON形式の一括読み込みデータ
export pwd="elastic:"
curl --user $pwd -H 'Content-Type: application/x-ndjson' -XPOST 'https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/0/_bulk?pretty' --data-binary @<file>
クラスターの状態を表示する
curl --user $pwd -H 'Content-Type: application/json' -XGET https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/_cluster/health?pretty
集約とバケット集約
Nginx Webサーバーの場合、これによりユーザー都市ごとのWebヒット数が生成されます:
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/_search?pretty -d '{
"aggs": {
"cityName": {
"terms": {
"field": "geoip.city_name.keyword",
"size": 50
}
}
}
}
'
これにより、NginxWebサーバーログ内の都市ごとの製品応答コード数に拡張されます
curl -XGET --user $pwd --header 'Content-Type: application/json' https://58571402f5464923883e7be42a037917.eu-central-1.aws.cloud.es.io:9243/logstash/_search?pretty -d '{
"aggs": {
"city": {
"terms": {
"field": "geoip.city_name.keyword"
},
"aggs": {
"responses": {
"terms": {
"field": "response"
}
}
}
},
"responses": {
"terms": {
"field": "response"
}
}
}
}'
基本認証でのElasticSearchの使用
ElasticSearchでセキュリティをオンにしている場合は、すべてのcurlコマンドに以下に示すようなユーザーとパスワードを指定する必要があります。
curl -X GET 'http://localhost:9200/_cat/indices?v' -u elastic:(password)
プリティプリント
JSONをきれいに印刷するには、検索に?pretty=trueを追加します。このように:
curl -X GET 'http://localhost:9200/(index)/_search'?pretty=true
特定のフィールドのみを照会して返すには
特定のフィールドのみを返すには、それらを_source配列に入れます:
GET filebeat-7.6.2-2020.05.05-000001/_search
{
"_source": ["suricata.eve.timestamp","source.geo.region_name","event.created"],
"query": {
"match" : { "source.geo.country_iso_code": "GR" }
}
}
日付でクエリするには
フィールドのタイプがdateの場合、次のように日付計算を使用できます。
GET filebeat-7.6.2-2020.05.05-000001/_search
{
"query": {
"range" : {
"event.created": {
"gte" : "now-7d/d"
}
}
}
}
Elasticsearchのアンインストール
Elasticsearchが不要になった場合は、次のコマンドでソフトウェアを削除できます。
sudo apt remove elasticsearch
次のようにaptリポジトリを削除します:
sudo rm /etc/apt/sources.list.d/elastic-7.x.list
次に、リポジトリリストを更新して、変更を反映します。
sudo apt update