70
page Nov, 2013 12th ElasticSearch+Kibanaでログデータの検索と 視覚化を実現するテクニックと運用ノウハウ Kentaro Yoshida in 2ElasticSearch勉強会 1

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

Embed Size (px)

DESCRIPTION

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

Citation preview

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

page

Nov, 201312th

ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウKentaro Yoshida in 第2回 ElasticSearch勉強会

1

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

page

1. はじめに2. 自己紹介3. Kibana v34. システム構成例5. JDBCの利用6. 運用ノウハウ7. まとめ8. 次回予告

本日の流れ

2

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

page

1. はじめに

3

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

page

“Kibana” is a greatLog Visualization Tool!!

9

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

page

2. 自己紹介

10

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

page

自己紹介

11

•よしけんさん

• (株)リブセンス

• Web系インフラの研究開発エンジニア

好きなプロダクト

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

お知らせ

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

page

3. Kibana v3

14

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

page

Kibana v3

15

時間軸ベースのログの検索&視覚化ツールUIがやたら格好イイクエリ言語を覚える必要は無い時刻データを持つログファイルに特化している例えば、Webサーバのアクセスログや、アプリログ

Fluentd (Ruby) や、LogStash (JAVA) からElasticSearchに流し込む例えばFluentdの fluent-plugin-geoip を用いて、アクセス元のIPから求められる地域情報をKibanaの地図にプロットも出来ます

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

page

Kibana v3

16

Kibanaのインターフェースが触れるデモが公式に用意されていますhttp://demo.kibana.org/

次ページからの画面は次のURLからも参照できますhttp://bit.ly/HKa9vu

http://demo.kibana.org/#/dashboard/temp/_LsCoVEBQIe5zb5EMr4apA

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

page

Kibana v3

17

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

page

Kibana v3

18

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

page

Kibana v3

19

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

page

Kibana v3

20

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

page

Kibana v3

21

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

page

4. システム構成例

22

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

page

システム構成例

23

次のソフトウェアを組み合わせた構成の説明を行いますフロントエンド : Nginx

Kibanaの静的ファイル配信と認証検索システム:ElasticSearch

KibanaからのリクエストをNginxを通して処理Fluentdからのログデータの流し込み先ログアグリゲータ:Fluentd位置情報付与のために fluent-plugin-geoipElasticSearchへの出力のために fluent-plugin-elasticsearch

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

page

Nginx設定例

24

upstream elasticsearch { server 127.0.0.1:9200;}

server { listen *:8080 ; server_name kibana.myhost.org; access_log /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; }

