Search Solutions on AWS

Preview:

Citation preview

Search Solutionson AWS

Name• Eiji Shinohara / 篠原 英治

Social • Twitter: @shinodogg• Blog: https://shinodogg.com

AWS Solutions Architect• Area of Depth

• AWS Search Services• Digital Advertising Technology

AWSの検索サービス• Amazon CloudSearch

• https://aws.amazon.com/jp/cloudsearch/

• Amazon Elasticsearch Service• https://aws.amazon.com/jp/elasticsearch-service/

Amazon CloudSearch Amazon Elasticsearch Service

A9.com → The team joins AWS• CloudSearch/Amazon ES の開発拠点はパロアルト

Amazon CloudSearch• ⾃動拡張するフルマネージド検索サービス• 2011 API• A9が作ったプロプライエタリな検索エンジン• Amazon.comで使っているもの• 東京リージョンは対象外

• 2013 API• on top of Apache Solr• 多⾔語対応• ⽇本語の形態素解析、n-gram、カスタム辞書にも対応

• 東京リージョンは2014年3⽉からサービス提供中

Amazon CloudSearch• Auto Scaling / Auto Partitining

Auto Partitioning

Auto Scaling

Amazon Elasticsearch Service• Elasticsearchのマネージドサービス• AWSクラウド上で Elasticsearch を簡単に構築可能• Elasticsearchの分散/スケーリング機能はクラウドと相性が良い• インスタンスタイプと台数を選択するだけでプロビジョニング

• デフォルトでKibanaがインストールされる• Management ConsoleにてURLをクリックするだけで直ぐ利⽤可能

• 使った分だけの従量課⾦• ノードに利⽤するEC2の時間課⾦• EBSボリュームを使った場合はEBSの料⾦

•略称はAmazon ES

AWS Podcast•Episode #145 | September 5, 2016• Jon Handler: Principal Search Services Solutions Architect• Elasticsearchとは?• Elasticsearchのどういうところが良い?• Amazon Elasticsearch Serviceとは?• Eliminate undifferenciated heavy lifting• Easy to manage, operate, and scale• Security• Monitoring• Just a few clicks to deploy

AWS re:Invent 2016•Real-Time Data Exploration and Analytics with Amazon Elasticsearch Service and Kibana(BDM302)

https://www.youtube.com/watch?v=R40N9eZTaAA

AWS re:Invent 2016•Real-Time Data Exploration and Analytics with Amazon Elasticsearch Service and Kibana(BDM302)• Apacheのログを使ってend-to-endでログ解析する⽅法を紹介• Amazon Kinesis Firehoseを使ってAmazon ESクラスタにデータを投⼊• インスタンスタイプ, ストレージオプション, shard数, インデックスのローテーション等のベスト・プラクティスを紹介• Kibanaのセットアップおよびカスタムダッシュボードウィジェットの作成⽅法• Deep Dive: Elasticsearch Query DSLやcustom/ad-hocレポートの⽣成⽅法の紹介 等

テラバイト級のログデータをどうしていますか?

今回のセッションでは以下のような構成をご紹介します

data source Amazon Kinesis Firehose Amazon Elasticsearch Service

Kibana

123 4

Query DSL5

構築したアウトプットのイメージ

Shard 1 Shard 2 Shard 3 Shard 4

index は document の集合。各ドキュメントは分割された shard に配置されます

Documents

Index

ID ID ID ID ID ID ID ID ID ID ID ID ID ID ID ID

...

Indexing, compression

index のクラスタへのデプロイメント

• Index 1– Shard 1– Shard 2– Shard 3

• Index 2– Shard 1– Shard 2– Shard 3

Amazon ES cluster

123

123

123

123

Primary Replica

1

3

3

1

Instance 1,Master

2

1

1

2

Instance 2

3

2

2

3

Instance 3

How many instances?• index のサイズは、元の document の集合と同じになる場合が多い ※トークナイズの⽅法等にもよる• Indexを複製する場合は倍のサイズ

• ストレージのサイジング• ローカルのエフェメラルディスク、もしくは、インスタンスごとに512GBのAmazon Elastic Block Store(EBS)を選択

• 例: 2TBの元データの⽬安• 512GBのEBSでIndexを複製する場合は8インスタンス• i2.2xlargeのインデックスタイプを選択する場合はローカルのエフェメラルディスクを使えば4ノードでも事⾜りる → カジュアルな⽤途向き

dedicated master ノードがないクラスタ

Amazon ES cluster

1

3

3

1

Instance 1,Master

2

1

1

2

Instance 2

3

2

2

3

Instance 3

dedicated masterノードのあるクラスタ

Amazon ES cluster

1

3

3

1

Instance 1

2

1

1

2

Instance 2

3

2

2

3

Instance 3Dedicated master nodesData nodes: queries and updates

Zone awareness を有効にした場合のクラスタ

Amazon ES cluster

1

3

Instance 1

2

1 2

Instance 2

3

2

1

Instance 3

Availability Zone 1 Availability Zone 2

2

1

Instance 4

3

3

Amazon ES クラスタ構築のベストプラクティス

