Ввод файла Logstash: регистрация файла json увеличилась, но в некоторых случаях данные не берутся

Мой файл конфигурации показан ниже:

input {
  file {
    codec => "json"
    path => "/home/data/*"
    sincedb_path => "/dev/null"
  }
}

output {
  elasticsearch{
    protocol => "http"
    host => "localhost"
    index => "data"
  }
}

Когда я загружаю файл .json в каталог data, logstash не будет получать данные или выводить их в elasticsearch, если я сначала не открою файл и не сохраню его в gedit.

Запуск logstash с флагом -vvv не показывает ошибок, все, что я получаю, когда файл помещается в этот каталог,

_discover_file: /home/data/*: new: /home/data/prediction1.json (exclude is []) {:level=>:debug, :file=>"filewatch/watch.rb", :line=>"126"}
_open_file: /home/data/prediction1.json: opening {:level=>:debug, :file=>"filewatch/tail.rb", :line=>"98"}
/home/data/prediction1.json: staying at position 0, no sincedb {:level=>:debug, :file=>"filewatch/tail.rb", :line=>"143"}
writing sincedb (delta since last write = 377) {:level=>:debug, :file=>"filewatch/tail.rb", :line=>"177"}
/home/data/prediction1.json: file grew, old size 0, new size 3952 {:level=>:debug, :file=>"filewatch/watch.rb", :line=>"81"}

Это заставило меня поверить, что может быть проблема с кодировкой символов, поскольку файл json создается с использованием json.dumps в python до достижения elasticsearch. Я попытался преобразовать данные в yaml:

outfile.write(yaml.dump(json.dumps(data)))

который logstash принимает как обычный текст, как сейчас в форме:

'data:{ properties:
  { location:
  { here }}}'

после использования команд sed и tr для преобразования этого НАЗАД в действительный json logstash больше не принимает его, если он не сохранен через gedit !!!


person LSkuse    schedule 14.04.2015    source источник
comment
json.dumps() генерирует строку. Запись этой строки с помощью yaml.dump() не выполняет преобразование, она только заключает строку в одинарные кавычки. (Кстати, вы можете просто указать поток в качестве второго параметра для yaml.dump(), нет необходимости сначала хранить его в буфере StringIO, а затем записывать).   -  person Anthon    schedule 14.04.2015
comment
Если файл json такой же большой, как ваш пример, можете ли вы использовать od -c filename как для рабочей, так и для нерабочей версии файла и включить вывод в свой пост?   -  person Anthon    schedule 14.04.2015
comment
спасибо, Антон, od -c filename выводит весь json?   -  person LSkuse    schedule 15.04.2015
comment
Да, это так, но он показывает специальные символы, которые определяют разницу между неправильным выводом, который вы создаете, и тем, что выходит из Gedit, который является правильным. Просто скопируйте объявление и вставьте вывод в свой пост (и укажите, что к чему для двух версий)   -  person Anthon    schedule 15.04.2015