2017-05-24 102 views
0

我正在嘗試流JSON數據並將每個單獨的JSON事件(由\ n分隔)轉換爲與LogStash(localhost 5000)通信的TCP套接字。但是,我似乎只能通過LogStash填充Elasticsearch中的最後一個json對象。我可以驗證API調用的作品,並且應該包含大約70個單獨的事件。只有最後一個通過這個LogStash入口點在Elasticsearch中結束。我還驗證了請求調用中的流和分隔符正在工作並返回單個JSON事件。 iter_lines的每次迭代都會按預期打印單個JSON對象。我想通過這個套接字分別發送每個json對象,但它不起作用。有任何想法嗎?我是否需要拆卸併爲每個json對象構建套接字?Python迭代並通過套接字發送數據(Logstash/Elasticsearch)

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

因此,通過在「\ n」上劃界,我擺脫了LogStash需要查看的信息,以瞭解日誌事件已終止。

通過添加:

r = requests.get(URL, headers=AUTH, stream=True) 
for d in r.iter_lines(delimiter="\n"): 
    d += "\n" 
    sock.send(d) 

一切正常! Logstash基本上不知道如何識別一個事件結束,一個事件開始。