What's new in Elastic Stack
7.0?
Jun Ohtani, Developer | Evangelist
2019/05/23 Middlewares Deep Talks

What's new in Elastic Stack
7.0 7.1?
Jun Ohtani, Developer | Evangelist
2019/05/23 Middlewares Deep Talks

about••!3

Me, Jun Ohtani / Community Engineer‒ Elasticsearch勉強会 / 検索技術勉強会‒

データ分析基盤構築入門 共著‒

http://blog.johtani.info

Elastic, founded in 2012
‒ Products: Elasticsearch, Logstash, Kibana, Beats
Elastic APM,
Elastic Cloud, Swiftype
Professional services: Support & development subscriptions
Trainings, Consulting, SaaS

7.1リリース• Elastic Cloud on Kubernetes• Kubernetes Operator
pattern• Dynamically scaling local
storage w/ Elastic Local
Volume4

7.1リリース• Securityの機能がBasicの対象に• TLS• File and native realm• RBAC

5

Elasticsearch新世代クラスター管理層
Node B

クラスター管理を将来のための基盤として再構築
強固な理論と広範囲なテスト

Node A

形式モデルで検証済み
利点
minimum_master_nodes設定の排除
1秒以内でのマスター選出
ラグやゾンビノードの迅速な除去
https://ela.st/new-cluster-coordination
7

Node CCluster Coordination?

8自動的な分散node 1orders1

2

3

4

products
1
2!9

自動的な分散node 1

node 2ordersorders

1

2

1

2

3

4

3

4

products
1!10

products2

自動的な分散node 1node 2

node 3orders

ordersorders1

2
4

products
1!112
3

products
21
3

4

products

Cluster State?

12

Cluster State
Metadata about a cluster• Cluster settings• Index metadata‒ settings‒ mappings‒ where are my shards?
‒ which shards are in sync?

• Lots more besides...
GET _cluster/state13

Cluster Coordination• Making sure all nodes have the latest cluster state• Making sure cluster state updates are not lost• (Making sure all nodes are healthy)

14

Scope15

How does it work?

Discovery

16

MasterElection

ClusterStatePublication• Where are the mastereligible nodes?

• Agree on a node to takecharge• Agree on updates to cluster
state• Is there already a master?

• Form a cluster• Broadcast updates to allnodes

Agree?

17

Agree?

18

Agree?

19

Agree?

20

Agree?

21

Agree?

22

Agree?

23

Agree?

24

Voting configurations
GET /_cluster/state?filter_path=nodes.*.name,metadata.cluster_coordination.last_committed_config=>{"nodes": {"ATdJrEZ6Rj62Sh7-UxhP5w": {"name": "node-0"},"vfMBDxJ-R0SdXyAu9wN-4Q": {"name": "node-1"},"kEyYc7lRTcqDjiWJkgG7qA": {"name": "node-2"},"w0GviS2DTNajk85-_dJ6nQ": {"name": "node-3"}},"metadata": {"cluster_coordination": {"last_committed_config": ["ATdJrEZ6Rj62Sh7-UxhP5w","kEyYc7lRTcqDjiWJkgG7qA","w0GviS2DTNajk85-_dJ6nQ"]}}}
25

How do we use it?
Discovery“Where are all the master-eligible nodes?”• Settings‒ discovery.seed_nodes (formerly discovery.zen.ping.unicast.hosts)‒ Hostnames or IP addresses (maybe with transport ports)‒ discovery.seed_providers (formerly discovery.zen.hosts_provider)‒ file, ec2, gce, …
‒ some providers have extra settings too26

How do we use it?
Cluster bootstrapping“Which nodes count in the very first election?”• Settings‒ cluster.initial_master_nodes‒ node names or transport addresses (IP addresses only)‒ ok to set this on multiple nodes, as long as they’re all consistent‒ ignored once node has joined a cluster, even if restarted‒ unnecessary when joining a new node to an existing cluster27

How do we use it?
Other settings“What else can we adjust?”• Lots of other settings‒ see reference manual• Defaults are good

• Changing them is not recommended28

How do we use it?
Dynamic clusters“How do we add or remove a node?”• Master-ineligible nodes‒ no different from earlier versions• Adding master-eligible nodes‒ just do it, no settings to adjust• Removing master-eligible nodes‒ just do it, as long as you remove less than half of them at once29

Troubleshooting
Troubleshooting

