オープンソース

サーバー構築のデージーネットTOP > OSS情報 > OSS紹介 > 分散型検索/分析エンジン Elasticsearch

分散型検索/分析エンジン Elasticsearch

Elasticsearchは、Apache Luceneをベースに開発された全文検索エンジンです。Elastic社が中心となって開発され、OSSとして公開されています。Elasticsearchは、分散処理型の検索エンジンで、ビッグデータの解析などに使われています。Elasticsearchは大容量のデータの解析などを行う場合に、強みを発揮します。
このページでは、Elasticsearchの特徴、Elasticsearchと周辺ツール、Elasticsearchに対するデージーネットの取り組みを紹介します。

Elasticsearchの特徴

Elasticsearchの主な特徴は、次のとおりです。

  • ビックデータ解析に対応可能な検索性能がある
  • 部分一致検索や近似値の検索が可能である。
  • スケーラビリティに優れている
  • シンプルな設計である
  • 分散処理に対応し、高可用性を考慮し設計されている
  • RESTful APIを採用している
  • HadoopやSPARKと組み合わせて利用できる
  • データの登録や解析のための周辺ツールが充実している

このようにElasticsearchには様々な特徴があります。以下では、Elasticsearchの特徴について詳しく紹介します。

Elasticsearchの部分一致検索

Elasticsearchでは、部分一致検索が可能です。
リレーショナルデータベースは検索条件に対し、完全一致した値を返します。それに対して、Elasticsearchでは、予め文字列を要素解析して保存するため、検索条件に対し近似した値も返すことができ、高速で動作します。

Elasticsearchの高可用性とスケーラビリティ

Elasticsearchは、論理構成と物理構成で成り立っています。それぞれの構成は以下の通りです。

Elasticsearchの論理構成

  • インデックス

    物理的なファイルに保存される単位。
    ドキュメントの集合体。 Elasticsearch は、
    複数のインデックスをサポートしています。

  • タイプ

    インデックス内の区分。

  • ドキュメント  

    タイプの設定から構成されるデータ群。

Elasticsearchの物理構成

  • クラスタ

    ノードからなる集合体。
    Elasticsearch 分散処理システムの一番上位の単位です。

  • ノード

    Elasticsearchのプロセス

  • シャード

    インデックスを物理的に分割管理する単位

Elasticsearchの論理構成と物理構成の相関関係は、次の図のようになっています。

Elasticsearchでは、物理的なデータを複数のノードに分散し、シャードをレプリケーションすることで、データの冗長性を確保することができます。

Elasticsearchでは、このようにクラスタをノード単位で構成しているため、クラスタの構築が容易に行えます。クラスタ構成を組みたいネットワークを指定し、同一クラスタ名で起動するだけで容易にクラスタ構成を組むことができます。 また、大規模なデータの分散並列処理を行うHadoopなどとの連携が可能です。Elasticsearchは、従来よりも容易にクラスタの構成が組むことができ分散並列処理を行うことで大規模データの処理にも対応できます。

RESTful API

Elasticsearchの利用には、RESTful APIを使用します。RESTful APIは、次のようなRESTの原則にしたがって作られたAPIです。

  • サーバとクライアント間は、ステートレスなHTTP通信である
  • 統一メソッドを利用してリソース(情報)へアクセスする
  • リソースには、グローバルで一意なURIでアクセスする
  • リソースは、HTMLやXMLなどのハイパーメディアであり、他のリソースや状態へのリンクを含めることができる

最近では、多くのプログラミング言語にRESTを使うためのインタフェースが用意されています。これらのインタフェースを利用することで、プログラムの作成なども簡単に行うことができます。

次は、Elasticsearchに対してcurlコマンドを使って検索を行った例です。

$ curl -XGET 'http://127.0.0.1:9200/_search?pretty' -d ' ⏎
{"query": ⏎
  {"query_string": ⏎
    {
      "query": "ElasticsearchTestDesigNET" ⏎
    } ⏎
  } ⏎
}'⏎
{
  "took" : 66,
  "timed_out" : false,
  "_shards" : {
    "total" : 5,
    "successful" : 5,
    "failed" : 0
  },
  "hits" : {
    "total" : 1,
    "max_score" : 1.7289374,
    "hits" : [ {
      "_index" : "2016-03-28",
      "_type" : "events",
      "_id" : "AVO5rswLhxlP6y_BGGQW",
      "_score" : 1.7289374,
      "_source" : {
        "message" : "ElasticsearchTestDesigNET",
        "host" : "elastic01",
        "severity" : "5",
        "date" : "2016-03-28T05:05:53.800",
        "tag" : "ohno:"
      }
    } ]
  }
}

Elasticsearchと周辺ツール

Elasticsearchの開発元であるElastic社は、Elasticsearchとともにいくつかのツールを提供しています。そのどれもがElasticsearchと連携することができます。 その中でも代表的な例が、Kibanaとlogstashです。

ここでは、ElasticsearchとKibanaの連携、Elasticsearchとlogstashの連携、そして、ElasticsearchとKuromojiの連携について紹介します。

ElasticsearchとKibana

