2017-05-24 28 views
0

JSONデータをストリーミングし、LogStash(localhost 5000)と通信するTCPソケットに個々のJSONイベント( '\ n'で区切られたもの)を供給しようとしています。しかし、私は、Elasticsearchの最後のjsonオブジェクトには、LogStashを介して取り込むようにしか見えません。私はAPI呼び出しの動作を検証することができ、約70個の個別のイベントを含める必要があります。最後のものだけがこのLogStashエントリポイント経由でElasticsearchで終了します。また、リクエストの呼び出しでストリームとデリミタが有効であることを検証していて、JSONイベントを1つ返します。 iter_linesの各繰り返しは、期待どおりに単一のJSONオブジェクトを出力します。私は個々のソケットを介して各jsonオブジェクトを送信したいが、それは動作しません。何か案は? jsonオブジェクトごとにソケットを壊してビルドする必要がありますか?Pythonの反復処理とソケット経由のデータ送信

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

だから私はLogStashは、ログイベントが終了する知って見に必要なものを取り除くた、「\ nを」に区切ることで判明。追加することにより

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

すべての作品! Logstashは基本的に、1つのイベントが終了し、1つのイベントが開始されたことを認識する方法を知らなかった。

関連する問題