話題の記事

AWSがElasticsearchの新ディストリビューションをApacheライセンスで公開

AWSがElasticsearchの新ディストリビューションOpen Distro for ElasticsearchをApacheライセンスで公開しました。セキュリティ、アラート、SQL、パフォーマンス・アナライザという機能が追加されています。今後Amazon Elasticsearch Serviceにも取り込まれる予定です。

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

大栗です。

先程AWSがElasticsearchの新しいディストリビューションをApache License 2.0で公開しました。Elasticsearchは元々Apache License 2.0で公開されていますが、プラグインも全てApache License 2.0となっています。

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-managementopendistro-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ファイルを作成します。

docker-compose.yml

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 logAddをクリックします。

データが追加されました。

次に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
          }
        }
      ]
    }
  }
}

他にもAlertingSecurityTenantsのナビゲーションが増えています。

さいごに

いかがでしたか?AWSにはElasticsearch Serviceがありますが、ElasticsearchではX-PackもありますがSaaSでの提供ができないので、セキュリティ面や運用上の不都合がありました。今回Open Distro for Elasticsearchを公開したので、今後Amazon Elasticsearch Serviceにもセキュリティの拡張機能やSQLなどが取り込まれていきます。互換バージョンが6.5であるため次のバージョンアップ対応では取り込まれるのではないかと思います。

Elastic社の拡張機能とは別の物となってしまいましたが、Amazon ESに取り込まれる予定なので事前に動作を確認して、Amazon ESに搭載された時に機能を使っていきたいと思います。