Kibanaは、Elasticsearchの開発元であるElastic社が開発したログデータの可視化ツールです。Webブラウザ上で操作でき、Elasticsearchの検索機能を活用し、時系列でのデータ抽出や属性に合わせたデータ抽出を行います。そして、Elasticsearchから抽出したデータをグラフィカルに表示することができます。表やグラフなどの形式で表示が行えるため、Elasticsearchから抽出したデータを分かりやすく表示できます。Kibanaは、非常に強力なログ解析ツールであり、リアルタイム分析も可能です。

Kibanaには、ダッシュボード機能が付属しています。ダッシュボードは、用途に合わせてカスタマイズ可能です。そのため、適切なカスタマイズを行っておくことで、必要な情報にすぐにアクセスすることができます。

Elasticsearchとlogstash

Logstashは、様々な形式のデータを収集・変換し、任意の場所に保管することができるOSSです。Logstashを利用すると、ログファイルに溜まっているデータを解析して、データベースへ格納するなど、用途にあった形にデータを変換・保存することができます。

Logstashを使って様々なデータを収集し、ElasticSearchに登録し、Kibanaを使って可視化することができます。

ElasticsearchとKuromoji

Kuromojiは、Elasticsearchで日本語の解析を行う場合に利用されるオープンソースの日本語形態素解析エンジンです。Javaで書かれています。KuromojiはApache Software Foundationに寄付されていて、ElasticsearchのベースであるApache Luceneへの日本語のサポートを提供しています。Kuromojiは、複合語の分割、品詞のタグ付け、見出し化、読みの抽出などの機能を提供します。


このように、Elasticsearchと他のソフトウェアを組み合わせることで、様々な用途でElasticsearchを使うことができます。

デージーネットのElasticsearchに対する取り組み

デージーネットでは、Elasticsearchを使ったログ管理システムや、Elasticsearchを使ったWebやファイルサーバの全文検索システムなどを提案しています。ここでは、Elasticsearch関連事例を紹介します。

Elasticsearchを利用した大容量ログ解析システム

デージーネットでは、大容量のログを管理するためのソフトウェアであるSylasを開発し、OSSとして公開しています。Sylasは、rsyslogと連携してElasticsearchにログを取り込みます。Elasticsearchと連携することでSylasの検索画面からログの検索を行うことができます。

Elasticsearchを利用したDNSログ解析システム

デージーネットでは、DNSサーバへの攻撃に対応するためのDNSログ解析システムを提案しています。DNSサーバから、dnstapなどのインタフェースを使ってクエリログを収集して、Elasticsearchに登録します。 収集されたログをKibanaを使って解析することで、攻撃の状況をリアルタイムに把握し、攻撃に対する防御を行うことができます。

ファイルサーバ全文検索システム

Elasticsearchは、ファイルサーバの全文検索システムとしても利用できます。ファイルサーバへの全文検索を実現すれば、膨大なファイルの中から、必要なファイルを短時間で探し出すことができます。 ファイルサーバの情報をElasticsearchで管理するためには、ファイル情報を取り出してElasticsearchに取り込むためのソフトウェアが必要です。デージーネットでは、そのようなソフトウェアとしてFessをご提案しています。Fessは、ファイルサーバを自動的にクロールし、ファイルの情報を取り出し、Elasticsearchに登録します。

また、Fessには標準で検索インタフェースも付属しています。ファイルの更新日、名称、形式などから検索結果を絞り込むことも可能です。

サイト内検索システム

ElasticsearchにWebサイトの情報を保存し、サイト内検索を実現することができます。 Webサイトの情報を管理するためには、Webサイトにアクセスし、情報を取り出してElasticsearchに取り込むためのソフトウェアが必要です。デージーネットでは、そのようなソフトウェアとしてFessをご提案しています。 Fessは、HTTPプロトコル経由でサイトを自動的にクロールし、情報を取り出してElasticsearchに格納します。Fessには標準で検索インタフェースも付属していますので、そのまま検索画面として利用することもできます。

また、サイトのデザインに合わせた専用の検索画面を作成することもできます。その場合には、ElasticsearchのRESTful APIを利用して、検索結果を表示するアプリケーションを作成します。 なお、デージーネットのホームページでも、サイト内検索の機能を実装するためにFessとElasticsearchを使っています。

さらに、ElasticsearchとKibanaを連携させることで、サイト内検索の利用状況について分析することもできます。

Elasticserchコンサルティング

Elasticsearchを使ってシステムを作っても、思ったより検索に時間がかることがあります。そのような場合には、利用するメモリ量に合わせて、Elasticsearchとをチューニングする必要があります。デージーネットの改善支援コンサルティングサービスでは、こうしたチューニングの作業を行っています。


OSS情報「Elasticsearch」

分散型検索/分析エンジン Elasticsearch
Elasticsearchは、Apache Luceneをベースに開発された全文検索エンジンです。Elastic社が中心となって開発され、OSSとして公開されています。Elasticsearchは、分散処理型の検索エンジンで、ビッグデータの解析などに使われています。
Elasticsearchのインストール
Elasticsearchは、Elastic社からパッケージなどで提供されています。そのため、簡単にインストールすることができます。ここでは、Elasticsearchのインストール方法を紹介します。

分散型検索/分析エンジン Elasticsearchの先頭へ