2015-11-04 5 views
2

Я уже проанализировал файл журнала, используя logstash, и поместил его в elasticsearch. У меня есть поле, называемое IP, и теперь оно отображается как строка. Я хочу преобразовать существующее сопоставление в elasticsearch в geoip без повторного запуска logstash. У меня есть несколько миллионов записей в elasticsearch с этим полем. Я хочу преобразовать отображение IP из строки в geoip во все записи.Преобразование существующего сопоставления полей в geoip

+0

Мы говорим об обычном индексе 'logstash- *' или он является обычным для других нужд? – Val

+0

Нормальный индекс logstash – Avis

ответ

3

Боюсь, вам все равно придется использовать Logstash для этого, потому что geoip - это фильтр Logstash, и Elasticsearch не имеет доступа к базе данных GeoIP сам по себе.

Не бойтесь, хотя, вам не нужно повторно запустить Logstash на сырье логов, вы можете просто заново индексировать ES документов, используя elasticsearch input плагина и elasticsearch output плагина и лавируя в geoip filter между ними для того, для преобразования поля IP в поле geoip.

Поскольку вы не можете изменить отображение текущего поля IP от string до geo_point, нам необходимо убедиться, что ваш индекс готов к глотанию данных GeoIP. Сначала проверьте следующую команду, если ваш индекс уже содержит поле geoip в вашем сопоставлении (которое было бы создано Logstash с использованием стандартного стандартного шаблона logstash-*).

curl -XGET localhost:9200/logstash-xyz/_mapping 

Если вы видите geoip поле в выводе выше команды, то вы хорошо идти. В противном случае, мы должны сначала создать geoip поле с типом geo_point:

curl -XPUT localhost:9200/logstash-xyz/_mapping/your_type -d '{ 
    "your_type": { 
    "properties": { 
     "geoip": { 
     "type": "object", 
     "dynamic": true, 
     "properties": { 
      "ip": { 
      "type": "ip", 
      "doc_values": true 
      }, 
      "location": { 
      "type": "geo_point", 
      "doc_values": true 
      }, 
      "latitude": { 
      "type": "float", 
      "doc_values": true 
      }, 
      "longitude": { 
      "type": "float", 
      "doc_values": true 
      } 
     } 
     } 
    } 
    } 
}' 

Теперь ваше отображение готово к приему данных GeoIP. Так, в следующем мы создаем файл конфигурации Logstash под названием geoip.conf который выглядит следующим образом:

input { 
    elasticsearch { 
    hosts => "localhost:9200" 
    index => "logstash-xyz" 
    } 
} 
filter { 
mutate { 
    remove_field => [ "@version", "@timestamp" ] 
} 
geoip { 
    source => "IP"   <--- the field containing the IP string 
} 
} 
output { 
elasticsearch { 
    host => "localhost" 
    port => 9200 
    protocol => "http" 
    manage_template => false 
    index => "logstash-xyz" 
    document_id => "%{id}" 
    workers => 1 
} 
} 

, а затем после установки правильных значений (хост + индекс), вы можете запустить с bin/logstash -f geoip.conf. После запуска этого документа ваши документы должны содержать новое поле с именем geoip с информацией GeoIP.

Перейти к началу страницы Я предлагаю вам напрямую добавить фильтр geoip в обычную конфигурацию logstash.

+0

Отличный !! Спасибо.. – Avis

Смежные вопросы