IPアドレスを元に位置情報をリアルタイムに付与する fluent-plugin-geoip v0.0.1をリリースしました #fluentd
FluentdのレコードにあるIPアドレスを元に位置情報を付与するプラグインをリリースしました!
これを使えば、Maxmind社の提供するGeoIPというデータベースを利用してリアルタイムに位置情報を付与できます。
パフォーマンスを重視するため、BufferedOutputをベースに、GeoIPのC拡張を利用した設計としました。
それでは早速使い方の紹介を行います。
使い方
インストール方法
# fluentdをシステム側に入れている場合 $ gem install fluent-plugin-geoip # td-agentを使っている場合 $ sudo /usr/lib64/fluent/ruby/bin/fluent-gem install fluent-plugin-geoip
設定例
<source> type forward </source> <match test.geoip> type copy <store> type stdout </store> <store> type geoip # IPアドレス判定に使うキーの名前を指定 geoip_lookup_key host # 判定結果を何というキーでハッシュにマージするか指定 enable_key_city city enable_key_latitude lat enable_key_longitude lon # マージ後のタグの付け替え指定 remove_tag_prefix test. add_tag_prefix debug. # 何秒おきにバッファしたレコードを処理するか指定 flush_interval 5s </store> </match> <match debug.**> type stdout </match>
動作テスト
echo '{"host":"66.102.9.80","message":"test"}' | fluent-cat test.geoip
以下のように位置情報が付与されます。
debug.geoip: {"host":"66.102.9.80","message":"test","city":"Mountain View","lat":37.4192008972168,"lon":-122.05740356445312}
いきさつ
@yoshi_ken ありがとうございます!元ネタは http://t.co/SUxBK4NiOx なのですが、お任せします!唯一リクエストがあるとすればスケーラビリティですね。logstashではgeoip->世界地図でトラフィックを俯瞰というユースケースが多いらしく(続
— Kiyoto Tamura (@kiyototamura) July 18, 2013
@yoshi_ken そういった世界地図での俯瞰をしたい人たちというのは、それ相応なトラフィックを捌いている人たちだと思うので。今回もそうですが、たくさんのプラグインのご提供ありがとうございます。この前もプレゼンのデモでout_twilioを使わせて頂きました!
— Kiyoto Tamura (@kiyototamura) July 18, 2013
良くありそうな質問
どのような位置情報をサポートしているの?
geoip-cで扱えるものは使えるようにしています。
https://github.com/mtodd/geoip
また、より詳細な利用例に関しては、本プラグインのリポジトリをご参照ください。
https://github.com/y-ken/fluent-plugin-geoip
データが取れなかった場合の値は?
nil です。
同封されている GeoIPデータベースの出所は?
CCライセンスに基づき、GeoLite Cityの無料ダウンロード版を同封しています。
http://dev.maxmind.com/geoip/legacy/geolite/
有料版のGeoIP City Databaseを使うとより高精度になるってホント?
はい。geoip_databaseというオプションで次のように指定することでより高精度な位置情報検出が利用できます。
geoip_database /path/to/GeoIPCityjpw.dat
設定ファイルの記述方法
enable_key_○○ という設定は改善の余地はあると思います。
良いアイディア有れば是非、例と共にご指摘ください。
今後
欲しい機能・不具合等がございましたら、お気軽にフィードバックをお寄せ下さい。
pull-req大歓迎です。