Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Using Elasticsearch for Searching Articles and Log Analysis

Dd9d954997353b37b4c2684f478192d3?s=47 Elastic Co
December 16, 2015

Using Elasticsearch for Searching Articles and Log Analysis

Yuri Umezaki | Nikkei | Tokyo | December 16, 2015

Dd9d954997353b37b4c2684f478192d3?s=128

Elastic Co

December 16, 2015
Tweet

More Decks by Elastic Co

Other Decks in Technology

Transcript

  1. 2015/12   1   2015/12/16 日本経済新聞社 梅崎裕利 0   記事検索とログ解析での


    Elasticsearch活用事例 自己紹介 •  日本経済新聞社デジタル編成局 •  梅崎 裕利 •  業務内容 §  アプリケーション開発 o DjangoとElasticsearchでの検索API o スマホアプリのバックエンドAPI §  サーバ管理 o EFKでアクセスログ可視化 o Ansible, Serverspec, Docker o Nginx, Varnish, HAProxy 1
  2. 2015/12   2   日本経済新聞社 •  1876年年創刊 •  紙と電⼦子合わせて300万部以上 2

    日本経済新聞 電子版 •  2010年年創刊 •  ⽇日本で初の本格的有料料電⼦子版サービス •  44万⼈人の有料料会員 •  複数デバイスで利利⽤用可能   3
  3. 2015/12   3   日本経済新聞 電子版 4 スマートフォン   紙面ビューアー

      スマートフォ ンウェブ版   PC   新聞   マーケット用 ウェブアプリ   ガラケー   Windows  8   Elasticsearchとわたし 5  
  4. 2015/12   4   Elasticsearchとの出会い •  2014年4月 入社 •  5月

    配属 §  DBの調査・検証をして社内で情報共有 §  検索の需要があったので、Solrを検証 §  ちょうど1.0が出て話題のElasticsearchも検証 o 国内ではログ可視化の話が多かったが、 コンテンツ検索にも使えそう •  6月 Elasticsearchの実験ページを作って上司に見せる •  9月 気がつくとElasticsearch関係がメインの仕事に 6 なぜElasticsearchを選んだのか •  ログ可視化とコンテンツ検索 両方に使える §  可視化ツールのKibana §  形態素解析や正規化など、便利なプラグイン •  REST API §  API構造が理解しやすい §  スキーマやクラスタの設定もAPIで可能 •  クラウド上でクラスタ構築・運用が容易 §  スケールアップ・スケールアウト §  ローリングアップデート •  高性能 §  15台クラスタで秒間9000リクエスト超 7
  5. 2015/12   5   Elasticsearchの利用箇所 •  大きく分けて2箇所で利用 •  記事検索 § 

    形態素解析(Kuromoji)、ngramを活用 §  検索回数は多いがデータはそれほどでない •  アクセスログ解析 §  FluentdとKibanaを利用して可視化 §  検索回数は少ないがデータ量、書き込みが多い 8 記事検索 9  
  6. 2015/12   6   記事検索 •  日本経済新聞 電子版の記事 §  データ数:約200万

    §  データサイズ: 約5GB §  更新頻度: 数千回/日 (ピークは300件/分 程度) §  リクエスト数: 秒間100回〜 •  新規開発アプリを中心に利用 10 記事検索API •  ElasticsearchとDjangoで作成 §  Django API o 有料記事など表示権限の管理 o Redisを利用して同義語展開やサジェスト情報の付与 o Elasticsearch-pyを利用 o 検索ログの保管・調査 §  マスターはMySQLに保存し、随時ESにも書き込み §  2015年5月から本番稼働中 11 Elas8csearch Django  API MySQL App
  7. 2015/12   7   記事検索用のスキーマ •  KuromojiやICU normalizerを利用 12 記事検索用のスキーマ

    •  一部はngramと形態素解析の両方でインデックス §  従来の検索エンジンと互換性を残すため •  タイトルなどはnot_analyzedのfieldsも用意 §  完全一致も利用するため 13
  8. 2015/12   8   記事検索ログもElasticsearch •  検索ログの可視化(独自ツール) §  検索機能の改善に o スロークエリ

    o キャッシュ率 o 検索数が多いのにヒットが0件のもの o ヒット数が少ない単語 o ヒット数が多すぎる単語 §  指標として o 検索ワードランキング o 急激にふえた検索ワード 14 記事検索の事例 •  もっと日経 §  新聞記事をスマホで撮ると、関連記事やバックナンバーなどを表示 15
  9. 2015/12   9   記事検索の事例 •  もっと日経の仕組み •  内部では記事をOCRしてElasticsearchで検索 • 

    課題 §  カメラ性能などが原因で、OCR精度はあまり高くない o 直接検索にかけると全然ヒットしない o OCR結果からキーワードを抽出する必要があった 16 記事検索の事例 §  形態素解析の転置インデックスを活用してキーフレーズAPI作成 o 単語の出現回数を特徴量に利用 o 重み付けしてクエリに反映 (≒TF-IDFのような機能) §  精度が大幅に向上 17
  10. 2015/12   10   記事検索-Elasticsearchで良かったこと •  新規アプリの開発速度が格段に上がった §  ドキュメントが豊富 § 

    内製化で、チューニングや機能追加が迅速に §  エイリアス活用でスキーマ変更が本番稼働中でも可能 •  クラウド上でサーバのスケーリングが容易 §  普段は3台(r3.xlarge) 高負荷時は15台程度 •  アップデートが簡単 §  現在は2.1.0が稼働中 §  V1からV2への移行を除き、シームレスにローリングアップデートできている 18 アクセスログ解析 19  
  11. 2015/12   11   アクセスログ解析 •  ApacheやNginxなどWebサーバのアクセスログ §  FluentdやLogstashで転送し、Elasticsearchに入れてKibanaで見る o いわゆるELK,

    EFK §  潜在的な問題や課題の確認、トラブル時の即時解析が可能に 20 サーバの構成 21 Elas8csearch Varnish LogServer LB WebServer  S3 Kibana •  形式はLTSVを利用 §  必要なログはすべてとる time, client_ip, method, host, path, query, agent, taken_time, status, res_bytes など •  集約サーバでuser agentやclient ipをパース §  ua-parser, woothee, geo_ip
  12. 2015/12   12   アクセスログ解析 •  秒間1万件超 •  1日約3億件 § 

    およそ1日120GB §  常時1週間分を保持 •  Elasticsearchはr3.xlargeを6台で運用 §  合計メモリ180GB(ElasticsearchのHeapは72GB) §  月20万円前後 §  スポットインスタンスを使えば月約3万円 §  24時間分のログ集計には10秒~1分程度かかる 22 Elasticsearchの構成 •  レプリカを作らず、サーバ1台に1つずつシャードを配置 §  書き込み時間やディスク使用量を減らすため §  注:1シャード20GB程度あるので、さらに4分割ほどしたほうが良いかも 23
  13. 2015/12   13   アクセスログ解析でわかること •  レスポンスに時間がかかっているページ §  遅いレスポンスが増加していないか § 

    改善すべき機能はどこか 24 アクセスログ解析でわかること •  レスポンスのステータス §  エラーやキャッシュミスが増えていないか 25
  14. 2015/12   14   アクセスログ解析でわかること •  どの地域からアクセスが多いか §  GEO IPを利用

    26 アクセスログ解析でわかること •  どのファイルが帯域を多く使ってるか §  レスポンスサイズの合計をパスごとに表示 27
  15. 2015/12   15   アクセスログ解析でわかること(実例) •  SVGファイルがgzipされていないことを発見。gzip対象に追加 §  1TB/月の削減 28

    アクセスログ解析でわかること •  バージョン更新時の状態確認 §  エラー状況や、更新できていないサーバがないか確認できる 29
  16. 2015/12   16   アクセスログ解析でわかること •  サーバ台数変更時の挙動 §  サーバ毎のリクエストで、ちゃんとロードバランスできてるか確認 30

    アクセスログ解析でわかること •  急にアクセスが増えたときの原因調査 §  フィルタを替えて異状な 項目を探す §  該当のログをフィルタして 詳細に分析 31
  17. 2015/12   17   アクセスログ解析 •  ES+Kibanaで改善した点 §  エンジニア秘伝のタレ(shell芸)で見ていたログが、 URLや画像で即座に社内共有できるようになった

    §  Kibana4で複数アグリゲーションが利用できるようになり 複雑な解析もできるようになった •  ログ解析できる人: 2人→6人以上 •  確認にかかる時間:10分~1日以上→1分 §  ブラウザ上で確認できるので、即対応できる §  ただし調べられる項目が増えたことにより、時間短縮はできていない o Kibanaは使うと楽しいので、気づいたら時間が… 32 まとめ 33  
  18. 2015/12   18   まとめ •  Elasticsearchは日経社内で広く活用中! §  記事検索 o 新規アプリやプロトタイプで利用

    §  アクセスログ可視化 o 一日3億件超のログを保存 §  検索ログ・行動ログ・スロークエリなどの分析 •  今後さらに利用範囲を拡大予定です §  既存の検索エンジン置き換え §  SenseやTimelionも活用 34 最後に •  日経電子版ではエンジニアを募集しています! §  ServerSide: Elasticsearch, Python §  Frontend: JavaScript §  NativeApp: iOS, Android •  dg_lab@nex.nikkei.co.jp 35
  19. 2015/12   19   Note 36 Note 37

  20. 2015/12   20   ご清聴ありがとうございました 38   www.elas8c.co   39