どうも!久しぶりのエントリーです。
今日も elasticsearch の勉強会に参加してきましたので、勉強会メモを共有します。イベントの詳細は、こちら↓からどうぞ。 大谷さん、登壇者の皆様、リクルートテクノロジーズ様、いつもありがとうございます!
http://elasticsearch.doorkeeper.jp/events/16837
Kibana4
Elasticsearch Inc. Jun Ohtani 大谷さん @johtani
機能紹介
- データの探索、探索したデータからグラフを作成、グラフを組み合わせてダッシュボードを作成
- より簡単に可視化できるように工夫している
- ダウンロードしてすぐ使えるようになっている
Kibana3 とのちがい
- Kibana3の特徴は1画面で完結している。HTML + JavaScript のみ。黒い!w
- 違い:Rubyによるバックエンドサーバーが用意された。
- インストールが簡単
- セキュリティ向上 Elasticsearch が公開されている必要ない
- ただし、Java必須 (JRuby)
- Elasticsearch1.4.0以降
- 検索条件、グラフが保存可能。
- Aggregationに対応。
まだ可視化できる種類が少ない。
Discover
- データの探索を行う画面、どんなフィールドがあるか、どんなデータかを探る。
- 検索条件の保存と、エクスポートが可能。
- Visualize
- 検索結果を元にグラフを作成、グラフのタイプを選択、X軸、Y軸の選択など。。
- Dashboard
- 保存したグラフの配置、リサイズ
- ダッシュボードの保存と共有。
- グラフの各種情報の表示
マイルストーン
- beta2
- グラフの種類に、エリアチャート、地図、テーブルの追加。
- グラフオプションが増えた。積み上げから横に並べる、全体を100%として並べるなど。
- beat3/4
- GitHub の Issue 「roadmap」ラベルを参照
- ハイライティング #1644
- Multi-value/Multiple Metric Aggs #1536
- インタラクティブフィルタリング
- Link to a specific document.
https://github.com/elasticsearch/kibana/labels/roadmap
関連記事。
手前味噌ながら関連記事です。kibana4 をつかってグラフを作るときのコツを紹介しています。facet が全て廃止になり、aggregation のみになったので、多少頭の回転が必要になります。
Kibana4 beta1 リリースきた!ハマりどこと、グラフの作例。Aggregation でグラフを作るには、ちょっと頭の体操が必要です。 - よしだのブログ
niconicoの検索を支えるElasticsearch
株式会社ドワンゴ 伊藤 祥 さん
統合検索基盤を作った理由
- 検索を通じて全サービスのPV、滞在時間の向上、リアルタイム検索の実現、新しい検索/レコメンド技術への対応
- サービス米に構築されている検索インフラの一本化 (現行Solr)
- 現時点では併用。
なぜ Elasticsearch なのか
- 要件は以下のとおり。
- ピークタイムの QPS で 1秒未満の応答時間、情報更新から1分以内の反映、全サービスの基盤御成り得ること
- Scale Out
- プロジェクト開始当時は、Solr 3 で検討していたが難しそうだった。
どう使っているのか?
- 検索エンジン、ログ基盤、サジェスト検索の辞書生成、など
- 検索対象はニコニコのコンテンツ
- 動画: 1100万件
- 生: 90万件
- 静画: 180万件
- など
アーキテクチャ
- 更新系、各サービスから更新メッセージを受けるレシーバーがおり、MQに放り込む。その後、定期的にMQからフェッチしてインデックスを更新。
- 検索:400QPS
- 一部のサービスのみ。最大 1500QPS が目標。
- 更新:2000万ドキュメント、360シャード
- 更新リクエストは 5000イベント/sec
ノード/インデックス設計
- ノードのロール訳はまだやっていない。
- 1サービス、1インデックス、1タイプ
- マッピングはフラット、ネストは特に使っていない。
- エイリアスを全インデックスで利用。裏でインデックスを更新して、裏表を入れ替える方式。
イベント:CUDメッセージ
- 追加、更新なので R はない。Read
- 独自に json でメッセージを定義。
- MQ は一日分ぐらいは貯められるようにしている
プラグイン
- 内製で、独自トークナイザー&フィルター、function score の計算用ロジックを用意 (ソートが若干特殊なそう)
Elasticsearch クラスタの成長
- 2012 〜 ver 0.19 から利用。
- 内製 Capistrano Web wrapper
- deploy start stop
- UI で操作できるので、引き継ぎなどが楽。
過去にあったトラブル
- Split Brain
- マスターノードが full gc で ping timeout 。他のノードがその間にマスタ化。
- 想定外のインデックス。知らぬ間にできていた。
- メンバーの操作ミス。auto_create_index:false などでブロック
- 想定外のフィールド
- フィールドは追加できるけど消せない。
- 想定外の json が送られてきていた。
- OutOfMemory
- 大きめのインデックスのレプリカシャードの1つが Initializing のまま停止
質問
- Q:ユーザー定義辞書はどのように作っているか?
- A:辞書は使っていない。サジェストでは使っている、こっちはニコニコ大百科のデータ。
- Q:プライマリのシャードが分散するような工夫はしているか?
- A:特に今のところは制御していない。total_shards_per_node の指定ぐらいはしている。
Elasticsearch at CrowdWorks
株式会社クラウドワークス 九岡 佑介 さん @mumoshu
- 検索対象 = 仕事
- elasticsearch を入れた結果、検索結果が一桁短くなった。
- 高可用性
- Elasticsearchが落ちた場合は、InnoDB FTS (MySQL) で代替。
- 一部ユーザにたけElasticsearch による検索を公開
- 非同期でインデックス更新
- サービス無停止でインデックス再構築
- 検索性の重視
- Dynamic Scripting オフ
- ネストも使っていない。
- インデックス更新は、部分更新
- ActiveRecord で追跡した、更新された部分だけ更新
- version 1.3.4、Found(ElasticsearchのPaaS)のサービスを利用している。
- Gems
- elasticsearch-rails
- elasticsearch-model
- crowdworks/gracefully
- など
gracefullyの紹介。
- 処理が失敗した時に、代替処理を呼び出す、を汎用化したライブラリ
- Graceful Degradation
- Elasticsearch でエラーが起きた場合、MySQL に切り替えて検索させることができる Gem
found について
- ダウンタイム無しでクラスタサイズ変更ができる
- ダウンタイム無しで Elasticsearch のアップデートも可能。
- 最小クラスタ RAM 256MB / Disk 2GB 〜 32GB / 256GB
- Web UI でクラスタ設定可能
- セキュリティ、httpsとBasic認証、ACL、read、read/write用ユーザーの作成ができる。
1分で作るElasticsearchプラグイン
株式会社エヌツーエスエム 菅谷 信介 さん
Elasticsearch のプラグインとは
- Elasticsearch の様々な機能を拡張可能。pluginコマンドでインストールできる。
- ネイティブなプラグインとサイトプラグインの2種類がある。
- ネイティブなプラグインは Java で作って、jar で配布する。
- Java7 / Maven 必要。mvn コマンドでひな形の作成〜パッケージ化まで可能。
- Maven Archetype は、1.x ごとに Archetype が変わるので作り直しが必要。
- Rest API 用のスケルトン、サービス用のスケルトン、River用のスケルトンなどが出力されるので、これを弄る。
codelibs の紹介
- Elasticsearch River Web、ウェブサイトをクロールしインデックス、Fessと同じクローラを利用。
- Elasticsearch Solr API、Solr のI/FでElasticsearchにアクセス可能。検索・更新に対応。Geoサーチには未対応。JavaBinフォーマットにも対応。SolrJもイケる!
- Elasticsearch Taste、Mahout Taste をベースのリコメンド機能。利用者/商品/嗜好データ管理。情報をインデックスで管理。
- Elasticsearch Reindexing、既存インデックスを再インデキシングする。インデックスをコピーする。
- Elasticsearch Data Format、Excel、CSV、バルクJSON形式で検索結果を出力する。
- Elasticsearch Script-base Search Template、スクリプトを利用したクエリテンプレート、標準の mustacheは穴埋め的なクエリーを組み立てることができるが、物足りない人向け
- Elasticsearch Handlebars Lang、Handlebars をクエリテンプレートで利用できるように追加できる
- Elasticsearch Velocity Lang、同上
- Elasticsearch MinHash、ドキュメントのハッシュ(MinHash)を計算、類似文書の検索などが可能。
- Elasticsaerch DynaRank、検索結果上位N件を並び替える。並び替えはスクリプト言語で記述できる。
- Elasticsearch QRCache、Solr でいうところの Query Result Cache のこと。インデックスがあまり更新されないケースに有効。
- Elasticsearch Event Hook、クラスタイベントが発生した時に指定したスクリプトを実行する。
Elasticsearch Auth
Elasticsearch Cluster Runner、Javaのコード上で Elasticsearch のクラスタを立ち上げる、ひとつの JVM に複数の Elasticsearch を起動することが可能。
まとめ
- Solr と比較しても plugin は作りやすく導入しやすい。
- REST プラグインから作ると分かりやすい。
- バージョンが上がると動かなくなる。
GISとして活用するElasticsearch
船戸 隆さん
- GIS = 地理情報を利用したシステム
- Ingress ! IntelMap の Ajax 通信を Rubyで 偽装して、Kibana に放り込む
- 最近厳しくなってデータは取れなくなった。
感想。
Kibana 4 は事前に触っていたので大きな驚きは、個人的にはなかったのですが、やはり Kibana 3 と比較して洗練されている印象を受けました。正式リリースが待ち遠しいですね! ドワンゴさん、クラウドワークスさんの事例もかなり踏み込んだ内容で、かなり参考になりました。ドワンゴさんの選定の時に Solr が落ちた理由を聞きたかったな〜。菅谷さんのプラグイン祭り、すごかったですね。早速いくつか使ってみようかな。
あと、Ingress は緑ですよ?みなさん。
高速スケーラブル検索エンジン ElasticSearch Server
- 作者: Rafal Kuc,Marek Rogozinski,株式会社リクルートテクノロジーズ,大岩達也,大谷純,兼山元太,水戸祐介,守谷純之介
- 出版社/メーカー: KADOKAWA/アスキー・メディアワークス
- 発売日: 2014/03/21
- メディア: 大型本
- この商品を含むブログ (3件) を見る
サーバ/インフラエンジニア養成読本 ログ収集~可視化編 [現場主導のデータ分析環境を構築!] (Software Design plus)
- 作者: 鈴木健太,吉田健太郎,大谷純,道井俊介
- 出版社/メーカー: 技術評論社
- 発売日: 2014/08/08
- メディア: 大型本
- この商品を含むブログを見る