我的 logstash 中的一些请求使 http 输出插件失败,并且日志显示
[2020-10-16T18:44:54,574][ERROR][logstash.outputs.http ] [HTTP Output Failure] Could not fetch URL {:url=>"https://www.example.com/api.php", :method=>:post, :body=>"{"id":"test"}", :headers=>{"Content-Type"=>"text/plain"}, :message=>"Connection reset", :class=>"Manticore::UnknownException", :backtrace=>["/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/manticore-0.6.4-java/lib/manticore/response.rb:37:in
block in initialize'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/manticore-0.6.4-java/lib/manticore/response.rb:79:in
call'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-http-5.2.4/lib/logstash/outputs/http.rb:239:insend_event'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-http-5.2.4/lib/logstash/outputs/http.rb:175:in
send_events'", "/usr/share/logstash/vendor/bundle/jruby/2.5.0/gems/logstash-output-http-5.2.4/lib/logstash/outputs/http.rb:124:inmulti_receive'", "org/logstash/config/ir/compiler/OutputStrategyExt.java:118:in
multi_receive'", "org/logstash/config/ir/compiler/AbstractOutputDelegatorExt.java:101:inmulti_receive'", "/usr/share/logstash/logstash-core/lib/logstash/java_pipeline.rb:239:in
block in start_workers'"], :will_retry=>false}
会是什么原因呢?以及如何修复它,即稍后重试?
我的 logstash 输出配置是
output {
if [message] == "..." {
http {
format=>"message"
http_method=>"post"
url=>"xxx"
message=>'...'
}
}
}
最佳答案
Logstash Http 输出插件使用 Manticore HTTP 客户端。如果异常属于以下类别,它将自动重试。检查this .
::Manticore::Timeout,
::Manticore::SocketException,
::Manticore::ClientProtocolException,
::Manticore::ResolutionFailure,
::Manticore::SocketTimeout
对于您的用例,http 客户端正在获取 Manticore::UnknownException
,这不是默认重试列表的一部分。而且我没有看到使用配置覆盖它的方法。
我可以想到两个选项。
- 调试在网络级别发生连接重置的原因并解决根本问题。 Ex: API端防火墙或网络白名单,API需要相互认证
- 如果 1 不是一个选项并且您确定重试是一个选项并且会解决您的问题,请 fork github 存储库,将
Manticore::UnknownException
添加到可重试异常列表中,并且使用该版本的插件。
关于logstash - Logstash HTTP 输出插件中的 UnknownException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64680262/