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

2014-11-28_Elasticsearch

 2014-11-28_Elasticsearch

社内でElasticsearchを導入した時の説明資料

SUZUKI Masashi

November 28, 2014
Tweet

More Decks by SUZUKI Masashi

Other Decks in Technology

Transcript

  1. Elasticsearch導入
    ͖ͣ͢·͞͠ @ ࣾ಺
    1

    View Slide

  2. もくじ
    弊社のログアーキテクチャのおさらい
    Elasticsearch導入の動機
    Elasticsearch/Kibana概要
    KibanaのDashboard
    2

    View Slide

  3. Elasticsearchの
    話の前におさらい
    3

    View Slide

  4. ログ回りアーキテクチャ
    おさらい
    4

    View Slide

  5. Fluentd
    http://www.fluentd.org/
    ログ収集ミドルウェア
    input pluginとoutput pluginを柔軟に組み合わせ
    ることができる
    ruby ware
    弊社ではtd-agentというパッケージを利用してい

    設定ファイルはFluentdConfプロジェクトで管理
    5

    View Slide

  6. td-agent
    https://github.com/treasure-data/
    td-agent
    fluentdの開発元のTreasure Dataが開
    発しているrubyとfluentdを同梱した
    パッケージ
    rubyを同梱しているのでsystem rubyに
    影響を受けず/与えず利用できる。
    6

    View Slide

  7. agent/collector
    Fluentdに2つの役割を持たせている
    agent
    ログを転送するサーバ
    collector
    ログを受信するサーバ
    7

    View Slide

  8. 収集しているログ
    ※FluentdConfプロジェクト参照
    error log
    apache/nginx/plack
    access log
    apache/nginx(reverse proxy,static)
    application log
    MF::FileLogger(社内用ログ出力モジュール)
    8

    View Slide

  9. ログの場所
    ログサーバの/var/log/td-agent/以下に保存される
    access log
    {application,static,reverse_proxy}/access/site/${VHOST}/
    エラーなaccess log
    {application,static,reverse_proxy}/access/status/${STATUS_CODE}/${VHOST}/
    error log
    plack/error/${APP_NAME}/
    {apache,nginx}/error/${HOSTNAME}/
    application log
    app/${APP_NAME}.${LOG_TYPE}/
    9

    View Slide

  10. 利用している主なplugin
    fluent-plugin-forest
    fluent-plugin-config-expander
    fluent-plugin-file_alternative
    fluent-plugin-parser
    fluent-plugin-rewrite-tag-filter
    fluent-plugin-record-reformer
    fluent-plugin-elasticsearch
    etc..
    10

    View Slide

  11. ログ回りアーキテクチャ
    おさらい
    11

    View Slide

  12. ログ回りアーキテクチャ
    おさらい
    agent
    1. ログをtailして読み込む
    2. collectorにログを転送する
    collector
    3. agentからのログを受信する
    4. タグに従って、ログを振り分ける
    5. 振り分けに従ってログをファイルに保存
    12

    View Slide

  13. これから
    13

    View Slide

  14. これから
    agent
    1. ログをtailして読み込む
    2. collectorにログを転送する
    collector
    3. agentからのログを受信する
    4. タグに従って、ログを振り分ける
    5. 振り分けに従ってログをファイルに保存
    5’Elasticsearchにログを転送する
    14

    View Slide

  15. そもそもElasticsearch
    を導入する動機
    15

    View Slide

  16. 動機
    ファイルに保存されてるのでアプリケー
    ション(web)からログの利用がしにく
    い。
    簡単にできるようにしたい。
    16

    View Slide

  17. ファイルめんどう
    Fluentdで集めたログは一定サイズで
    rotateされて横断検索がめんどう
    /var/log/td-agent/foo/bar/
    20141128_0.log.gz
    /var/log/td-agent/foo/bar/
    20141128_1.log.gz
    17

    View Slide

  18. ファイルめんどうcont..
    flash後はgzip圧縮されるのでflash前
    (buffer)と合わせて横断検索しにくい
    /var/log/td-agent/foo/bar/
    20141128_0.log.gz
    /var/log/td-agent/foo/bar/
    20141128_0924141251.log
    ※gzip圧縮しなくても良いのですが、そ
    うするとディスクの容量の問題が。
    18

    View Slide

  19. ファイルめんどうcont..
    ファイルなのでアプリケーションから
    参照するときはsshしないといけない
    19

    View Slide

  20. 検討して選んだのは
    Elasticsearch
    20

    View Slide

  21. 選ばれなかったものたち
    Google Big Query
    お金の問題と常時外にデータを投げるのに抵抗感
    Tresure Data
    同上
    InfluxDB
    ちょっと実績足りない
    MongoDB
    MySQL
    21

    View Slide

  22. Elasticsearch
    22

    View Slide

  23. Elasticsearch
    http://www.elasticsearch.org/
    Apache Luceneベースの全文検索エンジン
    スキーマレス
    型は存在、自動で型マッピングされるが事前に指定も可能
    クラスタリング
    スケーラブルだけど、今回は1台構成
    JVM
    JSON API
    Fluentd + Elasticsearch + Kibana3の実績多い
    Kibanaの存在が決め手
    23

    View Slide

  24. ElasticsearchConf
    Elasticsearch回りの設定管理レポジト

    設定ファイル
    KibanaのDashboard
    スキーママッピング
    各種管理スクリプト
    24

    View Slide

  25. Elasiticsearchに
    保存されるデータ
    application access log
    application/staticの404/500なaccess
    log
    application log
    25

    View Slide

  26. Kibana
    26

    View Slide

  27. Kinaba3
    ElasticsearchのWebフロントエンドツール
    JS + HTML
    簡単な検索集計であれば、Elasticsearch
    のAPIを直接使わないでも充分
    最新バージョンは4
    ただし3を使う
    27

    View Slide

  28. 利用方針
    基本的なログ検索に関してはKibanaで行

    本当に必要であれば、Elasiticsearch
    のAPIを利用しても良いが、Kibanaの
    Dashboardをいじる方が工数が少ない
    と思います。
    アクセスログアラートに関しては
    Elasticsearchの検索結果を元にするよう
    に修正予定
    28

    View Slide

  29. 注意点/制限
    ディスク容量と負荷の関連で全てのロ
    グが検索できるわけでは無いです
    現状1台のサーバで大量のログをさばい
    ているので、重いクエリを短時間で大
    量に発行すれば、普通にダウンします。
    29

    View Slide

  30. Kibanaの
    Dashboard構成要素
    Header
    ヘッダー部分
    Query
    検索条件
    Filter
    検索条件
    Row
    複数のPanelをまとめたもの
    Panel
    検索/集計結果
    30

    View Slide

  31. Header
    ヘッダーです。
    Dashboardの保存/読み込み、設定変更
    とかできます。
    31

    View Slide

  32. QueryとFilter
    QueryもFilterも検索条件
    Queryは複数の検索結果を比較するため
    に使用するもの
    Filterはそれぞれの検索結果に対して
    条件をつけるもの
    32

    View Slide

  33. 主なPanelの種類
    Histgram
    単位時間当たりのデータのカウント/最大値/平
    均値などをグラフ化できます
    Table
    実データに中身を参照できます
    Terms
    ファセット検索を用いてデータの集計ができま

    33

    View Slide

  34. Histgram
    34

    View Slide

  35. Table
    35

    View Slide

  36. Terms
    36

    View Slide

  37. そのたのPanel
    map
    bettermap
    goal
    hits
    sparklines
    stats
    trends
    37

    View Slide

  38. Kibanaの画面を
    見つつ説明
    38

    View Slide

  39. Dashboardの保存
    一時領域に保存
    企画者に検索結果を共有したいときとか
    ローカルに保存
    Elasiticsearchに保存
    Dashboard作り中に一時的に保存するときとか
    他のユーザに簡単に上書き保存されかねない
    ElasiticsearchConfのレポジトリに保存
    明示的に消さない限りは消えないので恒久的に使いたいもの
    とか
    39

    View Slide

  40. まとめ
    適切にログ設定して適切にログ出力さ
    れていれば、快適なログ検索ができる
    ようになった
    単純なログ検索/集計はKibanaでできる
    慣れるまでは、若干辛いのでDashboard
    をつかいこなしてみてくだしあ
    40

    View Slide

  41. リソース
    ドキュメント
    Elasticsearch
    Kibana
    書籍
    サーバ/インフラエンジニア養成読本 ログ収集
    ~可視化編
    高速スケーラブル検索エンジン ElasticSearch
    Server
    41

    View Slide

  42. 質疑応答
    42

    View Slide

  43. 43
    おわり

    View Slide