我正在尝试流式传输JSON数据并将每个单独的JSON事件(由' \ n'分隔)提供到与LogStash(localhost 5000)通信的TCP套接字中。但是,我似乎只能通过LogStash填充Elasticsearch中的最后一个json对象。我可以验证API调用的工作原理,并且应该包含大约70个单独的事件。只有最后一个通过此LogStash入口点在Elasticsearch中结束。我还验证了请求调用中的流和分隔符正在工作并返回单个JSON事件。 iter_lines的每次迭代都将按预期打印单个JSON对象。我想分别通过这个套接字发送每个json对象,但它不起作用。有任何想法吗?我是否需要拆除并为每个json对象构建套接字?
HOST = 'localhost'
PORT = 5000
try:
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(1)
try:
sock.connect((HOST, PORT))
except socket.error, msg:
sys.stderr.write("[ERROR] %s\n" % msg[1])
sys.exit(2)
#make web request
AUTH = {
"Key" : key,
"Email" : email
}
URL = "https://LOGAPIENDPOINT/{}/logs/requests?start={}".format(zone, start)
counter=0
r = requests.get(URL, headers=AUTH, stream=True)
for d in r.iter_lines(delimiter="\n"):
print d
sock.send()
print "Closing Socket"
sock.close()
sys.exit(0)
答案 0 :(得分:0)
因此,通过对" \ n"进行分隔,我找到了LogStash需要知道的日志事件被终止的内容。
添加:
r = requests.get(URL, headers=AUTH, stream=True)
for d in r.iter_lines(delimiter="\n"):
d += "\n"
sock.send(d)
一切正常! Logstash基本上不知道如何识别一个事件结束和一个事件开始。