location / { proxy_pass http://elasticsearch; proxy_read_timeout 90; }}

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

page

Fluentdとの連携サンプル

25

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 26: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

Fluentdとの連携サンプル

26

<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 27: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

Fluentdとの連携サンプル

27

他にも、こんなことも出来ます

fluent-plugin-munin を利用した、H/Wメトリクス情報の収集と検索

fluent-plugin-dstat を利用した、リソース監視情報の収集と検索

fluent-plugin-twitter を利用した、ツイートの収集と検索

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

page

Fluentdとの連携サンプル

28

もっといろいろなデータを入れたくなりませんか?

このように集計することで生きるデータはアクセスログに限りません

MySQLや Hadoop (TreasureData) のレコードにも埋もれています

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

page

5. JDBCの利用

29

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

page

JDBCの利用

30

今回利用するプラグイン

elasticsearch-river-jdbchttps://github.com/jprante/elasticsearch-river-jdbc

ElasticSearchにデータを流し込むプラグイン機構をRiverと言う

このプラグインは、RiverプラグインとしてJDBCドライバを使うもの

JDBCドライバがあればどんなDBにも接続できます

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

page

JDBCの利用

31

目的

Kibanaから容易に絞り込み・視覚化を行えるようにすること

注意

Kibanaから使えるよう、JOINせずに使える表に予め展開すること

プロダクションで使う際にはしっかりと動作検証を重ねましょう

2013年11月時点で、妙な挙動になる事が時々あります

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

page

JDBCの利用

32

インストール方法インストール後、ElasticSearchを再起動して反映curlコマンドでプラグイン一覧を確認すると良いでしょう

$ 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"

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

page

JDBCの利用

33

今回は次のミドルウェアとJDBCドライバで接続する方法を紹介

MySQL 5.6TreasureData (Hadoop)

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

page

JDBCの利用 MySQL編

34

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 35: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

JDBCの利用 MySQL編

35

_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 36: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

JDBCの利用 TreasureData編

36

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 37: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

JDBCの利用 TreasureData編

37

_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" : "[email protected]", "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 38: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

JDBCの利用 諸注意

38

https://github.com/elasticsearch/elasticsearch/issues/4089

elasticsearch-0.90.6には不具合が見つかっているため、0.90.5か、修正版の0.90.7をご利用ください。

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

page

6. 運用ノウハウ

39

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

page

Q. どんなログの視覚化に便利?

40

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

page

Q. どんなログの視覚化に便利?

41

例えばこのようなデータの視覚化にも利用できますエラーログの俯瞰(WEBサーバやDBサーバのエラーログ)ページの応答速度の推移(アクセスログの応答時間)n秒以上応答に掛かるページの推移(アクセスログの応答時間)HTTPステータスコードが404・500エラーとなった推移Googlebot等からのクロール状況ログイン成功数/ログイン失敗数自社広告の露出回数・クリック回数の推移などなど...

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

page

Q. 設定周りのTipsが知りたい

42

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

page

Q. 設定周りのTipsが知りたい

43

/etc/sysconfig/elasticsearch

ES_HEAP_SIZE潤沢に設定しましょう例えばメモリ4GBのサーバで、ElasticSearch専用ならば3GB程度

DATA_DIRデフォルトは/var/lib/elasticsearch//data/などの別のブロックデバイスを利用する場合に設定

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

page

Q. 設定周りのTipsが知りたい

44

/etc/elasticsearch/elasticsearch.yml

cluster.name初回起動時に作成する/var/lib/elasticsearch/以下のディレクトリ名にも利用するため、稼働中に変更する場合は停止の上、ディレクトリのリネームも同時に行いましょう

node.name設定しないと再起動する度に変わります

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

page

Q. 設定周りのTipsが知りたい

45

/etc/elasticsearch/elasticsearch.yml

discovery.zen.ping.multicast.enabled1台のみで単体稼働させる場合はfalseにします cluster.nameを変更しなくても良いので設定の共通化が可能

http.max_content_lengthFluentd等からバルク登録する際にデフォルトの100MBでは不足する場合には、ここの値を増やしますFluentd側の設定でいうbuffer_chunk_limitより大きくしましょう

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

page

Q. 9200番ポート空けたくないです

46

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

page

Q. 9200番ポート空けたくないです

47

リバースプロキシがあれば、外向きには80番ポートのみでも動かせますサーバのFirewallで、22番と80番しか空けられない状況でも使えますNginxの設定サンプルは、先ほど紹介したP.24を参照してください

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

page

Q. 便利プラグインが知りたい

48

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

page

Q. 便利プラグインが知りたい

49

管理系プラグイン:少なくともHQとbigdeskは入れましょうHQ:データのブラウズやインデックス管理が出来て便利 head:データの簡易ブラウズが出来て便利bigdesk:JXM的な負荷確認やクラスター管理に便利

$ 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

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

page

Q. バックアップ/リストア方法は?

50

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

page

Q. 便利な保守ツールが知りたい

52

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

page

Q. 便利な保守ツールが知りたい

53

指定日数より前の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 54: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

Q. JSONクエリは面倒です

54

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

page

Q. JSONクエリは面倒です

55

CLIから使うならelseqlhttps://github.com/raff/elseql SQLでElasticSearchに問い合わせできるPythonコマンド

Ruby・PHP等から使うならhttp://www.elasticsearch.org/guide/en/elasticsearch/client/community/current/clients.html

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

page

Q. Fluentd連携時のTipsが知りたい

56

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

page

Q. Fluentd連携時のTipsが知りたい

57

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 58: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

Q. Fluentd連携時のTipsが知りたい

58

/etc/elasticsearch/elasticsearch.ymlhttp.max_content_lengthデフォルトは100mbfluent-plugin-elasticsearchで指定する buffer_chunk_limitより大きくしましょう

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

page

7. まとめ

59

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

page

まとめ

60

ElasticSearch素晴らしい

無料で使えるダッシュボード、Kibanaとのコンビネーションは秀逸

引き続き活用し、情報を共有していきます

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

page

8. 次回予告

61

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

page

次回予告

62

ElasticSearchへMySQLレコードを非同期レプリケーションして、

日本語対応全文検索を行う夢を見た話~MySQL BinlogAPI挫折体験記~

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

お知らせ

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

お知らせ

Page 65: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Page 66: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Page 67: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Page 68: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Page 69: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ
Page 70: ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウ

page

Thanks!

70

ご清聴ありがとうございました。