ログってなんぼ

日々のメモです

TreasureData:fluent-plugin-geoipでGEO情報とともにデータを送る

fluent-plugin-geoipでIPアドレスから経度緯度を取ってTreasureDataに送るメモです。

y-ken/fluent-plugin-geoip はてなブックマーク - y-ken/fluent-plugin-geoip

テストなので実用性低めですがシンプルにやりました。実際にはもっといろいろな情報取らないと仕事じゃ使えないです。。。

時間とアクセス元IPだけを取得するログ

httpd.conf
LogFormat "%{%s}tt%h" accesslog
CustomLog /var/log/httpd/test/access.log accesslog

時間をunixtime、タブ区切りでアクセス元IPを記録するログ形式を定義 上記はELB経由の鯖だと

LogFormat "%{%s}tt%{X-Forwarded-For}i" accesslog
CustomLog /var/log/httpd/test/access.log accesslog

こんなかんじですかね

ログ確認してみる

# tail access.log
1401245434      49.96.238.129
1401245434      126.31.84.207
1401245434      49.96.238.129
1401245435      58.0.176.10
1401245435      27.127.179.100
1401245435      124.102.63.159
1401245435      59.147.2.139
1401245435      219.119.6.182
1401245435      119.105.168.229
1401245435      118.106.70.180

okですな

TreasureDataへの送信

TreasureDataへ送信する前にIPアドレスからGEO情報を取得してくっつけます


  type tail

  path /var/log/httpd/test/access.log
  pos_file /tmp/test.access.log.pos

  format tsv
  keys date,host
  time_key date
  time_format %s

  tag geo.test.accesslog

  refresh_interval 10



  type geoip

  geoip_lookup_key host

  
    lat          ${latitude['host']}
    lon          ${longitude['host']}
  

  remove_tag_prefix geo.
  add_tag_prefix send.



  type tdlog
  apikey YOUR_API_KEY
  buffer_type file
  buffer_path /var/log/td-agent/buffer
  use_ssl true
  flush_interval 10s

まずgeo..でマッチさせてIPアドレスから経度と緯度を取得してデータに追加、そのあとタグを付け替えてTreasureDataに送るという流れです。

確認

TreasureDataにGEO情報付きでデータが飛んだか確認します

$ td query -w -d geotest "select * from accesslog where TD_TIME_RANGE(TIME,TD_TIME_ADD(TD_SCHEDULED_TIME(),'-1h'),TD_SCHEDULED_TIME(),'JST') limit 5;"

ScreenClip

OKですね~