2015-10-15 2 views
1

Я изучаю проблему с системой ведения журнала и искал некоторые сведения о возможных решениях проблемы. Что мы имеем сейчас:Отправка журналов из кластера tomcat

  • Кластер 6 котов, порубочные (log4j2) настроен на использование SocketAppender
  • Слушатель для них является logstash агента, который ставит регистрируемые события на Redis
  • Другого logstash агент выбирает записи из Redis и толкает их на elasticsearch

проблема у нас в разы, что клиентские сокеты (log4j лесорубы) иногда ждать бесконечно вызывая приложение перестанет отвечать на запросы. Одним из предлагаемых решений было уйти от приложений-сокетов и использовать локальный файл (нам не нужна «мгновенная» информация о журнале в кибане). Таким образом, агент logstash будет настроен на чтение из 6 файлов (по одному на один экземпляр) и подталкивает их прямо к поиску эластичности. Можете ли вы предложить какие-либо недостатки этого подхода, кроме наличия 6 файлов, определенных во входной конфигурации logstash? Какие еще варианты вы можете предложить? Заранее спасибо.

ответ

1

Я бы определенно не использовал SocketAppender, если у вас есть выбор. Один из вопросов, который вы упомянули, и еще один, если вы находитесь на Logstash 1.5x или раньше, что я нахожу гораздо более неприятным, заключается в том, что точная метка вашего события (созданная log4j2) не передается, а это означает, что временная метка вашей строки журнала будет время прихода этой строки журнала в logstash вместо времени, когда ваша строка журнала была создана вашим приложением. Если вы объединяете журналы из разных приложений/серверов/подсистем в своем стеке, вам будет сложно понять временность ваших событий. Это было fixed in Logstash 2.0, хотя, но все же стоит упомянуть.

Помимо этого, есть по крайней мере три веские причины для хранения журналов в файл в файловой системе, а не грузить их непосредственно через TCP:

  1. лог-файлы в качестве резервной копии де-факто вашего журналы, т. е. вы можете воспроизводить эти файлы в любое время.
  2. Ваше приложение не зависит от другой синхронной подсистемы для отправки его строк журнала, оно просто тонет в собственной файловой системе
  3. Ваш логсташ может быть недоступен (обновление, сетевое подключение и т. д.), и ваше приложение все равно сможет создавать журналы, независимо от того, что такое goi ng вниз по цепочке.
+0

Это именно те причины, из которых следует перейти от SocketAppender. Спасибо! – Konstantin

+0

Рад, что это помогло вам подтвердить свой выбор. Вам нужна какая-либо другая информация по этой теме? – Val

+0

Было бы хорошо услышать больше мнений - я видел несколько статей, в которых Redis выступал в роли брокера между несколькими файлами журнала и индексом logstash, поэтому хочу подтвердить, что нет никакого вреда при удалении от Socket-> Redis-> Logstash-> ElasticSearch прямо в MultipleFiles-> Logstash-> ElasticSearch – Konstantin