ElasticStackとElasticsearchの背後にあるアイデア

2020年4月10日)

ElasticsearchとELKスタックの簡単な紹介。なぜ何をどのように行うか。

ELK https ://aasconsultants.files.wordpress.com/2019/03/elk.png

履歴

Elastic NVは、2012年にアムステルダムで設立された会社です。 Shay Banon はElasticsearchの創設者です。彼の最初の反復はコンパスと呼ばれていました。 2つ目はElasticsearchでした(Apache Luceneが内部にあります)。彼はElasticsearchをオープンソース化し、#elasticsearch IRCチャネルを作成し、ユーザーが表示されるのを待ちました。レスポンスは印象的でした。ユーザーは自然にそして簡単にそれに取りかかりました。養子縁組は屋根を通り抜け、コミュニティが形成され始め、人々は気づきました—すなわち、スティーブンシューマン、ウリボネス、そしてサイモンウィルナウアー。一緒に、彼らは検索会社を設立しました。

ElasticStackとは何ですか?

ElasticStackはELKスタックとしても知られています。基本的に、3つのオープンソースプロジェクトが含まれています。

  1. エラスティック検索-検索および分析エンジン。
  2. Logstash ‑データ処理パイプライン。
  3. キバナ-データを視覚化するためのダッシュボード。

これら3つはすべて独自の意味を持ち、これら3つを組み合わせることでデータの分析と分析を取得します。

なぜ必要なのですか?

調査によると、Facebookは毎日4ペタバイトのデータを生成します。つまり 4,000万GB 。データ、今ではデータの世界です。したがって、データを分析するシステムが必要です。

待ってください!!それはどういう意味ですか?分析します。

理解すべき2つの用語があります。

  1. 分析-分析の部分では、過去のデータまたは既存のデータから結果を取得します。
  2. 分析-ユーザーの要件を予測する場合は、ビジネスを明確にするためにグラフベースの視覚化が必要であり、データパターンも理解する必要があります。

したがって、これら2つの最も重要なツールはどんなビジネスでも。これらは、データで実現できます。そして、これら2つの助けを借りて、ビジネスを成長させ、ビジネスの洞察を明確にすることができます。

では、どうですか? この大規模なデータを短時間で分析するのは簡単な作業ではないためです。

課題と解決策。

非常に大規模な企業では、さまざまな場所からさまざまな形式でデータを取得します。 JSONまたはXMLのいずれでもかまいません。したがって、データ全体を1つの場所と1つの形式で取得するには、1つのメカニズムが必要です。そのために、 Logstash を使用します。

データを取得したら、次の場所にデータを配置する必要があります。体系的な順序であるため、非常に簡単に評価できます。また、データを分析したいのですが、その場合は、まず、データを非常に迅速に処理します。そのために、 Elasticsearchがあります。 ElasticsearchはJavaで開発され、 Apache License 。

これを完了した後、データ分析を表示できる視覚化プラットフォームが必要です。 キバナが登場します。これがElasticスタック全体の仕組みです。より良いビジネスインサイト

プロセス https://hackernoon.com/hn-images/1*Tvmj3XsqH4hJLvXnfm6sZQ.png

Elasticsearch、Logstash、Kibanaのセットアップ

まず、3つのオープンソースソフトウェアをそれぞれのリンクからダウンロードしましょう[ elasticsearch ]、[ logstash ]、[ kibana ]。ファイルを解凍し、3つすべてをプロジェクトフォルダーに配置します。

始めましょう。

ステップ1 —ローカルシステムでKibanaとElasticsearchをセットアップします。 Kibanaのbinフォルダーで次のコマンドを使用してKibanaを実行します。

bin\kibana

同様に、Elasticsearchは次のように設定されます。

bin\elasticsearch

これで、2つの別々の端末で、両方のモジュールが実行されていることがわかります。サービスが実行されていることを確認するには、Kibanaおよび localhost:5621 を開きます。 div> localhost:9600 Elasticsearch用。

