2017-09-05 13 views
-1

javaアプリケーションからlogstashにデータを送信したい。それは "カール" への送信 は良いですが、それはJavaアプリケーションをlogstashにする方法は?

は、たとえば "カール" "JavaのrestTemplate" にそれを送信しません: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"} 

私は、「アプリケーション/ X-ndjson」の形式でデータの種類を記述しようとしていると、それは間違っていたところ、私は知りません。

「Javaアプリケーション」の「Javaアプリケーション」から「ログ・スタッシュ」にデータを転送するにはどうすればよいですか?次のように

"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

関連する問題