【问题标题】:UnknownException in Logstash HTTP output pluginLogstash HTTP 输出插件中的 UnknownException
【发布时间】:2020-11-04 12:38:09
【问题描述】:

我的logstash中的一些请求使http输出插件失败,并且日志显示

[2020-10-16T18:44:54,574][ERROR][logstash.outputs.http][HTTP 输出失败] 无法获取 URL {:url=>"https://www.example.com/api.php", :method=>:post, :body=>"{"id":"test"}", :headers=>{"Content-Type"=>"text/plain"}, :message=>"连接重置", :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:in send_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:in multi_receive'", "org/logstash/config/ir/compiler/OutputStrategyExt.java:118:in multi_receive'", “org/logstash/config/ir/compiler/AbstractOutputDelegatorExt.java:101:in multi_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=>'...'
        }
    }
}

【问题讨论】:

  • 您可以实施重试策略,如果这是一个临时问题,这可能很有用。如果您一直面临这个问题,我建议您查看 API 端点的网络连接,以查看是否存在导致连接重置的错误配置,检查 API 端是否存在阻止连接的防火墙或网络白名单或如果 API 需要相互身份验证并且期望 logstash http 输出呈现客户端证书。
  • @karanshah 但为什么连接重置不会触发重试?
  • 你能用logstash输出配置更新问题吗?
  • @karanshah 已更新(实际上并没有什么特别的设置)
  • retry_failed 选项决定了logstash 输出插件是否会重试请求。默认情况下设置为 true,因此它应该无限重试。我很惊讶为什么在你的情况下没有发生这种情况。可以在错误消息中看到will_retry=>false,需要查看输出插件如何确定何时重试以及何时不重试。

标签: logstash


【解决方案1】:

Logstash Http 输出插件使用 Manticore HTTP 客户端。如果异常属于以下类别,它将自动重试。检查this

  ::Manticore::Timeout,
  ::Manticore::SocketException,
  ::Manticore::ClientProtocolException,
  ::Manticore::ResolutionFailure,
  ::Manticore::SocketTimeout

对于您的用例,http 客户端正在获取Manticore::UnknownException,这不是默认重试列表的一部分。而且我看不到使用配置覆盖它的方法。

我能想到两个选择。

  1. 调试在网络级别发生连接重置的原因并解决根本问题。例如:API 端的防火墙或网络白名单,API 需要相互认证
  2. 如果 1 不是一个选项,并且您确定重试是一个选项并且可以解决您的问题,请派生 github 存储库,将 Manticore::UnknownException 添加到可重试异常列表并使用该版本的插件。李>

【讨论】:

    猜你喜欢
    • 2020-05-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-10
    • 1970-01-01
    • 2016-09-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多