Create a gist now

Instantly share code, notes, and snippets.

What would you like to do?
第6回elasticsearch勉強会

Aggregationあれこれ

Elasticsearch Inc. Jun Ohtaniさん @johtani この間のefk本の勉強会発表からaggs関連詳しくしたような感じかな

  • Aggregation機能はver 1.0から

Aggregationとは

  • Facetはdprecated!
    • 2.x系でなくなる予定
  • SQLでいうところの
select count(color)
from table
group by color
  • colorごとにBucketに入って、MetricでBucket内のドキュメントのデータをいろいろ計算できる
  • Metric
    • count
    • 文字数の平均
    • 最大値
    • 処理時間最大値、パーセンタイル
  • Facetだと1段しかできないところをAggsなら複数段(ツリー構造)でできる

Aggsの分散処理

  • 普段のQuery
    • 全てのShardにQueryを投げて、結果をマージして返す
  • Aggs
    • 同様に各ShardでAggregationの処理を行う
  • Aggregationは検索のクエリフェーズで、Shard毎に実行される

post_filterとaggs

  • post_filterを適用する前にaggsが走る(影響を受けない)

aggsの種類

  • termsは近似値
  • significant terms
    • 異常検知、レコメンドなどに利用(Uncommonly common)
    • 参考文献:あとで
  • range
    • date range, ipv4 range, geo
  • histogram
    • Bar Chart向け

metric

  • min/max/sum/avg/sum
    • stats:上記4つ
  • cardinality
    • SQLのDISTINCT
    • 近似値(HyperLogLog++)
      • 最大40000まで指定可能(precision_threshold * 8byteのメモリが必要)
  • parcentiles
    • compressionでメモリ使用料を調整可能
  • top-hits
    • グルーピングされた検索結果(Field Collapsing)
      • Googleでいうと、検索結果がドメインでまとめられたりするやつ
    • メモリ食うよ
  • scripted metrics
    • 1.4.0から
    • scriptによるMetrics

秒間3万の広告配信ログをElasticSearchでリアルタイム集計してきた戦いの記録

スライド

株式会社サイバーエージェント 山田直行さん @satully Smalgo(DSP)の人

RTBの説明は本業なので割愛

全体像

  • MySQL、Redis、Fluentd、S3、ElasticSearch
  • bidは数十台
  • SSPは十数社
  • Markサーバー→配信とは直接関係ないけどその他行動履歴等のタグ?
  • 秒間3万程度、月間4-500億bidリクエスト

選定の話

  • 当初はRedshift検討してたがやめた
    • 柔軟なスキーマ、スケールアウトが容易、リアルタイムとバッチでの両方の分析/集計ができること
      • 目標月間2000億リクエスト
    • kibanaが便利すぎた
      • ちょうど流行始めた時期

ESクラスタの構成

  • Search Nodes
    • master:false
    • data:false
    • 2nodes
    • r3.large
    • このサーバーについてはあまりたてる意味がなかった?
  • Coordinate Nodes
    • master:true, 2node, r3.large
  • Data Nodes
    • master:false
    • data:true
    • 28nodes
    • 12shard, 1repl
    • r3.xlarge/1GB SSD
  • バッチサーバー、kibana、RESTクライアント

データ構造とリアルタイム集計

  • bid, imp, click, convはそれぞれ紐付く
    • 1docにまとめてる(すげーな)
    • データ更新ごとにbid idをひいてそこにimp、click、convのkeyをupdate

運用してわかったこと

  • kibanaのクエリが時々えぐい
  • ピークに書き込みがすげー遅延する
  • 別DBのバッチと数値が合わなくて苦労
  • シャードの再配置がピークに被ると死ぬ
  • bidしたログとbidしてないログのindexを分けるのが負荷分散にすごく効いた
  • 1日のindexが750GBくらい
  • productionに入れないとわからないことも多い
    • だよねー

トラブルとその対応

  • アップデートでパフォーマンス向上した
  • SSDにしたら超改善した
  • 検索処理のキャッシュ
  • とはいえ最近はESと他のプロダクト?の棲み分けもはじめたっぽい

使ってるツール

  • head, bigdesk, HQ, Zabbix
    • zabbixは全般的な死活監視とFluentdの監視

設定

  • elasticsearch.ymlの設定変更はあんましパフォーマンスに効かなかった
  • アップグレードは新しいインスタンスを台数分用意した
    • ローリングアップグレードできるきがするけど?

johtaniさんより、中の人のindexingのパフォーマンスチューニングについての記事があるよとのこと。→これ

休憩トーク

  • logstash使ってる人→いない…
    • Winで動くかも(jrubyとgolang(forwarder)つかってる)
  • kibanaはもうしばらくするとaggsに対応すると思う

Elasticsearch 日本語スキーマレス環境構築と、ついでに多言語対応

スライド

ナレッジワークス株式会社 木戸国彦さん @9215 メモるのむずいからスライドの降臨を希望

マッピング定義めんどくさくないですか?

  • スキーマレスがESの強みである
    • が、マッピング定義があるよね
  • フィールド毎に考えることが多い
  • 状況によって変化する目的
    • それによってマッピング定義も変化する

Elasticsearchは便利な仕組みがある

demo

  • 多言語対応はデフォルトのアナライザーを利用
  • language keyをみて各言語に対応したアナライザーを利用できる?
  • 性格に絞り込みたいときはrawフィールド、検索漏れを少なくしたいときはsubstringを使うとかを共有

ルール化と自動化

  • dynamic template
    • フィールド名のパターン、マッチング方式、JSONフォーマットタイプ、マッピング定義
    • 最初にパターンにマッチしたマッピングが定義される
  • index template
    • indexパターン毎に定義できる
    • config/templates以下に保存する
    • ノードの再起動は必要ない
    • 新規で作成したインデックスのみに適用される

おしらせ

アンケートこたえよう→これ

elasticsearchソースコードを読みはじめてみた

@furandon_pig さん

  • スライドもういっかい見たいな

  • 前提:ソースコードから理解しようとするのは間違いですよ。

  • 手続き指向おじさん(仮)には少し慣れが必要なソースコード

  • johtaniさんより

    • RestControllerを見ると、リクエストを処理する部分が見られるよ
    • リクエストのパラメータで検索して追っかけてる
    • ソースコードリーディングやろうかな
      • 個人的にはぜひ参加したい

LT

reroute APIを使用してシャード配置を制御する

株式会社富士通ソフトウェアテクノロジーズ 滝田聖己さん @pisatoshi

スライド

  • Reroute Commands
    • Allocate
      • 未配置のshardを指定したNodeに配置
    • Cancel
      • 配置済みのshardを未配置に
    • Move
      • 文字通りshardの移動
  • 動かす前に自動再配置を抑止しましょう
  • Bonsai Is Cool!

検索のダウンタイム0でバックアップからIndexをリストアする方法

株式会社ドワンゴモバイル 西田和史さん

スライド

  • 1.0移行で追加したsnapshot/restore apiの話
  • 戻すときにCloseするのを避ける
  • Indes Aliases機能とリストア時のリネームを組み合わせて無停止で復元
  • 大変実践的な内容だ
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment