问题描述
我已经设置了带有redis体系结构的logstash来处理我的日志。 我的组织方式是:
logstash ---> redis ---> logstash ---> elasticsearch
但是发生的问题是,在解析了将近125万条日志之后,抛出了Java异常。
在我的logstash.err
日志文件中,异常显示为
Exception in thread "<file" java.lang.UnsupportedOperationException
at java.lang.Thread.stop(Thread.java:869)
at org.jruby.RubyThread.exceptionRaised(RubyThread.java:1221)
at org.jruby.internal.runtime.RubyRunnable.run(RubyRunnable.java:112)
at java.lang.Thread.run(Thread.java:745)
我认为可能由于logstash无法打开/关闭文件而引发此异常。 那么,该怎么办才能纠正此错误? 为第一个logstash服务器设置输入配置以发送日志的方式是:
input {
file {
start_position => "beginning"
path => [
"/var/logstash_logs/child1/nginx/*log*",
"/var/logstash_logs/child2/nginx/*log*",
"/var/logstash_logs/child3/nginx/*log*"
]
}
}
输出的发送方式是这样的:
output {
redis {
host => "X.X.X.X"
key => "logstash"
data_type => "list"
}
}
安装了Redis的logstash服务器的日志中没有错误。
1楼
好吧,这里的一个问题是JRuby,它试图调用Thread.stop(Throwable obj);
,这是一个不推荐使用的方法,该方法抛出UnsupportedOperationException
并完全弄乱了错误的实际来源( Throwable
参数)。
因此,当前您只能猜测实际的问题是什么,而猜测永远都不是好事。
一种想法是在RubyThread.exceptionRaised();
上设置一个断点RubyThread.exceptionRaised();
并通过调试器运行它。
那应该让您找出原始的Throwable
是什么,然后就可以找到问题的根源。
您还应该检查是否存在有关此问题的JRuby错误票证,并可能更新您的JRuby。