Elasticsearch не понимает типы Logstash

Я использую Logstash для вывода журналов из журнала доступа Tomcat в elasticsearch. Шаблон, который я использую, выглядит следующим образом:

grok {
    type => "access_log"
    pattern  => "\[%{DATA:my_timestamp}\] %{IP:client} %{WORD:method} %{URIPATHPARAM:request} \[%{DATA:auth_data}\] \[%{DATA:another_timstamp}\] %{NUMBER:result_code} %{NUMBER:duration} %{NUMBER:bytes}"
  }

Как вы видели выше, длительность поля отформатирована как ЧИСЛО.

При регистрации информации в elasticsearch и выполнении запроса REST через плагин Chrome sense следующим образом:

GET /_all/_mapping?pretty=1

Он идентифицирует поле, но с типом String следующим образом:

 "duration": {
               "type": "multi_field",
               "fields": {
                  "duration": {
                     "type": "***string***",
                     "omit_norms": true
                  },
                  "raw": {
                     "type": "string",
                     "index": "not_analyzed",
                     "omit_norms": true,
                     "index_options": "docs",
                     "include_in_all": false,
                     "ignore_above": 256
                  }
               }
            }

Я ожидаю, что он поймет это как число. Ожидается ли это?

Например, другие поля, такие как geoip, понимаются как другой тип, чем строка.

 "geoip": {
               "dynamic": "true",
               "properties": {
                  "location": {
                     "type": "geo_point"
                  }
               }
            },

Спасибо заранее


person isaac.hazan    schedule 23.02.2014    source источник


Ответы (1)


Привет, я почти уверен, что лог-тайник отправляет все в виде строки. Поэтому, если значение поля указано в виде строки (что означает окружение «.», то elasticsearch сделает его строкой. По умолчанию logstash создает сопоставление шаблона, которое создает необработанные поля для всех типов строк. Но это ничего не говорит о числах Итак, если вы хотите быть числом, создайте собственное пользовательское сопоставление с порядком 2 и добавьте для конкретной конфигурации длительности поля тип числа: «длинный».

Сопоставление logstash по умолчанию можно найти здесь: https://github.com/elasticsearch/logstash/blob/master/lib/logstash/outputs/elasticsearch/elasticsearch-template.json

Создать собственное сопоставление несложно, пример можно найти здесь: http://blog.trifork.com/2014/01/28/using-logstash-elasticsearch-and-kibana-to-monitor-ваша-видео-учебник/

person Jettro Coenradie    schedule 23.02.2014
comment
Спасибо. Предоставленное вами направление было очень полезным и привело меня к решению. - person isaac.hazan; 24.02.2014
comment
@isaac.hazan Итак, у меня та же проблема, и ваш комментарий заставляет меня думать, что это не был прямой ответ? - person squareborg; 12.03.2015
comment
Да, чтобы это работало, мне пришлось определить тип индекса в elasticsearch следующим образом: evtTime: {тип: дата, формат: дд/МММ/гггг:ЧЧ:мм:сс}, - person isaac.hazan; 15.03.2015