fluent-plugin-geoip v0.0.4 をリリースしました。ElasticSearch+Kibanaの世界地図に位置情報をプロットするために必要なFluentdの設定サンプルも紹介します
fluent-plugin-geoip v0.0.4をリリースしました。
今回は主にGeoLiteCityデータベース参照パスの不備の修正とREADMEの加筆を行いました。
修正内容の説明に続けて、後半では次のお役立ちTipsの紹介も行います。
- インストール時のTips
- Fluentd + ElasticSearch + Kibana v3 を使う際のTips
変更内容概要
v0.0.3とv0.0.4の修正差分より紹介します。
- [不具合] GeoLiteCityデータベース参照パスの不備を修正
- [改善] 過剰なログ出力の削除
- [改善] Travis-CIを用いた自動テストへの対応
Tips紹介
ここで、ハマりやすい2つのTipsを紹介します。
- インストール時のTips
- Fluentd + ElasticSearch + Kibana v3 を使う際のTips
インストール時のTips
インストール時に依存ライブラリgeoip-cのコンパイルを行います。
その際にGeoIPのヘッダーファイルが利用するため、次のパッケージをインストールする必要があります。
# for RHEL/CentOS $ sudo yum install geoip-devel --enablerepo=epel # for Ubuntu/Debian $ sudo apt-get install libgeoip-dev # for MacOSX(brew) $ brew install geoip
なお、インストールを行わずにgem installを行うと次のようなエラーが発生します。
$ sudo /usr/lib64/fluent/ruby/bin/gem instal fluent-plugin-geoip Building native extensions. This could take a while... ERROR: Error installing fluent-plugin-geoip: ERROR: Failed to build gem native extension. /usr/lib64/fluent/ruby/bin/ruby extconf.rb checking for iconv_open() in iconv.h... yes checking for GeoIP_record_by_ipnum() in -lGeoIP... no you must have geoip c library installed! *** extconf.rb failed *** Could not create Makefile due to some reason, probably lack of necessary libraries and/or headers. Check the mkmf.log file for more details. You may need configuration options.
Fluentd + ElasticSearch + Kibana v3 を使う際のTips
画像引用元: http://matthiasnehlsen.com/blog/2013/07/09/transforming-logs-into-information/
この画像にあるように、ログデータを地図にプロットするためにはFluentdで収集したログデータに位置情報を付与する必要があります。
今回、次のようなユーザのアクセス元がhost
となる入力データがある場合を例に紹介します。
{ "domain":"yoursite.example.com" "host":"122.***.**.**" "server":"10.10.0.20" "ident":"-" "user":"-" "time":"27/Aug/2013:20:44:13 +0900" "method":"GET" "path":"/your/path?foo=bar" "protocol":"HTTP/1.1" "status":"200" "size":"205" "referer":"-" "agent":"Mozilla/5.0 Firefox" "response_time":"795" }
次に、Fluentdの設定サンプルです。何をしているかと言いますと、1つ目のmatchタグでGeoIPを用いた位置情報の付与を行い、2つ目のmatchタグでElasticSearchへドキュメントを追加します。
<match td.apache.access> type geoip # ユーザのIPアドレスが入っているキーを指定 geoip_lookup_key host # GeoIPのcountry_codeをgeoip_countryというキーで追加する enable_key_country_code geoip_country # td.からes.にタグの付け替えを行う remove_tag_prefix td. add_tag_prefix es. </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 flush_interval 10s </match>
このような設定でElasticSearchへデータを格納すれば、あとはKibanaにMapパーツを追加するのみです。
より詳細な情報は後日まとめる予定です。
あわせて読みたい過去記事
fluent-plugin-geoip に関する過去記事はこちらです。
IPアドレスを元に位置情報をリアルタイムに付与する fluent-plugin-geoip v0.0.1をリリースしました #fluentd - Y-Ken Studio
初の安定版 fluent-plugin-geoip v0.0.3 をリリースしました #fluentd - Y-Ken Studio
あとがき
欲しい機能・不具合等がございましたら、お気軽にフィードバックをお寄せ下さい。
pull-req大歓迎です。よろしくお願いします。