Logstash не может (читать и) хранить данные журнала из файла после записи в него новых данных python

Я использовал скрипт python для автоматической записи журнала в специальный файл,
который файл также является исходным журналом my log-stash.
Контекст может быть написан правильно (python scrpit),
но после этого log-stash больше не может читать данные журнала и не может работать даже перезапустить logstash.

Основные шаги::

  1. запустите elasticsearch(с conf по умолчанию) и logstash(с conf показал ниже)
    logstash может автоматически хранить все данные (в исходном файле журнала) в elasticsearch и выводить информацию в консоль.
  2. запустите скрипт python (показано ниже) для записи данных json в исходный файл журнала.
    Данные успешно записаны.
    но logstash больше не может читать новые данные.
    даже если я перезапущу logstash, он все равно не сможет прочитать данные в исходном журнале или сохранить их в elasticsearch.

Кто-нибудь сталкивался с этой проблемой раньше?
Вот мой код python:

 def store(filepath,data):
  with open(filepath, 'a') as json_file:
    json_file.write(json.dumps(data))
    json_file.write("r")
    # json_file.close

def load(filepath):
  with open(filepath) as json_file:

    data = json.load(json_file)
    return data


if __name__ == "__main__":

data = {}
sourceFilePath = "elk_data_source.log"
destFilePath = "elk_data_dest2.log"
for i in range(1,20):
    data= load(sourceFilePath)
data["eventType"] = "*ABC"
    store(destFilePath, data)

read = open(destFilePath)
line=read.readline()  
while line:
print line 
    ''' 
context = json.loads(line)
context = context.join([ string.strip().rsplit("}" , 1)[0] ,  "}"] )
print context  
'''
line=read.readline()  
 # read.close 
 read.close() 

Вот мой файл logstash conf,который может работать правильно, если вручную ввести данные в этот журнал:

input {
       file {
              type => "accounts"
              path => "/ELK_Data/elk_data_dest2.log"

              start_position => "beginning"

            }
      }

filter {

        json{
              source => "message"
            }
       }

output {
       stdout { codec=> rubydebug }
       elasticsearch {
            hosts => "localhost:9200"
            index => "logstash-2016.12.20"
                     }
      } 

Вот мой elk_data_source.бревно

  {"eventType": ["*icbc"], "prodName": ["LDAP"], "prodFmid": ["HRSL420"], "systemSmfid": ["EIMG"]}

Версии:
logstash-5.0.0
elasticsearch-2.4.1
Python 2.7.6

2 ответа

  1. Я не понял ваш вопрос полностью, но,
    Разве не последняя строка должна быть read.close()вместо read.close
    также даже в первой функцииjson_file.close(), которая на самом деле является избыточной, если приходится использовать с with

  2. Из того, что я собрал, исходный файл elk_data_source.войти и вы пытаетесь перезаписать "eventType" = ["*icbc"]*ABC. Но то, что вы пропустили.. значение"eventType"-это массив, и вы пишете его с одним значением вместо — *ABC.

    Изменить data["eventType"] = "*ABC"на data["eventType"] = ["*ABC"].

    Это должно решить. Если это возможно, попробуйте сравнить оба файла с программным обеспечением для сравнения файлов. Кроме того, проверьте соответствующие фигурные скобки или дополнительное пространство, которые могут вызывать проблемы при чтении и форматировании файлов.