Upload
kentaro-yoshida
View
30.748
Download
9
Embed Size (px)
DESCRIPTION
発表レポートブログはこちらです。 http://y-ken.hatenablog.com/entry/elasticsearch-meetup-vol2
Citation preview
page
Nov, 201312th
ElasticSearch+Kibanaでログデータの検索と視覚化を実現するテクニックと運用ノウハウKentaro Yoshida in 第2回 ElasticSearch勉強会
1
page
1. はじめに2. 自己紹介3. Kibana v34. システム構成例5. JDBCの利用6. 運用ノウハウ7. まとめ8. 次回予告
本日の流れ
2
page
1. はじめに
3
page 4
引用元 site:http://www.elasticsearch.org/ - Google 検索
page 5
引用元 site:http://www.elasticsearch.org/ - Google 検索
page 6
引用元 site:http://www.elasticsearch.org/ - Google 検索
page 7
引用元 site:http://www.elasticsearch.org/ - Google 検索
page 8
引用元 site:http://www.elasticsearch.org/ - Google 検索
page
“Kibana” is a greatLog Visualization Tool!!
9
page
2. 自己紹介
10
page
自己紹介
11
•よしけんさん
• (株)リブセンス
• Web系インフラの研究開発エンジニア
好きなプロダクト
お知らせ
page
3. Kibana v3
14
page
Kibana v3
15
時間軸ベースのログの検索&視覚化ツールUIがやたら格好イイクエリ言語を覚える必要は無い時刻データを持つログファイルに特化している例えば、Webサーバのアクセスログや、アプリログ
Fluentd (Ruby) や、LogStash (JAVA) からElasticSearchに流し込む例えばFluentdの fluent-plugin-geoip を用いて、アクセス元のIPから求められる地域情報をKibanaの地図にプロットも出来ます
page
Kibana v3
16
Kibanaのインターフェースが触れるデモが公式に用意されていますhttp://demo.kibana.org/
次ページからの画面は次のURLからも参照できますhttp://bit.ly/HKa9vu
http://demo.kibana.org/#/dashboard/temp/_LsCoVEBQIe5zb5EMr4apA
page
Kibana v3
17
page
Kibana v3
18
page
Kibana v3
19
page
Kibana v3
20
page
Kibana v3
21
page
4. システム構成例
22
page
システム構成例
23
次のソフトウェアを組み合わせた構成の説明を行いますフロントエンド : Nginx
Kibanaの静的ファイル配信と認証検索システム:ElasticSearch
KibanaからのリクエストをNginxを通して処理Fluentdからのログデータの流し込み先ログアグリゲータ:Fluentd位置情報付与のために fluent-plugin-geoipElasticSearchへの出力のために fluent-plugin-elasticsearch
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
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
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
Fluentdとの連携サンプル
27
他にも、こんなことも出来ます
fluent-plugin-munin を利用した、H/Wメトリクス情報の収集と検索
fluent-plugin-dstat を利用した、リソース監視情報の収集と検索
fluent-plugin-twitter を利用した、ツイートの収集と検索
page
Fluentdとの連携サンプル
28
もっといろいろなデータを入れたくなりませんか?
このように集計することで生きるデータはアクセスログに限りません
MySQLや Hadoop (TreasureData) のレコードにも埋もれています
page
5. JDBCの利用
29
page
JDBCの利用
30
今回利用するプラグイン
elasticsearch-river-jdbchttps://github.com/jprante/elasticsearch-river-jdbc
ElasticSearchにデータを流し込むプラグイン機構をRiverと言う
このプラグインは、RiverプラグインとしてJDBCドライバを使うもの
JDBCドライバがあればどんなDBにも接続できます
page
JDBCの利用
31
目的
Kibanaから容易に絞り込み・視覚化を行えるようにすること
注意
Kibanaから使えるよう、JOINせずに使える表に予め展開すること
プロダクションで使う際にはしっかりと動作検証を重ねましょう
2013年11月時点で、妙な挙動になる事が時々あります
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
JDBCの利用
33
今回は次のミドルウェアとJDBCドライバで接続する方法を紹介
MySQL 5.6TreasureData (Hadoop)
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
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
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
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
JDBCの利用 諸注意
38
https://github.com/elasticsearch/elasticsearch/issues/4089
elasticsearch-0.90.6には不具合が見つかっているため、0.90.5か、修正版の0.90.7をご利用ください。
page
6. 運用ノウハウ
39
page
Q. どんなログの視覚化に便利?
40
page
Q. どんなログの視覚化に便利?
41
例えばこのようなデータの視覚化にも利用できますエラーログの俯瞰(WEBサーバやDBサーバのエラーログ)ページの応答速度の推移(アクセスログの応答時間)n秒以上応答に掛かるページの推移(アクセスログの応答時間)HTTPステータスコードが404・500エラーとなった推移Googlebot等からのクロール状況ログイン成功数/ログイン失敗数自社広告の露出回数・クリック回数の推移などなど...
page
Q. 設定周りのTipsが知りたい
42
page
Q. 設定周りのTipsが知りたい
43
/etc/sysconfig/elasticsearch
ES_HEAP_SIZE潤沢に設定しましょう例えばメモリ4GBのサーバで、ElasticSearch専用ならば3GB程度
DATA_DIRデフォルトは/var/lib/elasticsearch//data/などの別のブロックデバイスを利用する場合に設定
page
Q. 設定周りのTipsが知りたい
44
/etc/elasticsearch/elasticsearch.yml
cluster.name初回起動時に作成する/var/lib/elasticsearch/以下のディレクトリ名にも利用するため、稼働中に変更する場合は停止の上、ディレクトリのリネームも同時に行いましょう
node.name設定しないと再起動する度に変わります
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
Q. 9200番ポート空けたくないです
46
page
Q. 9200番ポート空けたくないです
47
リバースプロキシがあれば、外向きには80番ポートのみでも動かせますサーバのFirewallで、22番と80番しか空けられない状況でも使えますNginxの設定サンプルは、先ほど紹介したP.24を参照してください
page
Q. 便利プラグインが知りたい
48
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
Q. バックアップ/リストア方法は?
50
page
Q. バックアップ/リストア方法は?
51
こちらの9枚目から記載されているhttps://speakerdeck.com/imotov/new-features-in-elasticsearch-v1-dot-0
rsyncでバックアップを行う方法http://karussell.wordpress.com/2011/07/10/how-to-backup-elasticsearch-with-rsync/
特定のインデックスのバックアップ・リストアhttp://qiita.com/toyama0919/items/ccd5eb9169967db54a76
page
Q. 便利な保守ツールが知りたい
52
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
Q. JSONクエリは面倒です
54
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
Q. Fluentd連携時のTipsが知りたい
56
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
Q. Fluentd連携時のTipsが知りたい
58
/etc/elasticsearch/elasticsearch.ymlhttp.max_content_lengthデフォルトは100mbfluent-plugin-elasticsearchで指定する buffer_chunk_limitより大きくしましょう
page
7. まとめ
59
page
まとめ
60
ElasticSearch素晴らしい
無料で使えるダッシュボード、Kibanaとのコンビネーションは秀逸
引き続き活用し、情報を共有していきます
page
8. 次回予告
61
page
次回予告
62
ElasticSearchへMySQLレコードを非同期レプリケーションして、
日本語対応全文検索を行う夢を見た話~MySQL BinlogAPI挫折体験記~
お知らせ
お知らせ
page
Thanks!
70
ご清聴ありがとうございました。