TUTORIAL | Armazenamento e pesquisa de logs Armazenamento e pesquisa de logs TUTORIAL Log centralizado Quando algo dá errado em um sistema, o arquivo de log é o primeiro lugar onde devemos procurar pistas para solução do problema. O Logstash, um servidor de log que possui ferramentas de análise, consolida logs de muitos servidores e faz até mesmo com que os dados sejam pesquisáveis. por Martin Loschwitz S e algo der errado em uma rede corporativa, o administrador deve encontrar e resolver o problema rapidamente. Encontrar informações geralmente não é um problema – a maioria dos sistemas de TI produzem um fluxo constante de entradas de log no sistema e mensagens de erro – mas, avaliando essas informações corretamente em redes complexas onde estão presentes muitos dispositivos, sistemas e servidores, na maior parte das vezes é mais fácil dizer do que fazer. Um problema é a quantidade de informação produzida. Por um lado, uma ferramenta como o Pacemaker Cluster Manager é particularmente detalhada, produzindo muitas vezes a saída necessária. Com o Apache, por outro lado, os dados podem acabar indo parar em muitos lugares se o administrador definir o armazenamento do log de cada host separadamente. Em servidores web que atendem à muitos clientes, um grande número de arquivos de log se acumulam, o que significa que a depuração de problemas específicos para um usuário individual pode ser uma tarefa interminável. Ambientes de computação em nuvem que dependem do OpenStack, como o CloudStack ou outras plataformas de nuvem, raramente possuem menos de 20 servidores e a proliferação de logs de servidor é proporcional ao número de sistemas presentes nestes servidores. A solução clássica é que o servidor de log colete Figura 1 A organização e gerenciamento das mensagens de log não são tratadas pelo Logstash mas pelo ElasticSearch, que é executado em segundo plano. 62 os logs em um sistema centralizado, ao invés de deixá-los espalhados por toda a rede. Esta abordagem ajuda a evitar a digitação excessiva quando se navega entre servidores via SSH. Alguns arquivos de log até mesmo indexam os logs para uma pesquisa rápida e conveniente. Ferramentas comerciais como o Splunk [1] fornecem este tipo de serviço de log de valor agregado. A resposta da comunidade de código aberto para essas ferramentas de log comercial é o Logstash [2], um serviço de login centralizado que oferece uma opção para procurar por entradas de log existentes via interface web. O Logstash e seus assistentes O Logstash por si só não assegura uma gestão significativa e centralizada de arquivos de log. Para desempenhar suas tarefas como esperado, o Logstash precisa de alguma ajuda. O programa em si é um aplicativo Java e, apesar de todos os preconceitos que os administradores têm contra o Java – justificados ou não – a decisão dos desenvolvedores do Logstash de seguir com o Java foi bem fundamentada. Como o Java está naturalmente instalado no Windows, o Logstash pode incluir arquivos de log do Windows em sua coleção; isto seria difícil de conseguir com os outros serviços Rsyslog, na maior parte dos casos. www.linuxmagazine.com.br Armazenamento e pesquisa de logs | TUTORIAL A instalação Logstash que se estende ao longo de mais de um servidor consiste em ao menos cinco serviços diferentes. O papel central é desempenhado pelos próprios componentes do Logstash: o shipper – basicamente um cliente executando sobre cada sistema de destino – coleta as mensagens de log. No próximo passo, ele as envia para o indexer, um indexador que interpreta e processa as mensagens de log, conforme especificado pelo administrador. O host no qual o indexador é encontrado geralmente também executa o servidor web Logstash, que oferece aos administradores uma caixa de pesquisa para arquivos de log. Em segundo plano, dois outros serviços que não pertencem diretamente ao Logstash, mas que são importantes para o seu funcionamento, cumprem suas funções: o agente de mensagens Redis e o ambiente de armazenamento e pesquisa ElasticSearch. O Redis é o ponto central da comunicação entre o shipper e o indexer. O Logstash em cada servidor entrega suas mensagens para o servidor Redis, onde o indexador Logstash os recupera no passo seguinte. O ElasticSearch, também um aplicativo Java, compila o índice no segundo plano e fornece a interface para a qual o servidor web Logstash encaminha solicitações de pesquisa da interface web. Design modular Uma grande vantagem do Logstash é a sua diversidade, que surge a partir do design modular e torna a ferramenta muito flexível: até alguns meses atrás, por exemplo, era comum as instalações Logstash usarem um corretor AMQP no lugar do Redis – sendo o RabbitMQ [3] a escolha padrão. No entanto, o módulo amqp para Logstash não era muito bem desenvolvido e nem era particularmente popular entre os desenvolvedores do Logstash. A decisão de mudar para um agente diferente foi implementada de forma muito fácil, pois apenas a interface para o agente Linux Magazine #103 | Junho de 2013 de mensagens precisava ser codificada. Enquanto isso, o conector Redis funciona perfeitamente e o RabbitMQ tornou-se uma relíquia do passado. Sem limites Em outros lugares, o Logstash impõe uma criatividade praticamente sem limites para o administrador: a ferramenta não só oferece a possibilidade de arquivar entradas de log via filtros definidos como também interpretá-las pois as entradas de log individuais são indexadas e tornam-se pesquisáveis. Por exemplo, na requisição, o Logstash gerencia os logs HTTP, permitindo a busca sistemática mais tarde na interface web para todas as consultas possíveis que causaram um “erro interno”. Aplicado ao Pacemaker, por exemplo, isso significa que os administradores poderiam procurar expressamente por mensagens de log com pacemakers um prefixo ERROR. Os filtros também podem ser projetados para remover completamente várias entradas de registros de log. Por exemplo, se quisermos manter mensagens syslog clássicas fora do arquivo de log, será preciso somente modificar a configuração do shipper Logstash. Configuração de teste Se o usuário quiser experimentar o Logstash, estará com sorte. Contrariamente às alegações feitas na Internet, a instalação de nenhuma maneira é uma tarefa hercúlea. Apenas é preciso esclarecer de antemão qual papel será atribuído a qual host. Uma vez que estiver claro em qual host o servidor Redis, o ElasticSearch e o indexador Logstash estarão funcionando, a tarefa estará concluída. O exemplo a seguir é baseado no Ubuntu 12.04, mas também funciona no Debian. Pacotes RPM para Redis e ElasticSearch para distribuições empresariais típicas também estão disponíveis na web, incluindo RHEL e SLES. A facilidade de instalação do Redis depende muito se os pacotes de servidor Redis existem de fato para o sistema do usuário. No Ubuntu, um simples apt‑get install redis‑server instala os componentes. Em seguida, é aconselhável modificar a entrada 127.0.0.1 no arquivo /etc/re‑ dis/redis.conf para que ela contenha o endereço IP do host; caso contrário, o Redis conecta-se ao host local, que impede que outros hosts entreguem suas mensagens Logstash diretamente para o Redis. Aqueles que valorizam a segurança devem definir uma senha para o acesso através da diretiva requirepass no arquivo redis.conf. Instalação do ElasticSearch O ElasticSearch (figura 1) é um aplicativo Java como o Logstash; mas, infelizmente, nenhum dos pacotes estão disponíveis para Ubuntu. Felizmente, a ajuda está disponível no Upstream, que oferece um pacote Debian pré- Listagem 1: shipper.conf 01 02 03 04 05 06 08 09 10 11 input { file { type => "syslog" # Wildcards work here :) path => [ "/var/log/ messages", "/var/log/07 syslog", "/var/log/*.log" ] } file { type => "apache‑access" path => "/var/log/apache2/ access.log" } 12 13 14 file { 15 type => "apache‑error" 16 path => "/var/log/apache2/ error.log" 17 } 18 } 19 20 output { 21 stdout { debug => true debug_ format => "json"} 22 redis { host => "192.168.122.165" data_ type => 23 "list" key => "logstash" } 24} 63 TUTORIAL | Armazenamento e pesquisa de logs -compilado para Ubuntu em seu site [4] ou que pode ser instalado com o comando dpkg -i. O comando inicialmente retorna uma mensagem de erro por conta de dependências que não são cumpridas. Após publicar o comando apt‑get ‑f install, o ElasticSearch está pronto. Por padrão, o ElasticSearch também escuta o endereço 127.0.0.1, então um indexador deve ser executado no mesmo host. Se o usuário quiser que o ElasticSearch e o serviço de indexação Logstash executem em diferentes hosts, encontrará as chaves necessárias para isso no arquivo /etc/elasticsearch/ elasticsearch.yml; eles atendem pelos nomes network.bind_host e network.host. Envio de dados Em seguida, devemos configurar o próprio Logstash. É importante que este não venha sob a forma de bibliotecas Java individuais para o cliente e servidor, mas como um grande arquivo para todos os serviços. As tarefas que uma instância do Logstash executa dependem do conteúdo do arquivo que a ferramenta utiliza como fonte para sua configuração. Após baixar o arquivo Logstash JAR [4], o usuário só precisa escolher os parâmetros corretos. Para configurar um shipper, o arquivo shipper.conf deve aparecer como na listagem 1. Com esta configuração, o Logstash enviaria as mensagens a partir dos arquivos do syslog e do Apache para o indexador no domínio virtual padrão. O host com o indexador nes- Listagem 2: Indexer.conf 01 input { 02 redis { 03 host => "192.168.122.165" 04 type => "redis‑input" 05 data_type => "list" 06 key => "logstash" 07 format => "json_event" 08 } 09 } 10 output { 11 elasticsearch { 12 host => "192.168.122.165" 13 } 14} 64 Figura 2 Uma pesquisa nos registros Logstash em busca de “Network Manager” exibe mensagens cronologicamente ordenadas. te exemplo é 192.168.122.165. A chave mostrada na linha 22 pode ser um pouco confusa; não se refere a uma chave criada para fins de autenticação, mas ao valor usado pelo Redis como o nome da fila Logstash. Com este arquivo de configuração, o comando: Em contraste com o shipper, o indexador praticamente não produz nenhuma saída própria no canal de saída padrão, por isso, se tudo estiver calmo por lá, o usuário não tem nenhuma razão para se preocupar. java ‑jar logstash‑1.1.9‑monolithic.jar agent ‑f shipper.conf Finalmente, precisamos do próprio servidor web Logstash; ele não precisa de um arquivo de configuração próprio e pode ser iniciado com: inicia o Logstash. Indexação Configurar o indexador não é complicado se começarmos com uma configuração adequada ( listagem 2). A configuração Logstash é, assim, dividida em entrada e saída de blocos, que – conforme o nome sugere – especificam como o serviço começa e para onde ele encaminha suas novidades. O indexador inicia seu trabalho diário com o comando: java ‑jar logstash‑1.1.9‑monolithic.jar agent ‑f indexer.conf Servidor java ‑jar logstash‑1.1.9‑monolithic.jar web ‑‑backend elasticsear ch://192.168.122.165/ Depois disso, o usuário deve ser capaz de efetuar login imediatamente no sistema Logstash na porta 9292 ( figura 2 ). Neste exemplo, o endereço completo seria http://192.168.122.165:9292. Logo após a primeira inicialização, mensagens de log devem começar a chegar (figura 3); alternativamente, podemos verificar o processo Figura 3 Atualizações de status do Logstash revelam como o software funciona: ele envia mensagens de log para o Redis. www.linuxmagazine.com.br Armazenamento e pesquisa de logs | TUTORIAL através da caixa de pesquisa. Isso basicamente completa os principais passos de instalação do Logstash. O sysops tem a liberdade de “enfeitar” a configuração para atender às suas próprias necessidades. Por exemplo, o usuário normalmente quer executar o shipper Logstash em todos os sistemas na inicialização, o que significa criar um script de inicialização correspondente (se quiser evitar o trabalho, é possível encontrar scripts predefinidos na web). Criar filtros específicos para alavancar todas as opções da solução também é aconselhável. Uma visão geral das possíveis opções de filtro Gostou do artigo? Queremos ouvir sua opinião. Fale conosco em: [email protected] Este artigo no nosso site: http://lnm.com.br/article/8653 Linux Magazine #103 | Junho de 2013 Logstash, que também suportam expressões regulares, pode ser encontrada no site do fornecedor [5], em conjunto com uma extensa documentação. Conclusão O Logstash é uma solução muito elegante para log centralizado. Livros de alguns especialistas e receitas Puppet já estão disponíveis, o que é especialmente útil para administradores que mantêm grandes parques computacionais e trabalham com gerenciamento centralizado de arquivos de configuração. O Logstash pode ser adaptado facilmente em tais configurações. No entanto, o Logstash realmente mostra a que veio quando pesquisa por logs. Administradores que têm procurado manualmente através de dezenas de milhares de linhas irão encontrar na solução de problemas do Logstash uma verdadeira revelação. Apenas os administradores com pronunciada alergia ao Java não devem apreciá-lo. n Mais informações [1] Splunk: http://www.splunk.com [2] Logstash: http://www.logstash.net [3] RabbitMQ: http://www.rabbitmq.com [4] Download do ElasticSearch: http://www.elasticsearch. org/download/2013/02/14/0.20.5.html [5] Exemplos de filtros: https://github.com/logstash/grok‑patterns 65