トップ OSS紹介 Elasticsearch

Elasticsearch

サポート対象

NRIのOpenStandiaが提供するElasticsearch最新情報

Elasticsearch情報

Elasticsearchとは

ElasticsearchはElastic社が開発するオープンソースの分散型全文検索エンジンです。Elasticsearchの元となるソフトウェアは「Compass」という名前で2004年にShay Banon氏によって開発されました。
その後、スケーラブルな検索ソリューションへの対応のため、クラスタリング機能やAPIなど多くの機能が改良、追加され2010年にElasticsearchとして初めてのバージョンがリリースされました。
現在は、Shay Banon氏らが設立したElastic社が引き続き開発をおこなっています。 ElasticsearchはJavaで記述された検索ライブラリ「Lucene」をベースに作られており、同様にLuceneをベースに作られたSolrとともにオープンソースの全文検索エンジンとして高い人気を誇っています(*1)。

Elasticsearchはスケーラビリティと高可用性に優れていることから、ソーシャルネットワークやGitHub、e-bay、Ciscoなど多くの大規模サービスにおいて検索システムの中核となるソフトウェアとして採用されています。

また、近年は全文検索の分野以外でもElastic社が提供するKibana(*2)やLogstash(*3)、Beats(*4)などのプロダクト(Elastic Stack)と連携して大量のログを分析する基盤、あるいはサービスやサーバの監視基盤など、幅広く利用されるようになってきています。こういった用途に対してElastic Stackの有償オプションでは、 Elastic Stackでのセキュリティ確保やアラート設定、レポート出力などを簡便且つ効率的に行うプラグイン群を提供しています(*5)。

2017年3月に行われた公式カンファレンスであるElastic{ON}では、クエリのSQL対応や、ElasticsearchとKibanaのクラスタ構築を容易に実現するクラウドサービスであるElastic Cloudの公式リリースが発表されました。このように機能追加やサービス展開も継続して行われている他、活用事例なども豊富でコミュニティが活性化していることから、Elasticsearchは今後さらなる発展が期待されます。

*1 DB-ENGINES :Trend of Search Engines Popularity
https://db-engines.com/en/ranking_trend/search+engine
*2 集積されたデータの視覚化を行なうツール
https://www.elastic.co/jp/products/kibana
*3 データの取り込み、保存場所への送信を行なうツール
https://www.elastic.co/jp/products/logstash
*4 サーバのメトリクスや、ログの内容を取得して送信するツール
https://www.elastic.co/jp/products/beats
*5 データモニタリングや、アラート通知、グラフ等の機能を拡張
https://www.elastic.co/jp/elastic-stack/features

主な機能

公式サイトによるとElasticsearchの主な機能は、以下となります。

カテゴリ

機能

概要

管理と運用

スケーラビリティと回復性

クラスタリングと高可用性
ノードの自動復旧
自動のデータリバランス
分散型スケーラビリティ
rack認識
クラスター横断レプリケーション
データセンター横断レプリケーション

セキュリティ

通信の暗号化
保存データの暗号化
ロールベースのアクセス制御(RBAC)
属性ベースのアクセス制御(ABAC)
フィールドとドキュメントレベルのセキュリティ
監査ログ
IPフィルター
セキュリティレルム
シングルサインオン(SSO)
サードパーティセキュリティの統合

クライアント

各種プログラミング言語に対応
Elasticsearch DSL
Elasticsearch SQL
Event Query Language(EQL)
JDBCクライアント
ODBCクライアント
Elasticsearch向けTableauコネクター
CLIツール

インテグレーション

Elasticsearch-Hadoop
Apache Hive
Apache Spark
ビジネスインテリジェンス(BI)
プラグインと統合機能

インジェストとエンリッチ

管理

スナップショットからのリカバリ
インデックスライフサイクル管理
データティア
スナップショットライフサイクル管理
スナップショットと復元
検索可能スナップショット
データのロールアップ
データストリーム
変換
アップグレードアシスタントAPI
APIキーの管理

アラート

高可用でスケーラブルな通知
Eメール、Webフック、IBM Resilient、Jira、Microsoft Teams、PagerDuty、ServiceNow、xMatters、Slack経由の通知

REST API

ドキュメントAPI
サーチAPI
アグリゲーションAPI
インジェストAPI
管理API

デプロイ

ダウンロードとインストール
Elastic Cloud
Elastic Cloud Enterprise
Elastic Cloud on Kubernetes
Helmチャート
Dockerコンテナー化

インジェスト

クライアントとAPI
インジェストノード
Beats
Logstash
コミュニティのシッパー

データエンリッチメント

Elastic Common Schema
各種プロセッサー
各種アナライザー
各種トークナイザー
フィルター
言語アナライザー
動的マッピング
一致エンリッチプロセッサー
地理空間一致エンリッチプロセッサー

データストレージ

フレキシビリティ

データタイプ
全文検索(転置インデックス)
ドキュメント格納(非構造化データ)
時系列/分析(列での格納)
地理空間(BKDツリー)

セキュリティ

フィールドとドキュメントレベルのAPIセキュリティ
保存データの暗号化

管理

クラスター化インデックス
データスナップショットと復元
ロールアップインデックス

検索と分析

全文検索

倒置インデックス
ランタイムフィールド
ランタイムフィールドのルックアップ
クラスター横断検索
関連性スコアリング
ベクトル検索(ANN)
Query DSL
非同期検索
強調表示
自動入力
入力予測
修正(スペルチェック)
パーコレーター
クエリプロファイラー/オプティマイザー
権限ベースの検索結果表示
動的にアップデート可能な同義語
結果のピン留め

分析

