Сетевая отказоустойчивая архитектура для стека ELK

Я познакомился с ELK Stack всего через несколько дней. Мы пытаемся использовать его в наших корпоративных приложениях, но у нас есть некоторые архитектурные проблемы. Я видел и читал несколько примеров использования ELK и их архитектур, особенно в linkedin, но никто не обсуждал потенциальное влияние сетевых ошибок на его / ее архитектуру.

В традиционных приложениях, журналы которых обычно записываются в файлы, единственная причина, которая может вызвать сбой системы, - это Disk is Full ошибка, которая действительно встречается редко. Но в централизованной системе журналов, в которой журналы отправляются через сеть, поскольку сетевые ошибки очень распространены, я думаю, что система очень подвержена сбоям !! Особенно в / для корпуса с ненадежной сетью.

Более того, как я видел во многих ELK случаях использования, один экземпляр JMS Provider или, другими словами, Pub/Sub Provider, например Kafka или Redis, используется вместе с ELK. Я думаю, что помимо предыдущей проблемы, JMS Provider является single point of failure в этих архитектурах! Если только это не будет сгруппировано.

Я думаю, что мы можем избавиться от обеих проблем, если мы будем использовать JMS Provider как Kafka рядом с каждым Shipper[s] на одном узле следующим образом (по одному Kafka для каждого узла):

((log-generator)+ (logstash)? Kafka)* -> Logstash -> Elasticsearch -> Kibana

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


person faghani    schedule 31.12.2016    source источник


Ответы (1)


Ответ зависит от того, насколько допустимый риск, где вы можете ожидать столкнуться с таким риском и как долго вы ожидаете, что инцидент продлится.

Если вы пишете в локальные файлы, вы можете использовать Filebeat для отправки файлов в удаленный logstash. Если этот logstash (или подчиненный кластер Elasticsearch) применяет обратное давление, filebeat замедлит или перестанет отправлять журналы. Это предоставляет вам распределенный кеш на удаленных машинах (брокер не требуется). Обратной стороной является то, что если сбой будет продолжительным, файл журнала может быть перемещен из-под шаблона глобуса filebeat, и тогда он никогда не будет отправлен.

Имея несколько экземпляров logstash, вы можете настроить filebeat для отправки в их список, что обеспечит некоторую живучесть. Если у вас есть «разовые» события (например, snmptraps, syslog и т. Д.), Вам нужно подумать о возможных сбоях еще немного.

Раньше я запускал отдельный экземпляр logstash для событий такого типа, который передавался в redis. Затем основной журнал (когда он активен) будет читать из очереди и обрабатывать события. Это позволило мне запустить новую конфигурацию logstash, не опасаясь потери событий. В наши дни я стараюсь записывать события в файлы (с помощью snmptrapd и т. Д.) И не зависеть от каких-либо журналов, работающих 24x7x365.

person Alain Collins    schedule 01.01.2017
comment
Спасибо за ответ. Я задал вопрос, исходя из предположения, что это события syslog (то есть синхронизация и UDP), но впоследствии я пришел к выводу, что это неправильный путь. Теперь я согласен с тем, что мы должны записывать журналы в локальные файлы, а затем как-то их отправлять. Я знаю, что для отправки журналов я могу использовать logstash, потому что у него есть плагин вывода как для Kafka, так и для Redis, но хотел бы знать, возможно ли это также с помощью filebeat? В чем разница между logstash и filebeat? - person faghani; 01.01.2017
comment
logstash - это полнофункциональная система, которая может читать, обрабатывать и отправлять журналы. filebeat - это более легкая программа, которая в основном читает и отправляет (хотя у нее есть важные функции удаленной стороны, такие как объединение многострочных записей и т. д.). - person Alain Collins; 01.01.2017