Log centralizado

Propaganda
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
Download