2016-03-15 4 views
0

Я пытаюсь геолокация запросов на моем приложении rails. Я настроил Lograge для генерации моих журналов в json.Logstash: geop from json

Я думаю, что logstash не может извлечь remote_ip из json и обработать геоинформацию.

Вот декодированная с JSON пустого полем Geoip в Kibana:

{ 
    "_index": "logstash-2016.03.15", 
    "_type": "rails logs", 
    "_id": "AVN6t1-FkghE9kQv20fc", 
    "_score": null, 
    "_source": { 
    "@version": "1", 
    "@timestamp": "2016-03-15T14:39:10.176Z", 
    "client": { 
     "host": "www.myapp.com", 
     "remote_ip": "\"xx.xx.xx.xxx\"", 
     "user_agent": "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/48.0.2564.116 Safari/537.36", 
     "browser": "Chrome", 
     "browser_version": "48.0.2564.116", 
     "plateform": "windows" 
    }, 
    "geoip": {} 
    }, 
    "fields": { 
    "@timestamp": [ 
     1458052750176 
    ] 
    }, 
    "sort": [ 
    1458052750176 
    ] 
} 

Вот мой logstash.conf

input { 
    file { 
    type => "rails logs" 
    # * is for indexing rotated logs 
    path => "/var/www/myapp/shared/log/production.log*" 
    } 
} 
filter { 
    grok { 
     match => [ 
      "message", 
      "%{DATA:data}%{LOGLEVEL:loglevel} -- : %{GREEDYDATA:json}({({[^}]+},?\s*)*})?\s*$(?<stacktrace>(?m:.*))?" 
     ] 
     remove_field => ["message"] 
    } 
    json { 
     source => "json" 
     remove_field => ["json"] 
    } 
    geoip { 
     source => "[client][remote_ip]" 
     target => "geoip" 
     database => "/etc/logstash/GeoLiteCity.dat" 
     add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] 
     add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] 
    } 
    mutate { 
     convert => [ "[geoip][coordinates]", "float"] 
    } 
} 
output { 
    elasticsearch { 
    } 
} 

ли я что-то пропустил в моей конфигурации? Спасибо заранее.

ответ

1

Похоже, что «remote_ip» неправильно разобран, у него двойные кавычки. Я думаю, что фильтр геоинформации не работает, потому что он не управляет удаленным_ипиром как ip.