アグリゲーション
グラフ探索

機械学習

時系列データの将来予測
時系列データの異常検知
異常の通知
推論
言語の特定

主な特徴

スキーマレスであること

Elasticsearchはスキーマレスであると表現されますが、それはデータのインデキシング時に自動的に各フィールドのデータ型を判別してマッピング定義(*6)を自動生成することで、ユーザがスキーマ定義作業をすることなく利用を開始できるためです。ただし、自動マッピング定義機能は汎用的であるため、すべてのデータに対して適切なマッピング定義が生成されるわけではありません。そういった場合には、データをインデキシングする前に、特定のフィールドに対してデータ型や、アナライズ(どのようにデータを解析するか)の方法を定義することで、ユーザの任意の形でデータをインデキシングすることが可能です。

*6 マッピング定義とは、スキーマをElasticsearchのデータとしてどのように保存するか定義したものでRDBでのテーブル定義と同等の役割を果たします。

JSON over HTTPによるアクセスの一貫性

Elasticsearchでは、すべてがJSONで表現されています。これは、インデキシングされたデータ構造から、マッピング定義にいたります。ElasticsearchのREST APIに対して、マッピング定義を表示するHTTPリクエストを送ると、マッピング定義がJSONドキュメントとして返ってきます。
(例)マッピング定義を表示するためにRESTエンドポイントにリクエスト送る


curl -XGET 'http://localhost:9200/_mapping?pretty'

上記リクエストに対してのレスポンスは次のようなJSONで返されます。

{
"dstat_v2" : {
"mappings" : {
"_default_" : {
"dynamic_templates" : [ {
"templeate_double" : {
"mapping" : {
"type" : "double"
},
"match" : "dstat-*",
"match_mapping_type" : "string"
}
} ]
},
   :
   :

また、マッピング定義を変更する際にも、ボディ部にJSONで定義を記述したHTTPリクエストをElasticsearchのREST APIに対して送信します。


curl -XPUT http://localhost:9200/_template/dynamic_string -d '{
"template": "serverlog*",
"mappings": {
"_default_": {
"dynamic_templates": [
{
"strings" : {
"match_mapping_type" : "string",
"mapping": {
"type": "string",
"fields": {
"raw": {
"type": "string",
"index" : "not_analyzed",
"ignore_above":256
}
}
}
}
}
],
"properties" : {
"@timestamp" : { "type" : "date", "index" : "not_analyzed" }
}
}
}
],

プラグインが豊富且つ、開発可能であること

Elasticsearchはプラグインが豊富であるという特徴もあります。プラグインはElasticsearch認定であり、Elastic社の社員が開発に携わっているCore Pluginsと、それ以外のCommunity contributedの二つに大別することができます。前述のElastic Stackの有償オプションはCore Pluginsに分類されます。
プラグインの種別としては言語解析用途やElasticsearchそのものの管理用途など様々なものが存在します。日本語の形態素解析器としては、kuromoji(*7)というプラグインがElasticsearchのCore Pluginとして提供されています。
また、elasticsearch-head(*8)やelasticsearch-HQ(*9)など、コミュニティ製のプラグインも充実しています。こういったプラグインは形態素解析や、フィルタのカスタマイズなど、要件に併せて自作することも可能(*10)です。

(*7) Japanese (kuromoji) Analysis plugin
https://www.elastic.co/guide/en/elasticsearch/plugins/current/analysis-kuromoji.html
(*8) mobz/elasticsearch-head: A web front end for an elastic search cluster
https://github.com/mobz/elasticsearch-head
(*9) ElasticHQ/elasticsearch-HQ: Simplified Monitoring and Management for ElasticSearch clusters
https://github.com/ElasticHQ/elasticsearch-HQ
(*10) https://www.elastic.co/guide/en/elasticsearch/plugins/current/plugin-authors.html

動作環境

Elasticsearchのバージョン7系からはOpenJDKがバンドルされています。バンドルされているJVMが推奨されるJVMになります。バンドルされたOpenJDKではなく、固有のJDKを利用することも可能ですが、サポートされているLTSバージョンのJDKの利用が推奨されます。既知の問題があるJDKバージョンを使用しようとすると、起動自体が拒否されます。
各OSやブラウザでのElasticsearchの各バージョンの動作実績に関しては下記URLを参照ください。

Elasticsearchのライセンス

Elasticsearchは、Elastic License とServer Side Public License(SSPL)のデュアルライセンスです。7.11以降の配布パッケージはElastic License 2.0の下に提供されます。Elastic License 2.0は、製品とブランドを保護する3つのシンプルな制約の下に、無料の使用、修正、再配布を許諾します。
Elasticsearchのライセンスの詳細については下記をご参照ください

オープンソース年間サポートサービス

OpenStandiaではOSSを安心してご利用いただけるように、オープンソース年間サポートサービスをご提供しております。
サポートしているOSSは下記ページをご参照ください。

お気軽にお問い合わせください

関連OSS

  • Logstash

    Logstash

    ログスタッシュ。Elastic社により開発された、データ収集ツールです。

  • Kibana

    Kibana

    キバナ。Elasticsearchのデータ可視化や、”Elastic Stack”のプロダクト群(Elasticsearch、Logstash、Kibana、Beats)の制御のために利用されるフロントエンドツールです。

  • Fluentd
    サポート対象

    Fluentd

    フルエントディ。様々なデバイスやシステムからログ収集を行い、NoSQLデータベースやテキストなど様々フォーマットに変換・格納するログコネクタです。

オープンソースに関する様々な課題、OpenStandiaがまるごと解決します。
下記コンテンツも
あわせてご確認ください。