我想将数据从java应用程序发送到logstash。 将它发送到“curl”是好的,但它不会将其发送到“java restTemplate”
“curl”示例:确定
$ 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 config”文件如下:
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 :(得分:0)
执行此操作的最佳方法是不要在es_bulk
输入中使用http
编解码器,而只是让您的事件成为纯文本消息。
然后,您可以使用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。