logstash + elasticsearch: перезагружает те же данные

Удалось получить logstash (1.3.1) для отправки данных в elasticsearch (0.9.5).

Моя настройка файла logstash conf

input {
  file {
    path => ["D:/apache-tomcat-7.0.5/logs/*.*"]
   }

}
 output {
  stdout { } 
    elasticsearch_http {
    host => "localhost"
    port => 9200
   }
 }

Данные хранятся в ES под индексом logstash-2013.12.xx

Однако, если я перезапущу logstash, скажем, на следующий день - те же данные будут перезагружены в новый индекс. Даже если я перезапущусь снова, количество документов в индексе удвоится.

Похоже, что logstash перечитывает данные, а ES также дублирует документы.

Есть ли способ не перезагружать в logstash или не дублировать в ES или делать ОБА.


person Samant    schedule 15.12.2013    source источник
comment
Logstash обычно хранит файл .sincedb для отслеживания хода выполнения файла. Может быть, попробуй запустить -v, чтобы увидеть, что с этим не так. Есть ли у него разрешение на запись на пути sincedb? Вы можете попробовать указать путь sincedb вручную, чтобы иметь немного больше контроля над ним.   -  person rutter    schedule 15.12.2013
comment
О, также эта ошибка, вероятно, актуальна, поскольку вы выглядите в Windows: LOGSTASH-1587: Windows - ввод файла - sincedb / start_position игнорируется   -  person rutter    schedule 15.12.2013
comment
@Rutter Спасибо за ссылку и ответ. да, я пробовал это в Windows. Однако, используя logstash 1.3.1 .. в надежде, что все было исправлено! Похоже, с ES / Logstash все еще есть элементарные проблемы. Может попробовать на linux и посмотреть. Спасибо за помощь !   -  person Samant    schedule 17.12.2013


Ответы (1)


Я столкнулся с этой проблемой и с Logstash 1.3.3. Соответствующий отчет об ошибке в Logstash Jira - это Ввод файла LOGSTASH-429 - файл .sincedb поврежден в Windows. Также был патч, созданный Бойдом Мейером.

Этот патч также был загружен в репозиторий ruby-filewatch git Джордана Сисселя для включения в более позднюю версию, однако он еще не вошел.

Проблема возникает из-за того, что Logstash использует индексный дескриптор файла, который всегда возвращает 0 в Windows. Бойд Мейер использует идентификатор файла, чтобы получить идентификатор файла, чтобы обойти проблему. Этот идентификатор файла остается неизменным до тех пор, пока файл не будет удален с тома.

Если вам удобно вносить небольшие исправления, вы можете исправить это изменение из репозитория git ruby-filewatch Джордана Сисселя. Для версии 1.3.3, которую я только что исправил и сейчас я тестирую с помощью тестовых файлов журнала, шаги были следующими:

  1. Загрузите zip-файл ruby-filewatch с Github: репозиторий git ruby-filewatch Джордана Сисселя
  2. Разархивируйте загруженный zip-файл в новый каталог.
  3. Мне пришлось внести изменения в файл Ruby-filewatch \ lib \ filwatch \ tail.rb -> Строка 10, которая читает, требует "JRubyFileExtension.jar". Мне пришлось изменить требование "java / JRubyFileExtension.jar", иначе я получал сообщение об ошибке, что не удалось найти файл jar при попытке прочитать файл. Для справки, вся строка выглядит как: require "java/JRubyFileExtension.jar" if defined? JRUBY_VERSION
  4. Откройте файл logstash-1.3.3-flatjar.jar в 7-Zip
  5. Перетащите каталог java из ruby-filewatch в корневую папку в 7-Zip.
  6. Перетащите все файлы из папки ruby-filewatch \ lib \ filewatch в папку filewatch в 7-Zip, перезаписав все существующие файлы.

Теперь, когда вы запустите его для нескольких файлов журнала, вы должны обнаружить, что sincedb содержит более одной записи, и записи выглядят похожими на 1717916447-2604966-851968 0 2 428312038. Если у вас возникли проблемы с поиском файла sincedb и вы не установили sincedb_path в вашем файле конфигурации его можно найти в домашнем каталоге пользователя, запустившего jar. Если это ваш пользователь, вы можете легко получить к нему доступ, используя клавишу Windows + Выполнить ->% USERPROFILE% -> OK.

Как всегда, будьте осторожны при установке исправлений и тщательно тестируйте перед развертыванием в производственных системах.

person Garth McCormack    schedule 02.02.2014
comment
Не похоже, что это было исправлено в версии 1.4.0 (согласно сообщению об ошибке). Так ли это на самом деле? - person 0x26res; 08.04.2014
comment
Да, 1.4.0 тоже нуждается в этом патче. Сработало для меня, единственная разница в моем случае заключается в том, что logstash не был упакован в jar, поэтому я просто заменил все файлы filewatch * .rb на исправленные (добавлен один новый файл, winhelper.rb) и должен был поставить 'java' папку в lib, чтобы работала строка require java / JRubyFileExtension.jar. - person Alexander; 10.04.2014
comment
все еще не исправлено в 1.4.2. Я серьезно подумываю о том, чтобы разветвить все это на Java, здесь полно ошибок. jlogstash :-) - person Tony BenBrahim; 26.08.2014
comment
@TonyBenBrahim Я не вижу повторяющихся данных для Logstash 1.4.2. win8 x64 с logstash либо в качестве службы, либо в командной строке, start_position => "beginning", без указания пути createdb. И когда я останавливаю / запускаю logstash, он не перезагружает одни и те же данные - person Joe; 19.09.2014
comment
Последний статус этой ошибки: github.com/logstash-plugins/logstash- input-file / issues / 2. Подведем итог: исправлена ​​3-я библиотека (выпущен filewatch v0.6.1), но LogStash 1.4 все еще с v0.5. Ожидание выпуска logStash. - person BenC; 23.02.2015