社内でElasticsearchを導入した時の説明資料
Elasticsearch導入͖ͣ͢·͞͠ @ ࣾ1
View Slide
もくじ弊社のログアーキテクチャのおさらいElasticsearch導入の動機Elasticsearch/Kibana概要KibanaのDashboard2
Elasticsearchの話の前におさらい3
ログ回りアーキテクチャおさらい4
Fluentdhttp://www.fluentd.org/ログ収集ミドルウェアinput pluginとoutput pluginを柔軟に組み合わせることができるruby ware弊社ではtd-agentというパッケージを利用している設定ファイルはFluentdConfプロジェクトで管理5
td-agenthttps://github.com/treasure-data/td-agentfluentdの開発元のTreasure Dataが開発しているrubyとfluentdを同梱したパッケージrubyを同梱しているのでsystem rubyに影響を受けず/与えず利用できる。6
agent/collectorFluentdに2つの役割を持たせているagentログを転送するサーバcollectorログを受信するサーバ7
収集しているログ※FluentdConfプロジェクト参照error logapache/nginx/plackaccess logapache/nginx(reverse proxy,static)application logMF::FileLogger(社内用ログ出力モジュール)8
ログの場所ログサーバの/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 logplack/error/${APP_NAME}/{apache,nginx}/error/${HOSTNAME}/application logapp/${APP_NAME}.${LOG_TYPE}/9
利用している主なpluginfluent-plugin-forestfluent-plugin-config-expanderfluent-plugin-file_alternativefluent-plugin-parserfluent-plugin-rewrite-tag-filterfluent-plugin-record-reformerfluent-plugin-elasticsearchetc..10
ログ回りアーキテクチャおさらい11
ログ回りアーキテクチャおさらいagent1. ログをtailして読み込む2. collectorにログを転送するcollector3. agentからのログを受信する4. タグに従って、ログを振り分ける5. 振り分けに従ってログをファイルに保存12
これから13
これからagent1. ログをtailして読み込む2. collectorにログを転送するcollector3. agentからのログを受信する4. タグに従って、ログを振り分ける5. 振り分けに従ってログをファイルに保存5’Elasticsearchにログを転送する14
そもそもElasticsearchを導入する動機15
動機ファイルに保存されてるのでアプリケーション(web)からログの利用がしにくい。簡単にできるようにしたい。16
ファイルめんどうFluentdで集めたログは一定サイズでrotateされて横断検索がめんどう/var/log/td-agent/foo/bar/20141128_0.log.gz/var/log/td-agent/foo/bar/20141128_1.log.gz17
ファイルめんどう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
ファイルめんどうcont..ファイルなのでアプリケーションから参照するときはsshしないといけない19
検討して選んだのはElasticsearch20
選ばれなかったものたちGoogle Big Queryお金の問題と常時外にデータを投げるのに抵抗感Tresure Data同上InfluxDBちょっと実績足りないMongoDBMySQL21
Elasticsearch22
Elasticsearchhttp://www.elasticsearch.org/Apache Luceneベースの全文検索エンジンスキーマレス型は存在、自動で型マッピングされるが事前に指定も可能クラスタリングスケーラブルだけど、今回は1台構成JVMJSON APIFluentd + Elasticsearch + Kibana3の実績多いKibanaの存在が決め手23
ElasticsearchConfElasticsearch回りの設定管理レポジトリ設定ファイルKibanaのDashboardスキーママッピング各種管理スクリプト24
Elasiticsearchに保存されるデータapplication access logapplication/staticの404/500なaccesslogapplication log25
Kibana26
Kinaba3ElasticsearchのWebフロントエンドツールJS + HTML簡単な検索集計であれば、ElasticsearchのAPIを直接使わないでも充分最新バージョンは4ただし3を使う27
利用方針基本的なログ検索に関してはKibanaで行う本当に必要であれば、ElasiticsearchのAPIを利用しても良いが、KibanaのDashboardをいじる方が工数が少ないと思います。アクセスログアラートに関してはElasticsearchの検索結果を元にするように修正予定28
注意点/制限ディスク容量と負荷の関連で全てのログが検索できるわけでは無いです現状1台のサーバで大量のログをさばいているので、重いクエリを短時間で大量に発行すれば、普通にダウンします。29
KibanaのDashboard構成要素Headerヘッダー部分Query検索条件Filter検索条件Row複数のPanelをまとめたものPanel検索/集計結果30
Headerヘッダーです。Dashboardの保存/読み込み、設定変更とかできます。31
QueryとFilterQueryもFilterも検索条件Queryは複数の検索結果を比較するために使用するものFilterはそれぞれの検索結果に対して条件をつけるもの32
主なPanelの種類Histgram単位時間当たりのデータのカウント/最大値/平均値などをグラフ化できますTable実データに中身を参照できますTermsファセット検索を用いてデータの集計ができます33
Histgram34
Table35
Terms36
そのたのPanelmapbettermapgoalhitssparklinesstatstrends37
Kibanaの画面を見つつ説明38
Dashboardの保存一時領域に保存企画者に検索結果を共有したいときとかローカルに保存Elasiticsearchに保存Dashboard作り中に一時的に保存するときとか他のユーザに簡単に上書き保存されかねないElasiticsearchConfのレポジトリに保存明示的に消さない限りは消えないので恒久的に使いたいものとか39
まとめ適切にログ設定して適切にログ出力されていれば、快適なログ検索ができるようになった単純なログ検索/集計はKibanaでできる慣れるまでは、若干辛いのでDashboardをつかいこなしてみてくだしあ40
リソースドキュメントElasticsearchKibana書籍サーバ/インフラエンジニア養成読本 ログ収集~可視化編高速スケーラブル検索エンジン ElasticSearchServer41
質疑応答42
43おわり