• Data nodes の数 = 必要なストレージ量 / ノード毎のストレージ• GP2 EBS volume の活⽤• 本番環境には 3 dedicated master ノード• Zone Awareness の有効化

Amazon Elasticsearch Service overview

Amazon Route 53

Elastic LoadBalancingAWS

IAM

Amazon CloudWatch

Elasticsearch API

AWS CloudTrail

Amazon Elasticsearch Service を使う利点

Easy to use

Open-source compatible

Secure

Highly available

AWS integrated

Scalable

Kinesis Firehose

Kinesis Firehose overview• Delivery Stream:

AWSのリソースを活⽤

• Destination:Amazon RedshiftAmazon S3Amazon ES

• Record:レコードをストリームにプッシュ設定したデスティネーションにデータをお届け

Kinesis Firehose の デリバリーアーキテクチャ

intermediate Amazon S3 bucket

backup S3 bucket

source records

data sourcesource records

Amazon Elasticsearch

Service

Firehosedelivery stream

delivery

[Coming soon!]Kinensis Firehose のデリバリーアーキテクチャwith transformations

intermediate Amazon S3

bucket

backup S3 bucket

source records

data source

source records

Amazon Elasticsearch

Service

Firehosedelivery stream transformed

records transformedrecords

transformation failuredelivery failure

※指定したLambda Functionで変換

Kinesis Firehose features for ingest

Serverless scale Error handling S3 Backup

Kinesis Firehose stream の作成

Kinesis Firehose の ベストプラクティス• レイテンシーとトータルなスループットのバランスでbuffer sizeを決めるスループットを上げるには⼩さいbuffer sizeが有利だが、コンカレンシーに注意が必要

• index をローテーションさせるよくあるのは Daily でのローテーション

• デフォルトのストリームの制限stream limits: 2,000 transactions/second5,000 records/second, and 5 MB/second

template および data のアップロード

Shard数 = index サイズ / 各ノードのサイズindex を作成する際にShard数を設定

It dependsであるし、議論があるところではあるが”Less is more”

Write:該当ShardのノードのCPUを使う

Read:全てのShardのノードのCPUを使う

同時並⾏で複数のShardに多数の書き込むを⾏う場合は、クラスタ全体のCPUリソースを考慮すること

Amazon ES cluster

1

3

3

1

Instance 1,Master

2

1

1

2

Instance 2

3

2

2

3

Instance 3

Mapping でデータのインデクシングをコントロール

• Kibanaを使った可視化は”not_analyzed”なテキストで良い

例えば、IPアドレスはドットで分割する必要ない

• Mappingのテンプレートは_template APIを使って定義

全ての新しいインデックスに適⽤される

• テンプレートはShard数の設定にも⽤いる

0 delete 1,3,51 get 2,3,4,62 head 1,7,93 post 2,84 put 24

IndexWriter

Log データを検索ドキュメントに変換d104.aa.net - - [01/Jul/1995:00:00:15 -0400] "GET /images/KSC-logosmall.gifHTTP/1.0" 200 1204

{"status": 200, "ident": "-", "@timestamp": "1995-07-01T00:00:05", "request": "/images/KSC-logosmall.gif HTTP/1.0", "auth": "-", "host": "d104.aa.net", "verb": "GET", "time": "01/Jul/1995:00:00:15 -0400", "size": 1204}

send_data メソッド

Kinesis FirehoseへのLogデータ送信

Kinesis FirehoseへのLogデータ送信のベストプラクティス• セッティング⽤にテンプレートを使う• Shard数を設定する• 1つのノードに1つのアクティブなshard• 可視化のユースケースでは全てのフィールドは”not_analyzed“で良い

Analyze Apache Web Logs

Amazon ES aggregations

• Buckets – ドキュメントをグループ化する際の項⽬•Metrics – 集計後のBucketsのデータ

Bucket: time

Met

ric:

coun

t

Kibanaで可視化する際のベストプラクティス

• フィールドが not_analyzed であること

• 可視化はbucketsおよびmetricsベース

• Data Histogramには最初に x-axis を選択

Run Elasticsearch in the AWS cloud with Amazon Elasticsearch Service

Use Kinesis Firehose to ingest data simply

Kibana for monitoring, Elasticsearch queries for deeper analysisAmazon

Elasticsearch Service

Lucene/Solr Revolution 2016• PlayStation and Lucene - Indexing 1M documents per second

Alexander Filipchik, Sony Interactive Entertainment

http://www.slideshare.net/lucidworks/playstation-and-lucene-indexing-1m-documents-per-second-presented-by-alexander-filipchik-sony-interactive-entertainment

Lucene/Solr Revolution 2016• SearchHub - LucidWorks Fusion: Solr & Spark

http://www.slideshare.net/lucidworks/searchhub-how-to-spend-your-summer-keeping-it-real-presented-by-grant-ingersoll-lucidworks

Elastic{on} TOUR 東京2016• Elasticsearch 5 / Kibana 5• 2016年12⽉15⽇• 私は抽選の結果、⾒送りで参加できない為、是⾮シェアやフィードバックを〜

https://www.elastic.co/jp/elasticon/tour/2016/tokyo

Recommended