Откуда берутся поля .raw при использовании Logstash с выводом Elasticsearch?

При совместном использовании Logstash и Elasticsearch поля с .raw добавляются к анализируемым полям, так что при запросе Elasticsearch с помощью таких инструментов, как Kibana, можно использовать значение поля как есть без разделения по словам, а что нет.

Я создал новую установку стека ELK с последними лучшими версиями всего и заметил, что мои поля .raw больше не создаются, как в более старых версиях стека. Есть много людей, публикующих решения по созданию шаблонов в Elasticsearch, но мне не удалось найти много информации, поскольку почему это все исправляет. Чтобы лучше понять более широкую проблему, я задаю этот конкретный вопрос:

Откуда берутся поля .raw?

Я предполагал, что Logstash заполняет Elasticsearch проанализированными строками и необработанными строками при вставке документов, но, учитывая тот факт, что исправление заключается в шаблонах Elasticsearch, я сомневаюсь, верно ли мое предположение.


person Brad    schedule 29.11.2015    source источник


Ответы (1)


Вы правы в своем предположении, что поля .raw являются результатом динамического шаблона для строковых полей, содержащихся в шаблоне индекса по умолчанию, который Logstash создает, ЕСЛИ manage_template: true (по умолчанию).

Шаблон по умолчанию, который создает Logstash (по состоянию на 2.1), можно увидеть здесь. Как вы можете видеть в строке 26, все строковые поля (кроме message) имеют созданное подполе not_analyzed .raw.

Тем не менее, шаблон не изменился в последних версиях Logstash, что можно увидеть в template.json история изменений, так что либо что-то еще не так с вашей установкой, либо вы изменили конфигурацию Logstash для использования собственного шаблона индекса (без .raw поля).

Если вы запустите curl -XGET localhost:9200/_template/logstash*, вы должны увидеть шаблон, созданный Logstash.

person Val    schedule 29.11.2015
comment
Спасибо. К сожалению, в Elasticsearch вообще не создается ни одного шаблона, и уж точно не с именем logstash. Я попытался указать локальный в моей конфигурации Logstash, и это тоже не сработало. Но ваша информация приближает меня к проблеме и проясняет ситуацию. Я буду копать дальше! - person Brad; 29.11.2015
comment
Странный. Итак, вы подтверждаете, что у вас установлены ES 2.1 + Logstash 2.1, верно? - person Val; 29.11.2015
comment
Logstash 2.1.0 и Elasticsearch Version: 2.1.0, Build: 72cd1f1/2015-11-18T22:40:03Z, JVM: 1.7.0_91 Я попытался отредактировать этот elasticsearch-template.json и указать путь к новому файлу JSON, установив для всех строковых полей значение not_analyzed, очистил все свои индексы в Elasticsearch и снова запустил Logstash. Это не имело значения, строки по-прежнему анализировались, а необработанные поля не создавались. - person Brad; 29.11.2015
comment
Можете ли вы обновить свой вопрос с помощью конфигурации вывода elasticsearch? - person Val; 29.11.2015
comment
Я опубликую новый вопрос и свяжу вас с ним через минуту, чтобы не уводить этот вопрос от темы. Однако единственная выходная конфигурация указывает узел elasticsearch. Я экспериментировал с добавлением нового шаблона, но это не имело значения. output { elasticsearch { hosts => ['localhost:9200'] } } - person Brad; 29.11.2015
comment
Хороший ход, я хотел предложить ;-) - person Val; 29.11.2015
comment
По какой-то причине у меня сработала ручная установка его в Logstash. Это не сработало, когда я указал его в конфигурации, и по умолчанию, как, вероятно, должно было бы быть, но использование curl для PUT до Logstash решило мою проблему. Не знаю, в чем была основная проблема, но, возможно, я возьму ее в другой день, чтобы воспроизвести. В очередной раз благодарим за помощь. - person Brad; 29.11.2015
comment
Хорошо, я рад, что ты понял это. Не стесняйтесь возвращаться с более подробной информацией позже, если это необходимо. - person Val; 29.11.2015