Logging
whenthings
go wrong
Logging
whenthings
go wrong• ClusterFormationFailureHelper• ClusterFormationFailureHelper‒‒ WARN
WARNcomprehensive
comprehensiveperiodic
periodicstatus
statusupdate
updatewhile
whilecluster
clusternot
notformed
formed[2019-04-04T10:02:10,276][WARN ][o.e.c.c.ClusterFormationFailureHelper]][o.e.c.c.ClusterFormationFailureHelper] [node[node-5]
not discoveredor electedyet,
an election
requiresat 2least
5] mastermasternot discoveredor elected
yet, anelection
requiresat least
nodes2nodes
withids[QsZt-170SBeRpHJbWb-W6Q,
from [QsZt-170SBeRpHJbWb-W6Q,
9becUMgvTF-DbSDZ2uf_Og,
with ids
from9becUMgvTF-DbSDZ2uf_Og,
EpyPd38tQhKES91p_23WgA],
have discovered
discovered [{node-0}{S68ml-4eREaGpmkVrnjorw}[{node-0}{S68ml-4eREaGpmkVrnjorw}
EpyPd38tQhKES91p_23WgA], have{127.0.0.1:9300}]
which isis notnot aa quorum;quorum; discovery
discovery will
will continue
continue using
using{127.0.0.1:9300}] which[127.0.0.1:9300,
127.0.0.1:9301, 127.0.0.1:9302,
127.0.0.1:9302, 127.0.0.1:9303,
127.0.0.1:9303,[127.0.0.1:9300, 127.0.0.1:9301,127.0.0.1:9304]
from hosts
hosts providers
providers andand [{node-4}{9becUMgvTF-DbSDZ2uf_Og}[{node-4}{9becUMgvTF-DbSDZ2uf_Og}
127.0.0.1:9304] from{127.0.0.1:9304},{node-5}{EpyPd38tQhKES91p_23WgA}{127.0.0.1:9305}] fromfrom lastlast{127.0.0.1:9304}, {node-5}{EpyPd38tQhKES91p_23WgA}{127.0.0.1:9305}]
known cluster state; node term 42, last-accepted version 165 in term 42
known cluster state; node term 42, last-accepted version 165 in term 422630

Troubleshooting

Logging when things go wrong• ClusterFormationFailureHelper‒ WARN comprehensive periodic status update while cluster not formed[2019-04-04T10:02:10,276][WARN ][o.e.c.c.ClusterFormationFailureHelper] [node5] master not discovered or elected yet, an election requires at least 2 nodes
with ids from [QsZt-170SBeRpHJbWb-W6Q, 9becUMgvTF-DbSDZ2uf_Og,
EpyPd38tQhKES91p_23WgA], have discovered [{node-0}{S68ml-4eREaGpmkVrnjorw}{127.0.0.1:9300}] which is not a quorum; discovery will continue using[127.0.0.1:9300, 127.0.0.1:9301, 127.0.0.1:9302, 127.0.0.1:9303,127.0.0.1:9304] from hosts providers and [{node-4}{9becUMgvTF-DbSDZ2uf_Og}{127.0.0.1:9304}, {node-5}{EpyPd38tQhKES91p_23WgA}{127.0.0.1:9305}] from lastknown cluster state; node term 42, last-accepted version 165 in term 422731

トップヒットクエリの高速化
クエリ性能の改善によるユーザー体験の向上
Block-MAX WANDアルゴリズムによる新実装
アプリケーション検索、エンタープライズ検索のようなユースケースにマッチ
以下のユースケースは対象外:

32•aggregation•Kibana (aggregationを利用)•

正確なヒット件数が必要

