Y-Ken Studio

新しもの好きのデータエンジニアが四方山話をお届けします。

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の修正差分より紹介します。

Tips紹介

ここで、ハマりやすい2つのTipsを紹介します。

  • インストール時のTips
  • Fluentd + ElasticSearch + Kibana v3 を使う際のTips

インストール時のTips

f:id:yoshi-ken:20130904220322p:plain

インストール時に依存ライブラリ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

f:id:yoshi-ken:20130901151808p:plain

画像引用元: 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 に関する過去記事はこちらです。

あとがき

欲しい機能・不具合等がございましたら、お気軽にフィードバックをお寄せ下さい。
pull-req大歓迎です。よろしくお願いします。