AWSがElasticsearchの新ディストリビューションをApacheライセンスで公開
大栗です。
先程AWSがElasticsearchの新しいディストリビューションをApache License 2.0で公開しました。Elasticsearchは元々Apache License 2.0で公開されていますが、プラグインも全てApache License 2.0となっています。
- Open Distro for Elasticsearch
- New – Open Distro for Elasticsearch
- Keeping Open Source Open – Open Distro for Elasticsearch
Open Distro for Elasticsearch
AWSが公開したOpen Distro for ElasticsearchはElasticsearchのディストリビューションとして以下の特徴があります。
- 100%オープンソース
- エンタープライズグレード
- コミュニティ主導である(異論はあるかもしれません)
重要な点としてOpen Distro for ElasticsearchはElasticsearchのフォークではないということです。アドオン拡張を開発してアップストリームにコントリビュートしていく方針とのことです。
Elasticsearchのオープンソースディストリビューションから以下の機能が追加されています。いくつかの機能はAmazon Elasticsearch Serviceですでに利用可能ですが、他のものは将来のアップデートで利用可能になる見込みです。
追加プラグイン
セキュリティ
セキュリティでは以下の機能を提供します。
- ノードtoノード暗号化
- ベーシック認証
- ロールベースのアクセス制御
- 権限セット
- インデックス、ドキュメント、およびフィールドレベルのセキュリティ
- 読み書き操作の監査ログ
- Active Directory、LDAP、Kerberos、およびSAMLのサポート
- クロスクラスター検索
- Kibanaのマルチテナンシー
アラート
特定の状態(1時間に503を5回以上記録した場合や過去20分以内に新しいドキュメントは登録されない場合など)になった場合にSlack、Amazon Chime、Webhookでの通知が可能です。
SQL
SQL文でデータにアクセス行えます。elasticsearch-sqlの拡張版で豊富なステートメントをサポートしています。またJDBCドライバも用意されています。
パフォーマンス・アナライザ
REST APIでクラスタのパフォーマンスを見ることができます。プログラム的にアクセスしたり、PerfTopなどを使用して可視化できます。
その他
githubのリポジトリには、中身が全然入っていませんがopendistro-for-elasticsearch/index-managementやopendistro-for-elasticsearch/job-schedulerがあります。現時点ではソースが公開されていないのでどんな機能になるか不明ですが、インデックスの管理が楽になったり、ジョブスケジュール機能ができるのではないでしょうか。
FAQ
公式サイトのFAQからいくつか質問をご紹介します。
Elasticsearchのフォークですか?
違います。Open Distro for Elasticsearchはフォークではありません。実際Apache 2.0ライセンスのElasticsearchコードに貢献し続けるつもりです。我々の目的はオープンソースのElasticsearchが確実に繁栄することです。
アップストリームのElasticsearchのリリースとペースを合わせるか?
Open Distro for Elasticsearchの最初のリリース(v0.7)はApache 2.0 ライセンスであるElasticsearchとKibana 6.5のオープンソースバージョンの上に構築しています。Open Distro for Elasticsearchを定期的にアップデートしてオープンソースの最新版に保ちます。
Open Distro for Elasticsearchのライセンスは?
全てのプラグインを含めてOpen Distro for ElasticsearchはApache License, Version 2.0の元で認可されています。
Open Distro for Elasticsearchのコンポーネントを独立したプラグインとしてインストールできますか?
はい。Open Distro for Elasticsearchは複数のプロジェクトで構成されるElasticsearch互換のスタックです。これらのプロジェクトは対応するオープンソースのElasticsearchにOpen Distro for Elasticsearchと独立して構築とインストールができます。
Open Distro for ElasticsearchはElasticsearchと完全な互換性がありますか?
Open Distro for ElasticsearchはApache 2.0ライセンスのElasticsearchとKibana 6.5のディストリビューションで構成されています。Elasticsearch 6.5と互換性のある全てのクライアントとツールは変更無しで動くはずです。
やってみた
環境はmacOS Mojave バージョン10.14.3でDocker Desktop for Mac Version 2.0.0.3を使用しています。
Open Distro for Elasticsearchのイメージをpullします。
$ docker pull amazon/opendistro-for-elasticsearch:0.7.0
次にOpen Distro for ElasticsearchのKibanaイメージをpullします。
docker pull amazon/opendistro-for-elasticsearch-kibana:0.7.0
一度Open Distro for Elasticsearchを起動してみます。
$ docker run -p 9200:9200 -p 9600:9600 -e "discovery.type=single-node" amazon/opendistro-for-elasticsearch:0.7.0
プロセスを確認します。
$ docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES a1b2c3d4e5f6 amazon/opendistro-for-elasticsearch:0.7.0 "/usr/local/bin/dock…" 24 seconds ago Up 22 seconds 0.0.0.0:9200->9200/tcp, 0.0.0.0:9600->9600/tcp, 9300/tcp wizardly_feynman
クラスタの状態を確認してみます。
$ curl -XGET https://localhost:9200 -u admin:admin --insecure { "name" : "cnJYZEK", "cluster_name" : "docker-cluster", "cluster_uuid" : "a1b2c3d-a1b2c3da1b2c3d", "version" : { "number" : "6.5.4", "build_flavor" : "oss", "build_type" : "tar", "build_hash" : "a1b2c3d", "build_date" : "2018-12-17T21:17:40.758843Z", "build_snapshot" : false, "lucene_version" : "7.5.0", "minimum_wire_compatibility_version" : "5.6.0", "minimum_index_compatibility_version" : "5.0.0" }, "tagline" : "You Know, for Search" }
クラスタのノードを確認してみます。
$ curl -XGET https://localhost:9200/_cat/nodes?v -u admin:admin --insecure ip heap.percent ram.percent cpu load_1m load_5m load_15m node.role master name 172.17.0.2 14 96 7 0.76 0.45 0.25 mdi * cnJYZEK
入っているコンポーネントを確認してみます。
$ curl -XGET https://localhost:9200/_cat/plugins?v -u admin:admin --insecure name component version cnJYZEK opendistro_alerting 0.7.0.0 cnJYZEK opendistro_performance_analyzer 0.7.0.0 cnJYZEK opendistro_security 0.7.0.0 cnJYZEK opendistro_sql 0.7.0.0
一度コンテナを停止します。
$ docker stop a1b2c3d4e5f6
以下の様なDocker Composeファイルを作成します。
version: '3' services: odfe-node1: image: amazon/opendistro-for-elasticsearch:0.7.0 container_name: odfe-node1 environment: - cluster.name=odfe-cluster - bootstrap.memory_lock=true # along with the memlock settings below, disables swapping - "ES_JAVA_OPTS=-Xms512m -Xmx512m" # minimum and maximum Java heap size, recommend setting both to 50% of system RAM ulimits: memlock: soft: -1 hard: -1 volumes: - odfe-data1:/usr/share/elasticsearch/data ports: - 9200:9200 - 9600:9600 # required for Performance Analyzer networks: - odfe-net kibana: image: amazon/opendistro-for-elasticsearch-kibana:0.7.0 container_name: odfe-kibana ports: - 5601:5601 expose: - "5601" environment: ELASTICSEARCH_URL: https://odfe-node1:9200 networks: - odfe-net volumes: odfe-data1: networks: odfe-net:
Composeを起動します。
$ docker-compose up
Kibanaにアクセスするためhttp://localhost:5601/app/kibana#/home
にブラウザでアクセスします。
初期のユーザIDとパスワードは両方共admin
です。
サンプルデータで試すためTry our sample data
をクリックします。
ここではWebのログデータを使用するためSample web log
のAdd
をクリックします。
データが追加されました。
次にDev Tools
のナビゲーションをクリックします。ここでSQLのクエリを試してみます。
以下のようなクエリを実行してみます。response(ステータスコード)でグループ化して各々の件数を求めます。
GET _opendistro/_sql { "query": "SELECT response, COUNT(*) FROM kibana_sample_data_logs GROUP BY response" }
すると以下のように結果が返ってきます。
{ "took" : 47, "timed_out" : false, "_shards" : { "total" : 1, "successful" : 1, "skipped" : 0, "failed" : 0 }, "hits" : { "total" : 14005, "max_score" : 0.0, "hits" : [ ] }, "aggregations" : { "response.keyword" : { "doc_count_error_upper_bound" : 0, "sum_other_doc_count" : 0, "buckets" : [ { "key" : "200", "doc_count" : 12872, "COUNT(*)" : { "value" : 12872 } }, { "key" : "404", "doc_count" : 687, "COUNT(*)" : { "value" : 687 } }, { "key" : "503", "doc_count" : 446, "COUNT(*)" : { "value" : 446 } } ] } } }
他にもAlerting
、Security
、Tenants
のナビゲーションが増えています。
さいごに
いかがでしたか?AWSにはElasticsearch Serviceがありますが、ElasticsearchではX-PackもありますがSaaSでの提供ができないので、セキュリティ面や運用上の不都合がありました。今回Open Distro for Elasticsearchを公開したので、今後Amazon Elasticsearch Serviceにもセキュリティの拡張機能やSQLなどが取り込まれていきます。互換バージョンが6.5であるため次のバージョンアップ対応では取り込まれるのではないかと思います。
Elastic社の拡張機能とは別の物となってしまいましたが、Amazon ESに取り込まれる予定なので事前に動作を確認して、Amazon ESに搭載された時に機能を使っていきたいと思います。