Sua postagem não descreve muito as especificações (memória no indexador LS, volume de log ou muito mais), mas vou tentar responder suas perguntas da melhor forma possível primeiro. Isenção de responsabilidade: Sou um dos desenvolvedores do logstash -
-
Apache enlouquecendo provavelmente foi um efeito colateral do processo de logstash agindo. Eu deixaria isso de lado por enquanto.
-
A maneira sã de fazer ES f / b / s é adicionar mais nós ES. É tão fácil assim. Eles até mesmo se descobrem mutuamente, dependendo da topologia da rede. Depois de 17 anos nesta indústria, nunca vi nada horizontalmente tão fácil como o ElasticSearch.
-
Para f / b / s Redis, não use nenhum cluster de redis. Versões mais recentes do Logstash podem fazer o balanceamento de carga Redis internamente. A saída do Redis suporta uma lista de hosts Redis na configuração do plugin e o suporte está prestes a ser adicionado ao lado da entrada, bem como para corresponder a isso. Nesse ínterim, você pode usar várias definições de entrada do Redis no lado do indexador / consumidor.
-
Eu não posso responder isso além de dizer que parece que você está tentando fazer muito com um único host (possivelmente fraco).
Qualquer bom processo de escalonamento começa com a quebra de componentes colocados em sistemas distintos. Eu não vejo suas configurações em qualquer lugar, exceto nos lugares onde os 'gargalos' do logstash estão nos filtros. Dependendo de quantas transformações você está fazendo, isso pode ter um impacto no uso de memória dos processos do Logstash.
O Logstash funciona muito como legos. Você pode usar um tijolo de 2x4 ou você pode usar dois tijolos de 2x2 para realizar a mesma tarefa. Exceto no caso do logstash, é mais resistente usar tijolos menores do que um único bloco grande.
Alguns conselhos gerais que normalmente damos são:
-
envia logs o mais rápido possível da borda Se você pode usar o transporte de rede puro em vez de gravar em disco, isso é bom, mas não é obrigatório. O Logstash é baseado em JVM e isso tem boas e más implicações. Use um remetente alternativo. Eu escrevi um baseado em python ( link ), mas eu sugiro que as pessoas usem o Beaver ( link ).
-
gere seus logs em um formato que requer o mínimo de filtragem possível (json ou otimamente o formato de evento json) Isso nem sempre é possível. Escrevi um appender log4j para fazer isso ( link ) e acabei quebrando o layout do padrão em seu próprio repositório ( link ). Isso significa que não preciso fazer QUALQUER filtragem no logstash para esses logs. Acabei de definir o tipo de entrada para 'json-event'
Para o apache, você pode tentar essa abordagem: link
- divida as coisas em vários componentes Em todas as conversas que fiz sobre o logstash, eu o descrevo como um tubo unix em esteróides. Você pode fazer o pipeline o tempo que desejar. Você dimensiona o logstash ao mudar as responsabilidades horizontalmente. Isso pode significar tornar o pipeline mais longo, mas não estamos falando de nada estatisticamente relevante em termos de sobrecarga de latência. Se você tiver maior controle sobre sua rede (ou seja, NÃO no EC2), poderá fazer algumas coisas incríveis com o isolamento de tráfego padrão.
Observe também que a lista de discussão do logstash é MUITO ativa, então você deve sempre começar por aí. Sanitize e guarde suas configurações, pois esse é o melhor lugar para começar.
Existem empresas (como a Sonian) escalando o ElasticSearch para níveis de petabyte e empresas (como Mailchimp e Dreamhost), escalando o Logstash para níveis insanos também. Isso pode ser feito.