ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

55,668 views

Published on

発表レポートブログはこちらです。
http://y-ken.hatenablog.com/entry/elasticsearch-meetup-vol2

Published in: Technology
0 Comments
201 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
55,668
On SlideShare
0
From Embeds
0
Number of Embeds
8,634
Actions
Shares
0
Downloads
357
Comments
0
Likes
201
Embeds 0
No embeds

No notes for slide

ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

  1. 1. 12th Nov, 2013 ElasticSearch+Kibanaでログデータの検索と 視覚化を実現するテクニックと運用ノウハウ Kentaro Yoshida in 第2回 ElasticSearch勉強会 page 1
  2. 2. 1. はじめに 2. 自己紹介 本日の流れ 3. Kibana v3 4. システム構成例 5. JDBCの利用 6. 運用ノウハウ 7. まとめ 8. 次回予告 page 2
  3. 3. 1. はじめに page 3
  4. 4. 引用元 site:http://www.elasticsearch.org/ - Google 検索 page 4
  5. 5. 引用元 site:http://www.elasticsearch.org/ - Google 検索 page 5
  6. 6. 引用元 site:http://www.elasticsearch.org/ - Google 検索 page 6
  7. 7. 引用元 site:http://www.elasticsearch.org/ - Google 検索 page 7
  8. 8. 引用元 site:http://www.elasticsearch.org/ - Google 検索 page 8
  9. 9. “Kibana” is a great Log Visualization Tool!! page 9
  10. 10. 2. 自己紹介 page 10
  11. 11. 自己紹介 • よしけんさん • (株)リブセンス • Web系インフラの 研究開発エンジニア 好きなプロダクト page 11
  12. 12. お知らせ
  13. 13. 3. Kibana v3 page 14
  14. 14. Kibana v3 時間軸ベースのログの検索&視覚化ツール UIがやたら格好イイ クエリ言語を覚える必要は無い 時刻データを持つログファイルに特化している 例えば、Webサーバのアクセスログや、アプリログ Fluentd (Ruby) や、LogStash (JAVA) からElasticSearchに流し込む 例えばFluentdの fluent-plugin-geoip を用いて、アクセス元のIP から求められる地域情報をKibanaの地図にプロットも出来ます page 15
  15. 15. Kibana v3 Kibanaのインターフェースが触れるデモが公式に用意されています http://demo.kibana.org/ 次ページからの画面は次のURLからも参照できます http://bit.ly/HKa9vu http://demo.kibana.org/#/dashboard/temp/ _LsCoVEBQIe5zb5EMr4apA page 16
  16. 16. Kibana v3 page 17
  17. 17. Kibana v3 page 18
  18. 18. Kibana v3 page 19
  19. 19. Kibana v3 page 20
  20. 20. Kibana v3 page 21
  21. 21. 4. システム構成例 page 22
  22. 22. システム構成例 次のソフトウェアを組み合わせた構成の説明を行います フロントエンド : Nginx Kibanaの静的ファイル配信と認証 検索システム:ElasticSearch KibanaからのリクエストをNginxを通して処理 Fluentdからのログデータの流し込み先 ログアグリゲータ:Fluentd 位置情報付与のために fluent-plugin-geoip ElasticSearchへの出力のために fluent-plugin-elasticsearch page 23
  23. 23. Nginx設定例 upstream elasticsearch { server 127.0.0.1:9200; } server { listen server_name access_log *:8080 ; kibana.myhost.org; /var/log/nginx/kibana.myhost.org.access.log; satisfy any; allow 192.168.0.0/16; allow 10.0.0.0/8; allow 127.0.0.1; deny all; auth_basic "Restricted"; auth_basic_user_file /etc/nginx/conf.d/kibana.myhost.org.htpasswd; location /kibana/ { root /usr/share/nginx/www; index index.html index.htm; } } page 24 location / { proxy_pass http://elasticsearch; proxy_read_timeout 90; }
  24. 24. Fluentdとの連携サンプル Apacheのアクセスログの IPアドレスを基に地域情報の抽出を行う fluent-plugin-geoipを利用する MaxMind社が提供しているgeoipデータベースを用いる 上記のFluentd Pluginには無償版のGeoLiteCityが同封されているのでそ のまま使えるが、有償版のデータベースファイルも利用可能 gem ‘geoip-c’を利用するため、事前にインストールする必要がある RHEL/CentOS:GeoIP-devel, Ubuntu/Debian:libgeoip-dev 参考 http://y-ken.hatenablog.com/entry/fluent-plugin-geoip-v0.0.4 page 25
  25. 25. Fluentdとの連携サンプル <source> type forward </source> <source> type monitor_agent bind 0.0.0.0 port 24220 </source> <match apache.access> type geoip add_tag_prefix es. geoip_lookup_key host enable_key_country_code geoip_country </match> <match es.apache.access> type elasticsearch host localhost port 9200 type_name apache include_tag_key true tag_key @log_name logstash_format true logstash_prefix apache flush_interval 10s buffer_type file buffer_path /var/log/td-agent/buffer/es buffer_chunk_limit 100m buffer_queue_limit 500 retry_wait 10s </match> page 26
  26. 26. Fluentdとの連携サンプル 他にも、こんなことも出来ます fluent-plugin-munin を利用した、H/Wメトリクス情報の収集と検索 fluent-plugin-dstat を利用した、リソース監視情報の収集と検索 fluent-plugin-twitter を利用した、ツイートの収集と検索 page 27
  27. 27. Fluentdとの連携サンプル もっといろいろなデータを入れたくなりませんか? このように集計することで生きるデータはアクセスログに限りません MySQLや Hadoop (TreasureData) のレコードにも埋もれています page 28
  28. 28. 5. JDBCの利用 page 29
  29. 29. JDBCの利用 今回利用するプラグイン elasticsearch-river-jdbc https://github.com/jprante/elasticsearch-river-jdbc ElasticSearchにデータを流し込むプラグイン機構をRiverと言う このプラグインは、RiverプラグインとしてJDBCドライバを使うもの JDBCドライバがあればどんなDBにも接続できます page 30
  30. 30. JDBCの利用 目的 Kibanaから容易に絞り込み・視覚化を行えるようにすること 注意 Kibanaから使えるよう、JOINせずに使える表に予め展開すること プロダクションで使う際にはしっかりと動作検証を重ねましょう 2013年11月時点で、妙な挙動になる事が時々あります page 31
  31. 31. JDBCの利用 インストール方法 インストール後、ElasticSearchを再起動して反映 curlコマンドでプラグイン一覧を確認すると良いでしょう $ $ $ $ page 32 cd /usr/share/elasticsearch sudo ./bin/plugin --install river-jdbc -url http://bit.ly/1iovWV9 sudo /etc/init.d/elasticsearch restart curl "http://localhost:9200/_nodes?pretty&plugin=true"
  32. 32. JDBCの利用 今回は次のミドルウェアとJDBCドライバで接続する方法を紹介 MySQL 5.6 TreasureData (Hadoop) page 33
  33. 33. JDBCの利用 MySQL編 JDBCドライバをダウンロードします http://dev.mysql.com/downloads/connector/j/ ダウンロードした.jarファイルを次のディレクトリへ格納します $ sudo cp -a mysql-connector-java-5.1.27-bin.jar /usr/share/ elasticsearch/plugins/river-jdbc/ ElasticSearchを再起動して読み込ませます $ sudo /etc/init.d/elasticsearch restart page 34
  34. 34. JDBCの利用 MySQL編 _riverに設定を登録します curl -XPUT 'localhost:9200/_river/mysql_jdbc_river/_meta' -d '{ "type" : "jdbc", "jdbc" : { "driver" : "com.mysql.jdbc.Driver", "url" : "jdbc:mysql://localhost:3306/test", "user" : "your_mysql_user", "password" : "your_mysql_password", "strategy" : "oneshot", "sql" : "select * from orders", }, "index" : { "index" : "jdbc_mysql", "type" : "test_orders" } }' page 35
  35. 35. JDBCの利用 TreasureData編 JDBCドライバをダウンロードします http://docs.treasure-data.com/articles/jdbc-driver ダウンロードした.jarファイルを次のディレクトリへ格納します $ sudo cp -a td-jdbc-0.2.2-jar-with-dependencies.jar /usr/share/ elasticsearch/plugins/river-jdbc/ ElasticSearchを再起動して読み込ませます $ sudo /etc/init.d/elasticsearch restart page 36
  36. 36. JDBCの利用 TreasureData編 _riverに設定を登録します $ curl -XPUT 'localhost:9200/_river/td_jdbc_river/_meta' -d '{ "type" : "jdbc", "jdbc" : { "driver" : "com.mysql.jdbc.Driver", "url" : "jdbc:td://api.treasure-data.com/mywebsite", "user" : "foo@example.com", "password" : "your_td_password", "strategy" : "oneshot", "sql" : "select v['''member_id'''] as `_id`, v['''action'''] AS action from foo", }, "index" : { "index" : "jdbc_td", "type" : "test_action" } }' page 37
  37. 37. JDBCの利用 諸注意 elasticsearch-0.90.6には不具合が見つかっているため、 0.90.5か、修正版の0.90.7をご利用ください。 https://github.com/elasticsearch/elasticsearch/issues/4089 page 38
  38. 38. 6. 運用ノウハウ page 39
  39. 39. Q. どんなログの視覚化に便利? page 40
  40. 40. Q. どんなログの視覚化に便利? 例えばこのようなデータの視覚化にも利用できます エラーログの俯瞰(WEBサーバやDBサーバのエラーログ) ページの応答速度の推移(アクセスログの応答時間) n秒以上応答に掛かるページの推移(アクセスログの応答時間) HTTPステータスコードが404・500エラーとなった推移 Googlebot等からのクロール状況 ログイン成功数/ログイン失敗数 自社広告の露出回数・クリック回数の推移 などなど... page 41
  41. 41. Q. 設定周りのTipsが知りたい page 42
  42. 42. Q. 設定周りのTipsが知りたい /etc/sysconfig/elasticsearch ES_HEAP_SIZE 潤沢に設定しましょう 例えばメモリ4GBのサーバで、ElasticSearch専用ならば3GB程度 DATA_DIR デフォルトは/var/lib/elasticsearch/ /data/などの別のブロックデバイスを利用する場合に設定 page 43
  43. 43. Q. 設定周りのTipsが知りたい /etc/elasticsearch/elasticsearch.yml cluster.name 初回起動時に作成する/var/lib/elasticsearch/以下のディレクトリ 名にも利用するため、稼働中に変更する場合は停止の上、ディレク トリのリネームも同時に行いましょう node.name 設定しないと再起動する度に変わります page 44
  44. 44. Q. 設定周りのTipsが知りたい /etc/elasticsearch/elasticsearch.yml discovery.zen.ping.multicast.enabled 1台のみで単体稼働させる場合はfalseにします cluster.nameを変更しなくても良いので設定の共通化が可能 http.max_content_length Fluentd等からバルク登録する際にデフォルトの100MBでは 不足する場合には、ここの値を増やします Fluentd側の設定でいうbuffer_chunk_limitより大きくしましょう page 45
  45. 45. Q. 9200番ポート空けたくないです page 46
  46. 46. Q. 9200番ポート空けたくないです リバースプロキシがあれば、外向きには80番ポートのみでも動かせます サーバのFirewallで、22番と80番しか空けられない状況でも使えます Nginxの設定サンプルは、先ほど紹介したP.24を参照してください page 47
  47. 47. Q. 便利プラグインが知りたい page 48
  48. 48. Q. 便利プラグインが知りたい 管理系プラグイン:少なくともHQとbigdeskは入れましょう HQ:データのブラウズやインデックス管理が出来て便利 head:データの簡易ブラウズが出来て便利 bigdesk:JXM的な負荷確認やクラスター管理に便利 $ $ $ $ page 49 cd /usr/share/elasticsearch sudo ./bin/plugin --install royrusso/elasticsearch-HQ sudo ./bin/plugin --install mobz/elasticsearch-head sudo ./bin/plugin --install lukas-vlcek/bigdesk
  49. 49. Q. バックアップ/リストア方法は? page 50
  50. 50. Q. バックアップ/リストア方法は? こちらの9枚目から記載されている https://speakerdeck.com/imotov/new-features-inelasticsearch-v1-dot-0 rsyncでバックアップを行う方法 http://karussell.wordpress.com/2011/07/10/how-to-backupelasticsearch-with-rsync/ 特定のインデックスのバックアップ・リストア http://qiita.com/toyama0919/items/ccd5eb9169967db54a76 page 51
  51. 51. Q. 便利な保守ツールが知りたい page 52
  52. 52. Q. 便利な保守ツールが知りたい 指定日数より前のLogStash形式のインデックスを削除するツール Kibanaを利用するなら定期実行する必要があります logstash-%{+YYYY.MM.dd} (例:logstash-2013.11.12) といったインデックスが日時で作られます どちらも便利ですが、prefix文字列の指定が出来る後者がお勧めです CentOS 6.4にて動作確認済みです https://github.com/bloonix/logstash-delete-index https://github.com/crashdump/logstash-elasticsearch-scripts page 53
  53. 53. Q. JSONクエリは面倒です page 54
  54. 54. Q. JSONクエリは面倒です CLIから使うなら elseql https://github.com/raff/elseql SQLでElasticSearchに問い合わせできるPythonコマンド Ruby・PHP等から使うなら http://www.elasticsearch.org/guide/en/elasticsearch/client/ community/current/clients.html page 55
  55. 55. Q. Fluentd連携時のTipsが知りたい page 56
  56. 56. Q. Fluentd連携時のTipsが知りたい fluent-plugin-elasticsearch のバッファ設定に注意 計画停止時の未転送ログ消失を避けるため、buffer_type fileを推奨 ElasticSearchのメンテナンス中に転送待ちログが溢れないように、 buffer_chunk_limit と buffer_queue_limitのチューニングが必要 例えば1分100MBのログ流量で30分メンテナンスするならば、 次の式を満たす必要があります。 3000MB < buffer_chunk_limit * buffer_queue_limit 最大でbuffer_queue_limitの数だけファイルが開いたままの状態とな るため、 Too many open files エラーに気をつけましょう page 57
  57. 57. Q. Fluentd連携時のTipsが知りたい /etc/elasticsearch/elasticsearch.yml http.max_content_length デフォルトは100mb fluent-plugin-elasticsearchで指定する buffer_chunk_limitより大 きくしましょう page 58
  58. 58. 7. まとめ page 59
  59. 59. まとめ ElasticSearch素晴らしい 無料で使えるダッシュボード、Kibanaとのコンビネーションは秀逸 引き続き活用し、情報を共有していきます page 60
  60. 60. 8. 次回予告 page 61
  61. 61. 次回予告 ElasticSearchへMySQLレコードを 非同期レプリケーションして、 日本語対応全文検索を行う夢を見た話 ∼MySQL BinlogAPI挫折体験記∼ page 62
  62. 62. お知らせ
  63. 63. お知らせ
  64. 64. Thanks! ご清聴ありがとうございました。 page 70

×