我已经使用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服务器的日志中没有错误。
答案 0 :(得分:0)
嗯,这里的一个问题是JRuby试图调用Thread.stop(Throwable obj);
,这是一个抛弃UnsupportedOperationException
的弃用方法,并且完全混淆了错误的实际来源(Throwable
参数)。
所以目前你只能猜到实际问题是什么,猜测永远不会好。
一个想法是在RubyThread.exceptionRaised();
上设置断点并通过调试器运行它。这应该可以让你找出原始的Throwable
是什么,然后你可以找到问题的根源。
您还应该检查JRuby是否存在关于此问题的错误故障单,并可能更新您的JRuby。