2017-09-05 48 views
-1

我想從java應用程序發送數據到logstash。 發送到 「捲曲」 是好的,但它並沒有將其發送至 「Java的restTemplate」如何將java應用程序轉換爲logstash?

「捲曲」 的例子:OK

$ curl -XPOST -H "Content-Type: application/x-ndjson" "http://10.97.8.151:18080" --data-binary @data.txt 

的data.txt

{"index":{"_index": "myIndex","_type":"myType"}} 
{"data1":"value1","data2":"value2","data3":"value3"} 

該作品好。但是,「Java restTemplate」不能正常工作,如下所示。

其他一切都完全相同,數據形式也不同。

{"index":{"_index": "myIndex","_type":"myType"}}\n{"data1":"value1","data2":"value2","data3":"value3"} 

我試圖以「application/x-ndjson」的形式描述數據的類型,我不知道它在哪裏出錯。

如何將數據從「java應用程序」傳輸到「java應用程序」中的「logstash」?

的 「logstash配置」 文件如下:

input { 
http { 
    host => "0.0.0.0" 
    port => "12345" 
    codec => es_bulk { 
    } 
    } 
} 
output { 
    elasticsearch { 
     hosts => "x.x.x.x:yyyy" 
     index => "{[@metadata][_index]}" 
     document_type => "{[@metadata][_type]}" 
     template_name => "api" 
    } 
    stdout { codec => rubydebug { metadata => true } } 
} 

尋求幫助。

回答

0

這樣做的最好方法不是在http輸入中使用es_bulk編解碼器,而只是讓您的事件成爲純文本消息。

然後,而不是使用elasticsearch輸出,你可以使用http輸出是這樣的:

input { 
http { 
    host => "0.0.0.0" 
    port => "12345" 
    codec => "plain" 
    } 
} 
output { 
    http { 
     http_method => "post" 
     url => "http://x.x.x.x:yyyy/_bulk" 
     format => "message" 
     message => "%{message}" 
    } 
} 

這種方法的大加那你Logstash管道沒有解析「批量」輸入只是爲了重新創建相同的「批量」輸出。在這種情況下,您只需使用Logstash作爲「傳遞」。但是,我沒有看到這個價值,你可以讓你的Java應用程序直接向ES發送批量有效載荷。

+0

有沒有這樣的運氣? – Val

相關問題