はじめに
2019年3月13日にAWSが突如別ディストリビューションのElasticsearchをOpen Distro for ElasticsearchとしてGithubにソースコードを公開しました。
Elastic社とは全く関係のない別のElasticsearchとして、以下の機能を無償で提供しています。
※Elasticの有償サブスクリプションが無くても、やりたいことが色々出来ちゃいそうですね。。
①セキュリティ
・通信暗号化
・ユーザ認証
・ロール制御
・Index、Field、Documentレベルの制御
・監査ログ
・LDAP/AD、SAML認証連携
・Cross-cluster search
・Kibanaのマルチテナント
②アラート通知
③SQLアクセス
④パフォーマンスアナライザー
おそらく今後、Amazon Elasticsearch Serviceに機能が追加されていくことが想定されますし
せっかくなので、試してみました。すでにアラート機能は追加されているっぽい。。
【参考】
・新登場 Open Distro for Elasticsearch
・AWS OSSだけで構成される「Open Distro for Elasticsearch」公開
前提
Dockerコンテナでライトに動かしている記事はいくつか見かけていますが
RPMでOSに導入している人はあまり見かけていないので、クラスタを組むことを想定して
今回はEC2(シングル構成)にRPMで構築してみました!
利用環境
product | version |
---|---|
Open Distro for Elasticsearch | 0.8.0 |
Elasticsearch | 6.6.2 |
Java | 1.8.0-openjdk-devel |
OS(EC2) | Amazon Linux2 (t3.large) |
AMI ID | ami-06b382aba6c5a4f2c |
※2019年4月時点の最新版である0.8.0はElasticsearch6.6.2が対応バージョンになっています。
【参考】
・About Open Distro for Elasticsearch
Javaバージョンについて
今後、同じEC2上にLogstashも入れる予定のため、Javaバージョンは11ではなく8にしています。
Logstash requires Java 8. Java 9 is not supported. Use the official Oracle distribution or an open-source distribution such as OpenJDK.
1.8.0-openjdk-devel
ではなく1.8.0-openjdk
とかを入れるとエラーでElasticsearchが起動しないので
注意してください。マニュアル通り、正しくJavaをインストールしましょうw
【参考】
・Installing Logstash
実施内容
以下の手順で構築を実施しました。
1. Javaのインストール
2. Open Distro for Elasticsearch(Elasticsearch)のインストール
3. Elasticsearchの設定
4. Open Distro for Elasticsearch(Kibana)のインストール
5. Kibanaの設定
6. アクセス確認
1. Javaのインストール
- Java8をインストールします。
[ec2-user@ip-10-0-0-71 ~]$ sudo yum install java-1.8.0-openjdk-devel
- 念のためバージョンを確認しておきます。
[ec2-user@ip-10-0-0-71 ~]$ sudo java -version
openjdk version "1.8.0_201"
OpenJDK Runtime Environment (build 1.8.0_201-b09)
OpenJDK 64-Bit Server VM (build 25.201-b09, mixed mode)
- Java8を利用する場合は、以下のコマンドでシンボリックリンクを張ります。
[ec2-user@ip-10-0-0-71 ~]$ sudo ln -s /usr/lib/jvm/java-1.8.0/lib/tools.jar /usr/share/elasticsearch/lib/
2. Open Distro for Elasticsearch(Elasticsearch)のインストール
- Open Distro for ElasticsearchはOSS版Elasticsearchにアドオンされる形でPluginが入ります。
- OSS版ElasticsearchとOpen Distro for Elasticsearchのリポジトリを登録します。
[ec2-user@ip-10-0-0-71 ~]$ sudo vi /etc/yum.repos.d/elastic.repo
[elasticsearch-6.x]
name=Elasticsearch repository for 6.x packages
baseurl=https://artifacts.elastic.co/packages/oss-6.x/yum
gpgcheck=1
gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch
enabled=1
autorefresh=1
type=rpm-md
[opendistroforelasticsearch-artifacts-repo]
name=Release RPM artifacts of OpenDistroForElasticsearch
baseurl=https://d3g5vo6xdbdb9a.cloudfront.net/yum/noarch/
enabled=1
gpgkey=https://d3g5vo6xdbdb9a.cloudfront.net/GPG-KEY-opendistroforelasticsearch
gpgcheck=1
repo_gpgcheck=1
autorefresh=1
type=rpm-md
- Elasticsearchをインストールします。
[ec2-user@ip-10-0-0-71 ~]$ sudo yum install opendistroforelasticsearch
- 上記コマンドでインストールすると以下のパッケージが導入されるようです。
================================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
================================================================================================================================================
インストール中:
opendistroforelasticsearch noarch 0.8.0-1 opendistroforelasticsearch-artifacts-repo 2.7 k
依存性関連でのインストールをします:
elasticsearch-oss noarch 6.6.2-1 elasticsearch-6.x 33 M
opendistro-alerting noarch 0.8.0.0-1 opendistroforelasticsearch-artifacts-repo 2.9 M
opendistro-performance-analyzer noarch 0.8.0.0-1 opendistroforelasticsearch-artifacts-repo 11 M
opendistro-security noarch 0.8.0.0-1 opendistroforelasticsearch-artifacts-repo 26 M
opendistro-sql noarch 0.8.0.0-1 opendistroforelasticsearch-artifacts-repo 5.9 M
3. Elasticsearchの設定
- elasticsearch.ymlはOSS版のデフォルト設定の下に以下の内容が追記されています。
######## Start OpenDistro for Elasticsearch Security Demo Configuration ########
# WARNING: revise all the lines below before you go into production
opendistro_security.ssl.transport.pemcert_filepath: esnode.pem
opendistro_security.ssl.transport.pemkey_filepath: esnode-key.pem
opendistro_security.ssl.transport.pemtrustedcas_filepath: root-ca.pem
opendistro_security.ssl.transport.enforce_hostname_verification: false
opendistro_security.ssl.http.enabled: true
opendistro_security.ssl.http.pemcert_filepath: esnode.pem
opendistro_security.ssl.http.pemkey_filepath: esnode-key.pem
opendistro_security.ssl.http.pemtrustedcas_filepath: root-ca.pem
opendistro_security.allow_unsafe_democertificates: true
opendistro_security.allow_default_init_securityindex: true
opendistro_security.authcz.admin_dn:
- CN=kirk,OU=client,O=client,L=test, C=de
opendistro_security.audit.type: internal_elasticsearch
opendistro_security.enable_snapshot_restore_privilege: true
opendistro_security.check_snapshot_restore_write_privileges: true
opendistro_security.restapi.roles_enabled: ["all_access", "security_rest_api_access"]
cluster.routing.allocation.disk.threshold_enabled: false
discovery.zen.minimum_master_nodes: 1
node.max_local_storage_nodes: 3
######## End OpenDistro for Elasticsearch Security Demo Configuration ########
※ESノード間、Kibana等のクライアントとの通信がデモ用証明書でTLS暗号化されています。
- JVMヒープサイズをメモリ容量に応じて変更します。
[ec2-user@ip-10-0-0-71 ~]$ sudo vi /etc/elasticsearch/jvm.options
<抜粋>
-Xms4g
-Xmx4g
※今回はOSに8GBのメモリを用意しているので、JVMヒープには半分の4GBとしています。
- Elasticsearchを起動します。
[ec2-user@ip-10-0-0-71 ~]$ sudo systemctl start elasticsearch
- 以下のステータス確認になります。
[ec2-user@ip-10-0-0-71 ~]$ sudo systemctl status elasticsearch
● elasticsearch.service - Elasticsearch
Loaded: loaded (/usr/lib/systemd/system/elasticsearch.service; disabled; vendor preset: disabled)
Active: active (running) since 月 2019-04-22 04:01:07 UTC; 2s ago
Docs: http://www.elastic.co
Main PID: 402 (java)
CGroup: /system.slice/elasticsearch.service
└─402 /bin/java -Xms4g -Xmx4g -XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=75 -XX:+UseCMSInitiatingOccupancyOnly -De...
4月 22 04:01:07 ip-10-0-0-71.ec2.internal systemd[1]: Started Elasticsearch.
4月 22 04:01:07 ip-10-0-0-71.ec2.internal systemd[1]: Starting Elasticsearch...
4月 22 04:01:08 ip-10-0-0-71.ec2.internal elasticsearch[402]: java.security.policy: error adding Entry:
4月 22 04:01:08 ip-10-0-0-71.ec2.internal elasticsearch[402]: java.net.MalformedURLException: unknown protocol: jrt
4月 22 04:01:08 ip-10-0-0-71.ec2.internal elasticsearch[402]: java.security.policy: error adding Entry:
4月 22 04:01:08 ip-10-0-0-71.ec2.internal elasticsearch[402]: java.net.MalformedURLException: unknown protocol: jrt
[ec2-user@ip-10-0-0-71 ~]$ curl -XGET https://localhost:9200 -u admin:admin --insecure
{
"name" : "TJb2jgV",
"cluster_name" : "elasticsearch",
"cluster_uuid" : "WYms_LtSR_aypB0U1ax5dg",
"version" : {
"number" : "6.6.2",
"build_flavor" : "oss",
"build_type" : "rpm",
"build_hash" : "3bd3e59",
"build_date" : "2019-03-06T15:16:26.864148Z",
"build_snapshot" : false,
"lucene_version" : "7.6.0",
"minimum_wire_compatibility_version" : "5.6.0",
"minimum_index_compatibility_version" : "5.0.0"
},
"tagline" : "You Know, for Search"
}
[ec2-user@ip-10-0-0-71 ~]$ 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
127.0.0.1 10 32 26 0.40 0.11 0.04 mdi * TJb2jgV
[ec2-user@ip-10-0-0-71 ~]$ curl -XGET https://localhost:9200/_cat/plugins?v -u admin:admin --insecure
name component version
TJb2jgV opendistro_alerting 0.8.0.0
TJb2jgV opendistro_performance_analyzer 0.8.0.0
TJb2jgV opendistro_security 0.8.0.0
TJb2jgV opendistro_sql 0.8.0.0
※systemctl status elasticsearchでJava8にしたことで4行エラーが表示されますが、起動していればOKだそうです。
- 自動起動の設定をしておきます。
[ec2-user@ip-10-0-0-71 ~]$ sudo systemctl daemon-reload
[ec2-user@ip-10-0-0-71 ~]$ sudo systemctl enable elasticsearch.service
4. Open Distro for Elasticsearch(Kibana)のインストール
- Kibanaをインストールします。
[ec2-user@ip-10-0-0-71 ~]$ sudo yum install opendistroforelasticsearch-kibana
- 導入されるパッケージはOpen DistroのKibanaのみでした。
================================================================================================================================================
Package アーキテクチャー バージョン リポジトリー 容量
================================================================================================================================================
インストール中:
opendistroforelasticsearch-kibana x86_64 0.8.0-1 opendistroforelasticsearch-artifacts-repo 65 M
5. Kibanaの設定
- .kibanaymlはOSS版のデフォルト設定は一切書いてありません。以下の内容のみです。
#Default Kibana configuration for opendistro
elasticsearch.url: https://localhost:9200
elasticsearch.ssl.verificationMode: none
elasticsearch.username: kibanaserver
elasticsearch.password: kibanaserver
elasticsearch.requestHeadersWhitelist: ["securitytenant","Authorization"]
opendistro_security.multitenancy.enabled: true
opendistro_security.multitenancy.tenants.preferred: ["Private", "Global"]
opendistro_security.readonly_mode.roles: ["kibana_read_only"]
- なので、ローカル以外からもKibanaにアクセス出来るように設定を追加します。
[ec2-user@ip-10-0-0-71 ~]$ sudo vi /etc/kibana/kibana.yml
server.host: 0.0.0.0
<以下、省略>
※elasticsearch.ssl.verificationMode: none
となっているので、証明書をKibanaに配置しなくてもアクセス可能です。
※デフォルトでマルチテナント設定になっています。
- kibanaを起動します。(Elasticsearch同様にstatusも確認しておきます)
[ec2-user@ip-10-0-0-71 ~]$ sudo systemctl start kibana
- 自動起動の設定をしておきます。
[ec2-user@ip-10-0-0-71 ~]$ sudo systemctl daemon-reload
[ec2-user@ip-10-0-0-71 ~]$ sudo systemctl enable kibana.service
6. アクセス確認
- EC2のIPアドレスに対して、別マシンから5601ポートでWebアクセスします。(http://[KibanaのIP]:5601)
※初期はIDもPWもadmin
です。
まとめ
いかがでしょうか。
Alerting、Security、SQLなどの機能の紹介や使い勝手は別途記事にまとめていこうと思いますが
OSS版との差異を中心に構築手順を紹介してみました。
デフォルトでユーザ認証機能が有効されますし、Alertingを使いこなして
Slackにほしい情報を通知することもできるので、便利です。
先日のGoogle Cloud Next 2019でまた新たな動きがあったので、今後の動向に注目ですね。
Open Distro for Elasticsearchも、是非一度は試してみてはいかがでしょうか^^