Search Solutions
on 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 DSL
5
構築したアウトプットのイメージ
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
1
2
3
1
2
3
1
2
3
1
2
3
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 nodes
Data 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 Load
Balancing
AWS
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 Redshift
Amazon S3
Amazon ES
• Record:
レコードをストリームにプッシュ
設定したデスティネーションに
データをお届け
Kinesis Firehose の デリバリーアーキテクチャ
intermediate
Amazon S3 bucket
backup S3 bucket
source records
data source
source
records
Amazon
Elasticsearch
Service
Firehose
delivery stream
delivery
[Coming soon!]
Kinensis Firehose のデリバリーアーキテクチャ
with transformations
intermediate
Amazon S3
bucket
backup S3 bucket
source records
data source
source records
Amazon
Elasticsearch
Service
Firehose
delivery stream
transformed
records transformed
records
transformation failure
delivery 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/second
5,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,5
1 get 2,3,4,6
2 head 1,7,9
3 post 2,8
4 put 24
Index
Writer
Log データを検索ドキュメントに変換
d104.aa.net - - [01/Jul/1995:00:00:15 -0400] "GET /images/KSC-logosmall.gif
HTTP/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
Metric:count
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
Search Solutions on AWS

Search Solutions on AWS

  • 1.
  • 2.
    Name • Eiji Shinohara/ 篠原 英治 Social • Twitter: @shinodogg • Blog: https://shinodogg.com AWS Solutions Architect • Area of Depth • AWS Search Services • Digital Advertising Technology
  • 3.
    AWSの検索サービス • Amazon CloudSearch •https://aws.amazon.com/jp/cloudsearch/ • Amazon Elasticsearch Service • https://aws.amazon.com/jp/elasticsearch-service/ Amazon CloudSearch Amazon Elasticsearch Service
  • 4.
    A9.com → Theteam joins AWS • CloudSearch/Amazon ES の開発拠点はパロアルト
  • 5.
    Amazon CloudSearch • ⾃動拡張するフルマネージド検索サービス •2011 API • A9が作ったプロプライエタリな検索エンジン • Amazon.comで使っているもの • 東京リージョンは対象外 • 2013 API • on top of Apache Solr • 多⾔語対応 • ⽇本語の形態素解析、n-gram、カスタム辞書にも対応 • 東京リージョンは2014年3⽉からサービス提供中
  • 6.
    Amazon CloudSearch • AutoScaling / Auto Partitining Auto Partitioning Auto Scaling
  • 7.
    Amazon Elasticsearch Service •Elasticsearchのマネージドサービス • AWSクラウド上で Elasticsearch を簡単に構築可能 • Elasticsearchの分散/スケーリング機能はクラウドと相性が良い • インスタンスタイプと台数を選択するだけでプロビジョニング • デフォルトでKibanaがインストールされる • Management ConsoleにてURLをクリックするだけで直ぐ利⽤可能 • 使った分だけの従量課⾦ • ノードに利⽤するEC2の時間課⾦ • EBSボリュームを使った場合はEBSの料⾦ • 略称はAmazon ES
  • 8.
    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
  • 9.
    AWS re:Invent 2016 •Real-Time Data Exploration and Analytics with Amazon Elasticsearch Service and Kibana(BDM302) https://www.youtube.com/watch?v=R40N9eZTaAA
  • 10.
    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レポート の⽣成⽅法の紹介 等
  • 11.
  • 12.
    今回のセッションでは以下のような構成をご紹介します data source AmazonKinesis Firehose Amazon Elasticsearch Service Kibana 123 4 Query DSL 5
  • 13.
  • 14.
    Shard 1 Shard2 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
  • 15.
    index のクラスタへのデプロイメント • Index1 – Shard 1 – Shard 2 – Shard 3 • Index 2 – Shard 1 – Shard 2 – Shard 3 Amazon ES cluster 1 2 3 1 2 3 1 2 3 1 2 3 Primary Replica 1 3 3 1 Instance 1, Master 2 1 1 2 Instance 2 3 2 2 3 Instance 3
  • 16.
    How many instances? •index のサイズは、元の document の集合と同じになる 場合が多い ※トークナイズの⽅法等にもよる • Indexを複製する場合は倍のサイズ • ストレージのサイジング • ローカルのエフェメラルディスク、もしくは、インス タンスごとに512GBのAmazon Elastic Block Store(EBS)を選択 • 例: 2TBの元データの⽬安 • 512GBのEBSでIndexを複製する場合は8インスタン ス • i2.2xlargeのインデックスタイプを選択する場合は ローカルのエフェメラルディスクを使えば4ノードで も事⾜りる → カジュアルな⽤途向き
  • 17.
    dedicated master ノードがないクラスタ AmazonES cluster 1 3 3 1 Instance 1, Master 2 1 1 2 Instance 2 3 2 2 3 Instance 3
  • 18.
    dedicated masterノードのあるクラスタ Amazon EScluster 1 3 3 1 Instance 1 2 1 1 2 Instance 2 3 2 2 3 Instance 3Dedicated master nodes Data nodes: queries and updates
  • 19.
    Zone awareness を有効にした場合のクラスタ AmazonES 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
  • 20.
    Amazon ES クラスタ構築のベストプラクティス •Data nodes の数 = 必要なストレージ量 / ノード毎のストレージ • GP2 EBS volume の活⽤ • 本番環境には 3 dedicated master ノード • Zone Awareness の有効化
  • 21.
    Amazon Elasticsearch Serviceoverview Amazon Route 53 Elastic Load Balancing AWS IAM Amazon CloudWatch Elasticsearch API AWS CloudTrail
  • 22.
    Amazon Elasticsearch Serviceを使う利点 Easy to use Open-source compatible Secure Highly available AWS integrated Scalable
  • 23.
  • 24.
    Kinesis Firehose overview •Delivery Stream: AWSのリソースを活⽤ • Destination: Amazon Redshift Amazon S3 Amazon ES • Record: レコードをストリームにプッシュ 設定したデスティネーションに データをお届け
  • 25.
    Kinesis Firehose のデリバリーアーキテクチャ intermediate Amazon S3 bucket backup S3 bucket source records data source source records Amazon Elasticsearch Service Firehose delivery stream delivery
  • 26.
    [Coming soon!] Kinensis Firehoseのデリバリーアーキテクチャ with transformations intermediate Amazon S3 bucket backup S3 bucket source records data source source records Amazon Elasticsearch Service Firehose delivery stream transformed records transformed records transformation failure delivery failure ※指定したLambda Functionで変換
  • 27.
    Kinesis Firehose featuresfor ingest Serverless scale Error handling S3 Backup
  • 28.
  • 29.
    Kinesis Firehose のベストプラクティス • レイテンシーとトータルなスループットのバランスでbuffer size を決める スループットを上げるには⼩さいbuffer sizeが有利だが、コン カレンシーに注意が必要 • index をローテーションさせる よくあるのは Daily でのローテーション • デフォルトのストリームの制限 stream limits: 2,000 transactions/second 5,000 records/second, and 5 MB/second
  • 30.
    template および dataのアップロード
  • 31.
    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
  • 32.
    Mapping でデータのインデクシングをコントロール • Kibanaを使った可視化 は”not_analyzed”なテキストで良い 例えば、IPアドレスはドットで分割する必要ない •Mappingのテンプレートは_template APIを使って定義 全ての新しいインデックスに適⽤される • テンプレートはShard数の設定にも⽤ いる 0 delete 1,3,5 1 get 2,3,4,6 2 head 1,7,9 3 post 2,8 4 put 24 Index Writer
  • 33.
    Log データを検索ドキュメントに変換 d104.aa.net -- [01/Jul/1995:00:00:15 -0400] "GET /images/KSC-logosmall.gif HTTP/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}
  • 34.
  • 35.
  • 36.
    Kinesis FirehoseへのLogデータ送信の ベストプラクティス • セッティング⽤にテンプレートを使う •Shard数を設定する • 1つのノードに1つのアクティブなshard • 可視化のユースケースでは全てのフィールドは”not_analyzed“で良い
  • 37.
  • 38.
    Amazon ES aggregations •Buckets – ドキュメントをグループ化する際の項⽬ • Metrics – 集計後のBucketsのデータ Bucket: time Metric:count
  • 39.
    Kibanaで可視化する際のベストプラクティス • フィールドが not_analyzedであること • 可視化はbucketsおよびmetricsベース • Data Histogramには最初に x-axis を選択
  • 40.
    Run Elasticsearch inthe AWS cloud with Amazon Elasticsearch Service Use Kinesis Firehose to ingest data simply Kibana for monitoring, Elasticsearch queries for deeper analysisAmazon Elasticsearch Service
  • 41.
    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
  • 42.
    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
  • 43.
    Elastic{on} TOUR 東京2016 •Elasticsearch 5 / Kibana 5 • 2016年12⽉15⽇ • 私は抽選の結果、⾒送りで参加できない為、是⾮シェアやフィードバックを〜 https://www.elastic.co/jp/elasticon/tour/2016/tokyo