logstash неожиданно остановился

Я настроил logstash с архитектурой Redis для обработки своих журналов. Как я это организовал:

logstash ---> redis ---> logstash ---> elasticsearch

но проблема заключается в том, что после разбора почти 1,25 миллиона журналов возникает исключение 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"
    }
}

В логах сервера logstash с установленным Redis ошибок нет.


person Keshav Agarwal    schedule 07.08.2015    source источник


Ответы (1)


Ну, одна проблема здесь связана с JRuby, который пытается вызвать Thread.stop(Throwable obj);, устаревший метод, который выдает UnsupportedOperationException и полностью искажает фактический источник ошибки (параметр Throwable).

Так что в настоящее время вы можете только догадываться, в чем реальная проблема, а догадки никогда не бывают хорошими.

Одна из идей состоит в том, чтобы установить точку останова на RubyThread.exceptionRaised(); и запустить ее через отладчик. Это должно позволить вам узнать, что такое исходный Throwable, а затем вы сможете добраться до источника проблемы.

Вы также должны проверить, существует ли запись об ошибке для JRuby по этому поводу, и, возможно, обновить свой JRuby.

person Kayaman    schedule 07.08.2015
comment
Обновил мой JRuby и перезапустил logstash. Надеюсь, что это работает нормально. А что касается точки останова RubyThread.exceptionRaised();, я не могу понять, как установить точку останова в моем файле конфигурации logstash. Не могли бы вы помочь мне, как это сделать? Спасибо! :) - person Keshav Agarwal; 07.08.2015
comment
Вы не можете установить точки останова в конфигурационных файлах, но было бы довольно сложно получить точку останова внутри JRuby. Просмотрите систему отслеживания проблем, чтобы узнать, знают ли они об этой ошибке. - person Kayaman; 07.08.2015
comment
Ну, я все равно отправил им новую ошибку. Кажется, в текущей версии все еще есть эта ошибка. - person Kayaman; 07.08.2015
comment
Хорошо, надеюсь, они скоро выпустят решение. У меня ошибка вылетает каждые 90 минут при чтении файлов. Вы также можете добавить это к проблеме, если это имеет какое-либо значение. - person Keshav Agarwal; 07.08.2015
comment
@KeshavAgarwal Я сомневаюсь, что они выпустят решение в ближайшее время (вы все еще можете следить за билетом ошибки, чтобы увидеть, что произойдет). Если вы не очень хорошо знакомы с Java, вам, вероятно, потребуется много работы, чтобы отладить причину в данный момент. - person Kayaman; 07.08.2015
comment
Я использовал своего рода хак, чтобы решить мое дело. Я настроил задание cron на каждый час для резервного копирования журналов logstash и перезапуска его. И поскольку ошибка возникает каждые 90 минут, logstash не останавливается. - person Keshav Agarwal; 07.08.2015