2

У меня есть конфигурация LogStash в сочетании с брокером REDIS, который отлично работает с легким трафиком (10 сообщений/секунд). Каждая услуга ELK работает на соответствующем независимом сервере 2 ГБ.Очень низкая производительность с LogStash

Tomcat (Log4j) -> LogStash -> Redis -> LogStash-> ES-> Kibana .. У меня теперь есть новое требование для регистрации (200 сообщений в секунду).

Tomcat-> LogStash-> Redis работает достаточно быстро (250+ сообщений в секунду), однако второй LogStash не выглядит достаточно быстрым, чтобы потреблять 100+ сообщений в секунду из Redis. В настоящее время он делает около 10 сообщений в секунду. Может ли это быть связано с моим размером сообщения (я регистрирую строку в 20 килобайтах в каждом сообщении).

Мой второй lumberjack.conf выглядит следующим образом после многократной настройки (я также применил -w 10 к командной строке) для параллельной обработки. Я также прокомментировал все многострочные фильтры, поскольку они не являются потокобезопасными.

input { 
    #Read Log4J messages from the Redis Broker (general errors). 
    redis { 
     host => "192.168.0.231" 
     type => "qalogs" 
     port => 6379 
     data_type => "list" 
     key => "lsqalogs" 
     batch_count => 100 
     threads => 8 
     codec => "json" 
    } 
    output { 
    if [type] == "avail" { 
     if [push_index] { 
     elasticsearch { 
      index => "%{push_index}-%{push_type}-%{+YYYY.MM.dd}" 
      hosts => ["192.168.0.230:9200"] 
      flush_size => 50 
      manage_template => false 
      workers => 40 
     } 
     } else { 
     elasticsearch { 
      index => "log-%{type}-%{+YYYY.MM.dd}" 
      hosts => ["192.168.0.230:9200"] 
      flush_size => 50 
      manage_template => false 
      workers => 40 
     } 
     } 
    } 
    } 

Я работал над этим в течение нескольких месяцев, и автоматизировал полную установку стеки .. Единственная проблема у меня есть производительность ужасно.

Второй сервер LogStash работает с 0,3 Load-Avg, поэтому я считаю, что он может справиться с теплом 100 +/сообщений в секунду.

Я использую LogStash 2.1v, ES 2.1, Redis3 на разных серверах 2 ГБ. Я бы очень признателен за освещение этой области?

Спасибо заранее.

ответ

3

Попытайтесь уменьшить количество работников в вашем проекте elasticsearch.

Из blog post by elastic on Logstash optimization (курсив мой):

... изменять переменные конфигурации на вашем выходе (в первую очередь вариант «рабочие» на выходе Elasticsearch, который, вероятно, будет лучше всего количества ядер ваша машина имеет) ...

Другая вещь, поднятая в статье, заключается в том, что узким местом может быть ваш поиск elastics. 2 ГБ памяти является крошечным для узла elasticsearch, и проблема может заключаться в ресурсе, затухающем elasticsearch, а не в неправильно сконфигурированной логсташе.

+0

Благодарим за информацию. Теперь я обновил все LogStash & ES с 2 ГБ до 4 ГБ (четырехъядерные) серверы в надежде увидеть несколько более высокую производительность. Я также уменьшил количество рабочих потоков до 4. Однако проблема по-прежнему сохраняется (10+ сообщений в секунду). – Shawn

+0

Я определил одно узкое место с 'flush_size => 50', увеличив его на 500, я увидел небольшое улучшение. Теперь потребитель LogStash считывает около 30 сообщений в секунду из REDIS. – Shawn

+0

Спасибо за всю информацию. Я смог решить эту проблему, удалив все фильтры grok. Оказывается, некоторые фильтры grok (то есть postfix) приводили к замедлению LogStash. После удаления этих фильтров grok я испытал более 500 сообщений в секунду, что более чем достаточно для меня. Фильтры postfix были перемещены в другой экземпляр LogStash, где он не будет мешать этой системе. Еще раз спасибо за советы. Я реализовал их как лучшие практики. – Shawn