James Turnbull argumenta de forma convincente pela utilização do LogStash para centralização de logs, explicando detalhes de sua implementação dentro do contexto de um projeto de tratamento de logs. O livro The Logstash Book defende a facilidade de adoção e o nível de escalabilidade oferecidos. Turnbull falou sobre o livro no evento Hangops este ano e informou que:
O livro foi projetado para pessoas que nunca tiveram contato com o LogStash: administradores de sistemas, desenvolvedores, equipes de DevOps, e o pessoal de operação.
O Problema do excesso de simplificação do gerenciamento de log
Turnbull trabalha na área da administração de sistemas e segurança. Ele explica como o gerenciamento de log não é escalável nos ambientes computacionais. Geralmente o gerenciamento de log torna-se mais complexo a medida que os logs tornam-se mais importantes para as pessoas, ou seja, quando os problemas aparecem. Administradores frequentemente utilizam ferramentas clássicas como cat, tail, sed awk, perl e grep para examinar os registros de log. O uso dessas ferramentas não escala para um número maior de hosts e tipos variados de arquivos de log. Após perceber o problema de escalabilidade, as equipes normalmente seguem para o modelo de gerenciamento de log centralizado utilizando ferramentas como rsyslog e syslog-ng.
Enquanto esse modelo trata o problema da escalabilidade, Turnbull explica que não resolve a questão do gerenciamento de log pois atualmente existem um vasto número de tipos de eventos de log, formatos, fuzo horários e basicamente a falta de um contexto de entendimento fácil. Por fim, a equipe utilizará em seus ambientes computacionais a tecnologia de tratamento de logs que possuir mais vantagens nos quesitos armazenamento, busca, filtros e similares. Infelizmente este caminho inclui um custo relativamente elevado. O LogStash salva o dia, tendo como características pouca resistência para sua adoção e uma arquitetura completa projetada para atender os requisitos de escalabilidade para implantações de larga escala.
Resumo da arquitetura do LogStash
O LogStash oferece uma arquitetura que permite capturar, analisar e armazenar logs. Além disso, um dos principais casos de uso transversais para uma implementação de LogStash é permitir a visualização e localização de eventos de log gerenciados. Turnbull recomenda o projeto open source Kibana para localizar eventos. No inicio de maio, Jordan Sissel, criador do LogStash, comentou no Twitter sobre a última versão do LogStash carregar o kibana3: java -jar logstash.jar kibana. Tanto Turnbull como Sissel estão escrevendo sobre o Kibana pois ele oferece uma interface amigável para localização de eventos permitindo integração com o Elasticstorage, o motor de armazenamento do LogStash. A seguinte screenshot do Kibana foi tirada do capítulo 3 do livro do LogStash, além disso também é possível ver uma demostração online:
Além da visualização de logs, há uma arquitetura de componentes que gerencia o fluxo dos logs de diferentes servidores através de um componente intermediário e finalmente para um local de armazenamento. Turnbull leva os leitores para uma exploração das configurações de cada componente do LogStash, no qual utiliza o Redis (banco de de dados não relacional open source do tipo chave-valor), para enfileirar os registros de log a fim de prepará-los para a indexação. O seguinte diagrama do capítulo três exibe os tipos de componentes distintos da arquitetura: remetente (shipper), broker, indexador e o visualizador.
No livro, Turnbull explora as três principais funções dentro de uma instância do LogStash: tratamento de eventos de entrada, filtro de dados dos eventos e apresentação dos eventos. Estas três funções do LogStash são executadas baseadas nas informações de configuração armazenadas em simples arquivos de configuração ".conf". Os arquivos ".conf" possuem seções para cada um dos três tipos diferentes de plugins que o LogStash utiliza: entrada, filtro e saída. Cada instância do LogStash é customizada para atender os requisitos do seu propósito dentro da arquitetura. Por exemplo, essa seguinte configuração para um remente (contendo uma entrada e duas saídas) vem do capítulo três do livro:
input { redis { host => "10.0.0.1" type => "redis-input" data_type => "list" key => "logstash" } } output { stdout { debug => true } elasticsearch { cluster => "logstash" } }
O LogStash se encaixa na cultura DevOps
O LogStash é uma ferramenta open source feita para funcionar no ecossistema open source. Todas as ferramentas do ecossistema do LogStash são instaláveis, configuráveis e gerenciáveis por linha de comando, tornando-as ideal para automação. Ao longo do livro, Turnbull deixa claro que utilizar gerenciamento de configurações automatizado para controlar a instalação e configuração de cada componente LogStash é a melhor escolha. Entretanto, esse assunto está além do escopo do livro, então o próximo ponto interessante coberto pelo livro é instalação e configuração dos componentes do LogStash. Combinar o entendimento da instalação e configuração com a atividade de automação permite construir múltiplos ambiente de forma simples. O esforço é mínimo na montagem de ambientes para as diferentes fases do projeto, Q&A, resolução de problemas e suporte a Entrega Continua (Continuous Delivery).
Instalando o Java, LogStash, Redis e ElasticSearch
Turnbull demonstra a simples instalação passo-a-passo do LogStash e de seus componentes. Sissel fez dessa caracteristica um princípio no projeto do LogStash: "Se um novo usuário tem dificuldades, é um bug". O LogStash depende do Java, podendo ser uma simples instalação do OpenJDK. A maioria das distribuições Linux possuem a OpenJDK disponível em seus sistemas de gerenciamento de pacotes. Por exemplo, para realizar a instalação da OpenJDK no Debian/Ubuntu basta o comando "sudo apt-get install openjdk-7-jdk" e no Red Hat/CentOS, "sudo yum install java-1.7.0-openjdk". O LogStash é distribuído em um único arquivo JAR, podendo ser baixado na página LogStash.net. Os arquivos JAR e de configuração especificados na linha de comando são todo o necessário para iniciar o LogStash na OpenJDK. Como a OpenJDK, a instalação do Redis também é feita através do sistema de gerenciamento de pacotes, através do comando "sudo apt-get install redis-server" no Debian/Ubuntu e "sudo yum install redis" no Red Hat/CentOS. O Redis está pronto para processar os eventos de log logo após algumas poucas configurações no arquivo "/etc/redis/redis.conf" e início do serviço. Assim como o LogStash, o ElasticSearch também depende do Java e pode ser facilmente baixado no formato .deb para o Debian/Ubuntu ou .rpm para Red Hat/CetOS. Também precisa de algumas poucas configurações no arquivo "/etc/elasticsearch/elasticsearch.yml" e já está pronto para iniciar.
Componentes do LogStash: Remetente, Broker e Indexador
O livro aborda os três tipos de plugins do LogStash no contexto de seu uso com remetentes e indexadores. Turnbull mostra como utilizar os seguintes plugins de entrada com o LogStash: arquivo, stdin, syslog, lumberjack e redis. Para ambientes que o LogStash não pode ser instalado, há outras maneiras de enviar eventos para o LogStash: syslog, Lumberjack, Beaver e Woodchuck. Além dos dois principais plugins de saída apresentados, Redis e ElasticSearch. Turnbull também apresenta outros plugins de saída que se integram com outros sistemas: Nagios, alertas de e-mail, mensagem instantânea e StatsD/Graphite.
Os filtros apresentados no livro incluem: grok, date, grep, e multiline. Turnbull mostra como plugins de filtro podem melhorar a eficiência do processamento de log de aplicações Java e logs do Postfix. Em alguns casos os logs podem ser filtrados antes mesmo do LogStash recebê-los como entrada. Por exemplo, o Apache Logging permite formatos customizados no formato JSON, podendo facilmente processar sem a necessidade de um plugin de filtro. O broker, no exemplo utilizando o Redis, gerencia o fluxo de eventos. O LogStash suporta outras tecnologias de filas: AMPQ e ZeroMQ. A instância do indexador do LogStash faz o roteamento para pesquisa e armazenamento.
Escalando o LogStash
Escalar o LogStash envolve três principais pontos: resiliência, performance e integridade. O diagrama a seguir tirado do capítulo sete do livro, ilustra o processo de escalação do Redis, LogStash e ElasticSearch:
O LogStash não depende diretamente do Redis para se recuperar de falhas. Ao invés disso, ele envia eventos para uma das duas instâncias de Redis configuradas. Caso uma das instâncias selecionadas esteja indisponível no momento, o LogStash começa a enviar eventos para a outra instância de Redis configurada. Como indexador, o LogStash é facilmente escalável criando múltiplas instâncias que recebem constantemente eventos dos brokers disponíveis e enviam mensagens ao ElasticSearch. Com essa arquitetura, os eventos estão disponíveis somente para um Broker de cada vez, não havendo mensagens duplicadas sendo entregues ao indexador do LogStash e para o ElasticSearch. O ElasticSearch se organiza em cluster sozinho ao ser instalado em várias instâncias e estas possuem configurações em comum. Ele usa multicast, unicast, ou um plugin para EC2 para se organizar em cluster. Enquanto a rede permitir, os nós do cluster se comunicam e começaram a dividir dados entre eles. A divisão dos dados é feita automaticamente e foca em resiliência e performance.
A InfoQ.com também entrevistou James Turnbull sobre o LogStash.
InfoQ.com: Quais os benefícios e desvantagens você considera estarem agregados a um caso de sucesso que utiliza um sistema de tratamento de logs centralizado com o LogStash?
Turnbull: Os benefícios do LogStash são típicos da maioria das ferramentas open source de gerenciamento de sistemas: baixo custo do sofware, código aberto (que torná-o extensível); possui desenvolvimento e correções rápidas de bugs; uma comunidade incrível desenvolvendo novas soluções e ajudando uns aos outros e a possibilidade de priorizar tarefas para resolver seu problema. As desvantagens também se equiparam com a maioria das ferramentas open source: sem suporte comercial, e nem tantas funcionalidades quanto uma alternativa comercial; também pode haver uma resistência para sua adesão, tanto ligado às habilidades necessárias quanto na documentação disponível (apesar de agora você poder contar com um livro incrível!) para sua implantação.
InfoQ.com: Por que uma equipe de DevOps escolheria utilizar as ferramentas fornecidas pelo LogStash ao invés de ferramentas comerciais como o Splunk?
Turnbull: O principal motivador dessa escolha, pela equipe de DevOps, seria o custo. Enquanto o LogStash (e seu dashboard Kibana) não possuem as mesmas capacidades do Splunk (ainda), esse conjunto vem ganhando rapidamente novas funcionalidades. Enquanto isso o Splunk possui um preço considerável agregado que muitas pequenas empresas não podem custear. É importante salientar que enquanto o software for livre, ainda há um custo de implementação que pode ou não ser comparado com os custos das ferramentas comerciais.
InfoQ.com: Quais os usos mais simples e uteis para a atividade de tratamento de log? Caso sejam diferentes para equipes diferentes dentro de uma empresa, poderia descrever esta diferença?
Turnbull: Os melhores casos de uso para o tratamento de logs são resolução de problemas e monitoração. Os dados de log da sua aplicação são na maioria das vezes a melhor fonte de informação quando você está enfrentando um problema na sua infraestrutura. Os dados de log também representam uma excelente fonte de dados para monitoração de estado e eventos da sua infraestrutura e na construção de métricas para medir a performance da sua aplicação.
Dito isso, equipes distintas dentro de uma organização podem ter interesses distintos para os casos de uso citados. Por exemplo, equipes operacionais focam em resolução de problemas e desempenho que os dados de log podem auxiliar. Desenvolvedores são bastante interessados em usar os dados de log para ajudar na procura e correção de bugs. Equipes de segurança focam em identificar vulnerabilidades e incidentes de segurança que os dados de log podem destacar.
Sobre o Autor do livro:
James Turnbull é autor de seis livros técnicos sobre software livre e um membro antigo da comunidade de sofware livre. Turnbull é autor do primeiro (e segundo!) livro sobre o Puppet e trabalha na Puppet Labs na área de Operações e Serviço Profissionais. Turnbull palestra regularmente em eventos como OSCON, Linux.conf.au, FOSDEM, OpenSourceBridge, DevOpsDays e muitos outros. Ele foi presidente da Linux Australia; membro do comitê da Linux Victoria; tesoureiro da Linux.conf.au 2008 e trabalha para o comitê da Linux.conf.au e OSCON.