Fluentd ou Logstash – Qual coletor de logs utilizar em 2024?
Escolher o coletor de logs adequado é essencial em 2024, e neste artigo, exploramos as distinções fundamentais entre Fluentd e Logstash.
Escolher o coletor de logs adequado é essencial em 2024, e neste artigo, exploramos as distinções fundamentais entre Fluentd e Logstash. Analisaremos desempenho, ecossistema de plugins e abordagens de roteamento para ajudá-lo a tomar uma decisão informada. Tome a decisão certa para suas necessidades: Coletor de logs Fluentd ou Logstash?
Introdução
Quando temos sistemas distribuídos em grande escala, o registro de logs se torna essencial para a observabilidade, o monitoramento e a segurança. Independentemente da arquitetura de nossos sistemas, seja monolito ou microsserviços, há uma complexidade devido ao número de partes móveis que possuem e aos desafios que enfrentam em relação ao gerenciamento, à implantação e ao dimensionamento.
Nesse cenário, as ferramentas de gerenciamento de logs auxiliam as equipes de DevOps e SRE a monitorar e melhorar o desempenho, evitar e corrigir erros e visualizar eventos.
As ferramentas
Em uma linguagem simples, uma ferramenta de análise de logs tem os seguintes componentes principais:
- Exportador de logs (Configurar logs por host) (agentes)
- Coletor de logs (concentradores/processadores)
- Armazenamento de logs (backend de logs)
- Visualização de logs (dashboards)
Neste artigo, discutiremos dois coletores de logs de código aberto muito famosos, que são o Logstash e o Fluentd. O segredo de qualquer ferramenta de análise de logs são os coletores de logs. Ambos operam em servidores, obtêm métricas do servidor, analisam todos os logs e os transferem para backends como Elasticsearch ou Grafana Loki. É o mecanismo de roteamento deles que possibilita a análise de logs.
Sob a licença Apache 2, tanto o Logstash quanto o Fluentd operam como coletores de dados de código aberto. O Logstash é conhecido popularmente como a parte “L” da pilha ELK gerenciada pela própria Elastic. Já o Fluentd é desenvolvido e gerenciado pela Treasure Data, sendo também adotado como projeto da Cloud Native Computing Foundation (CNCF).
Comparando o Fluentd e Logstash
Preparamos uma tabela para lhe dar uma breve visão geral das principais diferenças. Mais adiante, discutiremos cada ponto em detalhes.
Tabela comparativa de ferramentas
Principais diferenças entre Fluentd e Logstash em detalhes
Ecossistema de plugins
Os plugins ajudam qualquer ferramenta a aprimorar sua funcionalidade. O Fluentd e o Logstash têm um ecossistema rico para plugins, incluindo vários sistemas de entrada (arquivos e TCP/UDP), filtros e destinos de saída (InfluxDb, Grafana Loki, Elasticsearch, AWS, GCP etc.).
A forma principal de gerenciamento destes plugins difere. O Logstash gerencia todos os plugins em um único repositório centralizado – há 199 plugins no repositório logstash-plugins do GitHub. O Fluentd, em contraparrida, segue uma abordagem descentralizada e não hospeda todos os plugins em um único repositório. Seu repositório oficial hospeda apenas 10 plugins e um índice para todos os demais repositórios. Mas, ele tem suporte para mais plugins do que o Logstash: cerca de 500 plugins.
Você pode conferir o repositório do Logstash no Github aqui, que tem todos os plugins do Logstash. Aqui está o link do índice de plugins do Fluentd.
Uso de memória/ desempenho
Embora o desempenho seja subjetivo, dependendo do caso de uso do usuário, o Logstash consome 120 MB a mais de memória do que o Fluentd, que utiliza 40 MB. Ademais, ao considerarmos os equipamentos modernos, essa discrepância pode parecer insignificante. No entanto, quando implementado em milhares de dispositivos de infraestrutura, essa diferença de 80*1000 representa um notável acréscimo de 80 GB de uso adicional de memória.
Portanto, no Logstash, você pode evitar esse problema executando o ElasticBeats em vez de executar o Logstash em um único leaf node. O ElasticBeats é um coletor de logs eficiente em termos de recursos criado para fins específicos, em que cada Beat se concentra em apenas uma fonte de dados e faz isso bem. O Fluentd usa o Fluent Bit, uma versão incorporável de baixo impacto do Fluentd escrita em C.
Se você estiver executando aplicativos pequenos, é recomendável usar o Fluent-bit, projeto este também da Cloud Native Computing Foundation (CNCF). Por outro lado, o Elastic beats é uma versão leve do Logstash. Para cargas de trabalho menores, é preferível usar o Elasticbeats. Mas se o seu caso de uso envolver mais processamento de dados além do transporte de dados, você precisará usar tanto o Logstash quanto o Elastic beats.
Transferência de dados
O Logstash não possuía um sistema de buffer embutido para transferência de dados. Nas versões mais recentes, o sistema foi aprimorado com a adição de filas persistentes (PQ) e Dead Letter Queue (DLQ), que são por padrão encontrram-se desabilitadas. Recomendamos incorporar brokers de filas externas, como Redis ou Kafka, ao pipeline para garantir persistência entre reinicializações. O Redis atua como um “corretor”, enfileirando eventos do Logstash provenientes de remetentes remotos do Logstash.
O Fluentd tem um sistema de buffer configurável embutido e não depende de filas externas para persistência. No entanto, a configuração é bastante complexa. Por causa disso, é mais seguro usar o Fluentd do que o Logstash em relação ao transporte de dados. Recomenda-se também incluir brokers de fila como Apache Kafka, RabbitMQ ou ZeroMQ com filas persistentes para garantir confiabilidade (reliability).
Roteamento de eventos
O roteamento de eventos significa o envio de dados e mensagens entre aplicativos e sistemas. Sua função é crucial ao avaliar um sistema de registro e gerenciar o roteamento de eventos.
O Fluentd usa uma abordagem de marcação, enquanto o Logstash usa instruções if-then-else para roteamento de eventos. Dessa forma, podemos definir determinados critérios com instruções If/Then/Else – para executar ações em nossos dados. A abordagem de marcação (tags) parece um pouco mais fácil de usar do que as instruções condicionais. Com o Fluentd você terá de marcar cada uma de suas fontes de dados (entradas). O Fluentd usa tags para comparar entradas com diferentes saídas e, em seguida, encaminha os eventos para a saída correspondente.
Interpretação de logs
Os componentes para análise de logs diferem de ferramenta para ferramenta. O Fluentd usa analisadores padrão incorporados (JSON, regex, CSV etc.), e o Logstash usa plugins para isso. Isso torna o Fluentd mais favorável em relação ao Logstash, pois não precisamos lidar com nenhum plugin externo para esse recurso. Existe a possibilidade também de criar seus próprios plugins, tanto em Logstash quanto em Fluentd, ambos em Ruby. A Vericode criou um plugin parsear log do protocolo FIX para Logstash e outro para Fluentd.
Suporte do Docker
O Docker fornece um driver de registro fluentd embutido. O driver de registro envia os registros do container para o coletor fluentd como dados de registro estruturados. No caso do Logstash, é necessário um agente extra (filebeat) no container para enviar os logs para o Logstash. Portanto, se você estiver executando seus aplicativos com o Docker, o Fluentd é uma opção mais natural. Os registros podem ser enviados diretamente para o serviço Fluentd a partir do STDOUT. O Fluentd torna a arquitetura geral de logging do Docker menos complexa e menos arriscada.
Quando preferir o Fluentd ao Logstash ou vice-versa?
Para os ambientes Kubernetes ou equipes que trabalham com o Docker, o Fluentd é o candidato ideal para um coletor de logs. O Fluentd tem um driver e um analisador de logs do Docker integrados. Você não precisa de um agente extra no container para enviar os logs para o Fluentd. Devido a esse recurso, o Fluentd torna a arquitetura menos complexa e menos arriscada para erros de registro. Além disso, se a memória for seu ponto fraco, opte pelo Fluentd, pois ele é mais eficiente em termos de memória devido à falta de dependências de JVM e de tempo de execução do Java.
A capacidade de processamento do Fluentd é maior do que do logstash, ou seja, se você pretende economizar dólares do seu orçamento de cloud: opte por Fluentd.
Se você possui múltiplas fontes de dados e pretende utilizar uma visualizar em um “Single Pane of Glass”, com visualizador Grafana ou outro, o Fluentd é a melhor opção.
Por outro lado, o Logstash funciona bem com o Elasticsearch e o Kibana. Portanto, se você já tiver o Elasticsearch e o Kibana em sua infraestrutura, o Logstash será sua melhor aposta para um coletor de logs.
A escolha para Log Analytics da Vericode – Prefira o Fluentd
Na comparação das duas ferramentas o Fluentd se mostrou mais eficiente e consumiu menos recursos que o Logstash uma vez que não precisa da JVM (java). Além disso, a quantidade de plugins do Fluentd é bem maior e eles não ficam centralizados, ao contrário do Logstash onde todos os plugins se encontram em um único repositório git.
Outra característica do Fluentd é sua abordagem de roteamento melhor, pois marcar eventos através de tags o que é mais fácil do que usar condições if-else.
Diante disso, caso haja a necessidade de realizar a coleta de um alto volume de logs, o Fluentd se apresenta como uma solução muito mais eficiente, reduzindo a necessidade de recursos computacionais para alcançar os mesmos objetivos em comparação ao Logstash e fornecendo um output para qualquer Plataforma de Log com seus Plugins.
E seu orçamento ainda sai ganhando, pois com você necessita de menos recursos computacionais, portanto, menor gastos com nuvem você terá.
Autores
Artigo produzido com base em “Fluentd vs Logstash – Choosing a Log collector for Log Analytics” por SigNoz, Setembro de 2023.