これで、ElasticStackのセットアップの準備が整いました。次に、 localhost:5621に移動し、コンソールで開発ツールを開きます。 Elasticsearchクエリを記述できる場所です。

Kibana Console

今回は、Elasticsearchについて詳しく説明します。次に、Elasticsearchがどのように機能するかを確認します。

Elastic検索

ElasticSearchの動作

操作の前に、データにインデックスを付ける必要があります。 Elasticsearchでインデックスが作成されると、ユーザーはデータに対して複雑なクエリを実行し、集計を使用してデータの複雑な要約を取得できます。 ElasticsearchはデータをJSONドキュメントとして保存し Datastrucreを転置インデックス。これは、非常に高速な全文検索を可能にするように設計されています。転置インデックスは、任意のドキュメントに表示されるすべての一意の単語を一覧表示し、各単語が含まれるすべてのドキュメントを識別します。

理解を深めるために、 Elasticsearchをいくつかのトピックに分割します。

  1. ドキュメントの管理
  2. マッピング
  3. 分析
  4. 検索方法
  5. 集計とフィルター

Elasticsearchの最も重要な側面は、そのアーキテクチャを理解することです。

クラスター

Elasticserachでは、データをノードに保存します。マシンにはn個のノードが存在する可能性があります。そして、各ノードはクラスターに関連しています。したがって、クラスターはノードのセットです

ドキュメント

データをJSONオブジェクトであるドキュメントとして保存します。では、これらのデータはクラスター内でどのように編成されているのでしょうか。答えはインデックスです。

リレーショナルデータベースの世界では、ドキュメントはテーブルの行と比較できます。

インデックス

Elasticsearchインデックスはドキュメントの論理パーティションです。およびは、リレーショナルデータベースの世界のデータベースと比較できます。

タイプ

各インデックスには、ドキュメントを論理グループに分割するために使用される1つ以上のマッピングタイプがあります。 それ できます リレーショナルデータベースの世界のテーブルと比較してください。

すべてのドキュメントはインデックスとして保存されます。あなたが言うことができるインデックスは、ドキュメントのコレクションです。たとえば、部門にはAインデックスがあり、従業員にはBインデックスがあります。つまり、論理的に関連しています。

シャーディング

  1. シャーディングは、インデックスを分割する方法にすぎません。小さな断片に分割します。
  2. 各断片はシャードと呼ばれます。
  3. シャーディングはインデックスレベルで行われます。

シャードはインデックス。スケーラビリティのため。シャーディングを使用すると、1つのインデックス内に数十億のドキュメントを保存できます。レプリカもありますが、今のところ、Elasticsearchを開始して理解するのに十分です。

では、さらにビルドと検索エンジンに移りましょう。

1。ドキュメントの管理

その前に、Elasticserachパッケージマネージャーを入手してください。

npm i elasticsearch

手順-1-次の方法でアプリケーションをElasticsearchにリンクします。

接続

ステップ2-たとえば次のようにインデックスを作成します。 gov。

インデックスの作成

ステップ-3-次に、ドキュメントをインデックス政府に追加します。インデックス政府には、構成要素と呼ばれるタイプがあります。 。

govというデータベースがあり、テーブルは constituenciesなので、関連付けることができます。

ドキュメントの追加

2。マッピング

マッピングは、ドキュメントとそのフィールドを定義するプロセスです。 RDBMSでテーブルスキーマを定義するのと同じです。

ステップ-4-次に、govタイプの構成要素にインデックスを付けるためのマッピングを定義します。

マッピング

3。分析

テキスト分析は、非構造化テキストを変換するプロセスですメールの本文または製品の説明を、検索用に最適化された構造化形式に変換します。

Elasticsearchは、インデックス作成または検索時にテキスト分析を実行します

text フィールド。マッピングで定義したこと。これは検索エンジンの重要な要素です。

デフォルトでは、Elasticsearchは