Script Score Query
カスタムスコアのための関数を定義
全フィールドが対象_scoreも対象
正規化"""

Saturation
Logarithm
Sigmoid

Painlessで記述も可能
もちろん提供済みの関数もOK

33"script" : {"source" : "decayGeoExp(params.origin,params.scale, params.offset, params.decay,doc['location'].value)","params": {"origin": "40, -70.12","scale": "200km","offset": "0km","decay" : 0.2}}

Rank Features Query
新しいデータタイプ:""

rank_featurerank_features(rank_featureのベクトル)

関連ランキングスコアに追加可能

PUT my_index{"mappings": {"properties": {"pagerank": {"type": "rank_feature"},"url_length": {"type": "rank_feature",

追加前の正規化も可能:"Saturation"
Logarithm"
Sigmoid
top-kクエリの高速化にも利用できる設計のため、性能も向上
34"positive_score_impact": false}}}}クラスター横断検索 (CCS) の改善
WANのために最適化された新実行モードの登場 (ccs_minimize_roundtrips)

CCS

6.7以前:
リモートクラスターにある各シャードからの応答により、ネットワーク上を多数の小さなリクエストが発生
7.0以降:
各リモートクラスターのcoordinatingノードから1度の応答により、ネットワーク上のリクエスト回数を削減
35

Cluster 1

Cluster 2

JVM のバンドル
ElasticsearchにJDK (OpenJDKを利用)をバンドルして配布

Javaのインストール手順をなくすことでインストールを簡易化必要に応じてJVMを含まないバージョンもダウンロード可36

7.0の大きな変更点• number_of_indices=1がデフォルト（これまでは5）‒ _splitでもちろんこれまで通り分割も可能• Hitsの形式の変更（後述）• Aggregationの最大bucketsの制御が可能（ユーザーによる巨大なBucketsの指定）‒ もし、ユーザーが巨大な値を設定しても、real memory circuit-breakerが保護

37

7.0の大きな変更点• number_of_indices=1がデフォルト（これまでは5）• _splitでもちろんこれまで通り分割も可能• Hitsの形式の変更• Aggregationの最大bucketsの制御が可能（ユーザーによる巨大なBucketsの指定）• もし、ユーザーが巨大な値を設定しても、real memory circuit-breakerが保護

38

そのほかの改善• Adaptive replica selectionがデフォルトに• 検索されないシャードのバックグラウンドRefreshをスキップ
多くのユーザーのインデックススループットが向上• High level Java REST clientが全機能に対応
Transport clientが7.0で非推奨、8.0で廃止予定• Nano-secondsのデータに対応
date_nanos データタイプの登場
39

Kibana新しいルック•アンド•フィール
新しいグローバル・ナビゲーション
どこでもダークモード
レスポンシブなダッシュボード
タイムピッカーの改善
Kibanaクエリー言語がデフォルトに

41

新しい
ルック•アンド•フィール
新しいグローバル・ナビゲーション
どこでもダークモード
レスポンシブなダッシュボード
タイムピッカーの改善
Kibanaクエリー言語がデフォルトに

42

新しい
ルック•アンド•フィール
新しいグローバル・ナビゲーション
どこでもダークモード
レスポンシブなダッシュボード
タイムピッカーの改善
Kibanaクエリー言語がデフォルトに

43

新しい
ルック•アンド•フィール
新しいグローバル・ナビゲーション
どこでもダークモード
レスポンシブなダッシュボード
タイムピッカーの改善
Kibanaクエリー言語がデフォルトに

44

新しい
ルック•アンド•フィール
新しいグローバル・ナビゲーション
どこでもダークモード
レスポンシブなダッシュボード
タイムピッカーの改善
Kibanaクエリー言語がデフォルトに45

Beats新しいBeatsモジュール
新しいFilebeatモジュール"""

Zeek (fka Bro) (Basic)
IPtables (Basic)
Santa (OSS)

新しいMetricbeatモジュール
""
"
"

47

AWS EC2 (Basic)
Microsoft SQL (Basic)
NATS (OSS)
CouchDB (OSS)モジュールの成熟

GAになったモジュール-Golang
Graphite
Munin
Prometheus

Betaになったモジュール-

48

System module (Auditbeat)

ECSのサポート
ほとんどのBeatsとモジュールはECS
フォーマットでデータを生成
Beatsのadd_*プロセッサがECSをサポート**WinlogbeatとFunctionbeat、JournalbeatはECSを限定的にサポー
ト49

Elastic Common Schema (ECS)
合理的な分析のための正規化

Elastic Common Schema (ECS)を、2019
年3月に公開Elasticsearchへのデータ投入に際して、フィールドとオブジェクトの共通セットを定義
多様なデータの横断分析を可能にする
拡張可能な設計
https://github.com/elastic/ecs
貢献とフィードバックを歓迎します50

Beatsコア機能
Add_* プロセッサがECSフィールドを含める-

Geo info
OS name

新しいBeatsプロセッサが利用可能-

Add_fields
Add_labels
Add_tags

新しいFilebeatエンコーディング

51

-

Latin
IBM codepages
CyrillicMacintoshWindows

Logstash

Logstashのエンハンス
初期値でJava Execution Engineを使用
高パフォーマンス、短い起動時間、メモリ使用量の削減
新しいプラグインのサポート-

53

CIDR filter
Clone filter
Prune filter

Thank You

Elastic{ON} Tour Tokyo• Elasticsearch、Kibana、Beats、そしてLogstashの最新ロードマップが公開されます。ElasticのエキスパートやElastic Stackユーザーから活用のヒントを得る機会にもなります。

55