standard アナライザーを使用しますすべてのテキスト分析用。 standardアナライザーは、すぐに使用できるほとんどの自然言語とユースケースのサポートを提供しますstandardアナライザーをそのまま使用する場合は、それ以上の構成は必要ありません。独自のカスタムアナライザーを作成することもできます。

4。検索方法

Elasticsearchに適用できるクエリにはさまざまな種類があります。それによって、あなたはそれに応じて結果を得るでしょう。ここでは、クエリの基本的な例を示します。

すべてのドキュメントに一致する最も単純なクエリ。

検索クエリ

クエリ

複合クエリは、他の複合クエリまたはリーフクエリをラップして、結果とスコアを組み合わせたり、動作を変更したり、クエリからフィルタコンテキストに切り替えたりします。

mustshouldmust\_not、またはfilter句。 must句とshould句のスコアが組み合わされています。

全文クエリを使用すると、メールの本文など、分析されたテキストフィールドを検索できます。クエリ文字列は、インデックス作成中にフィールドに適用されたものと同じアナライザーを使用して処理されます。それはあなたの入力を分析します。指定された入力が正確ではないが、それでも結果が得られる場合。

Elasticsearchのような分散システムで完全なSQLスタイルの結合を実行すると、非常にコストがかかります。代わりに、Elasticsearchは、水平方向にスケーリングするように設計された2つの形式の結合を提供します。

1.

nested クエリ

2.

has\_child および

has\_parent クエリ

このグループには、他のグループに当てはまらないクエリが含まれています。性質が似ているドキュメント、ピン留めされたクエリも他にもたくさんあります。 ドキュメントを確認してください。

用語レベルのクエリは、精度に基づいてドキュメントを検索します構造化データのe値。構造化データの例には、日付範囲、IPアドレス、価格、製品IDなどがあります。

フルテキストクエリとは異なり、用語レベルのクエリでは検索用語を分析しません。 代わりに、用語レベルのクエリは、フィールドに格納されている用語と完全に一致します。入力の完全一致が検出され、最初にフルテキストの場合と同様に分析されてから検索されるため、用語レベルのクエリとフルテキストクエリの違いが大きくなります。

5。集計とフィルター

フィルターコンテキストでは、クエリ句が「このドキュメントはこのクエリ句と一致しますか?」という質問に答えます。答えは単純な「はい」または「いいえ」です-スコアは計算されません。フィルタコンテキストは、主に構造化データのフィルタリングに使用されます。たとえば、

  • これは timestamp 範囲2015に該当しますか2016年まで?
  • status フィールドは

パフォーマンスを高速化するために、頻繁に使用されるフィルターはElasticsearchによって自動的にキャッシュされます。

クエリ句がivid =に渡されると、フィルターコンテキストが有効になります。

boolfilterまたはmust\_notパラメータなどの “c1b2b712ef”> パラメータ/ div>クエリ、

constant\_scoreクエリのfilterパラメータ、または

filter集計。

集計を使用すると、RDBMSの場合と同様に、複雑なクエリを使用して平均、合計、および多くのデータインサイトを見つけることができます。

概要

  1. ElasticStackとは何ですか。
  2. ELKの仕組み。
  3. Elasticsearchとその仕組みについて。
  4. ELKに関するいくつかの基本的なクエリ。

次は!!

これは非常に大きなテーマです。しかし、私はELKとElasticsearchについて簡単に紹介しようとしました。次に、Elasticsearchを使用してアプリケーションのような独自の検索エンジンを構築します。ここではコーディング部分についても説明します。ファイル構造などを維持する方法。

結論

ElasticStackは学ぶべき非常に重要な技術です。これはどのプロジェクトにも適用でき、 ELKスタックはログ分析ツールとして最も一般的に使用されます。その人気は、複数のソースからのデータを集約するための信頼性が高く比較的スケーラブルな方法を提供するという事実にあります。まだ多くのことが残っていますが、その後、Elasticsearchから始めることができます。 ドキュメントを確認することをお勧めします。質問がある場合、またはコンテンツに問題がある場合は、コメントを残してください。

ありがとうございます:)