Páginas

terça-feira, 3 de dezembro de 2013

Rsyslog - Gravando os logs do syslog em um banco de dados

Os montes de informações gerados pelos bons serviços de log sobrecarregam o armazenamento e o grep. Será que acoplar o syslog a um banco de dados ajuda? 

Introdução

Há algum tempo implementei um servidor de logs baseado em Debian no meu local de trabalho (até publiquei na comunidade o artigo), o que nos resolveu muitos problemas, especialmente de espaço em disco nos demais servidores e de centralização das informações de log do datacenter. 

Contudo, essa implementação nos trouxe um novo problema: depois de alguns meses, nosso servidor de log não estava comportando mais arquivos de log. Só nossos filtros de spam chegaram a registrar logfiles de mais de 1 GB por dia! 

Um outro problema detectado é a demora do grep para procurar uma informação em arquivos grandes, o que por vezes acabava fazendo com que o trabalho de obter estatísticas sobre nossos servidores se tornasse uma tarefa homérica e, por várias vezes, inviável, em decorrência do tempo demandado para a pesquisa e o tempo disponível para a apresentação dos resultados. 

Existe uma solução relativamente simples de implementar e bastante eficiente pra resolver os problemas de armazenamento e, especialmente, de pesquisa aos logs gerados pelo syslog. Chama-se Rsyslog.

O Rsyslog insere os logs diretamente num banco de dados MySQL ou PostgreSQL, o que significa que é possível substituir os comandos do grep por rápidos comandos SQL. O Rsyslog está disponível em várias distros e é o syslog padrão do Fedora 8, por exemplo. 

Implementando

Eu usei meu desktop como laboratório para a implementação do Rsyslog, um Ubuntu 8.10. Ele utiliza o sysklogd, o que facilita a migração para o Rsyslog. Inicialmente é possível até mesmo manter o arquivo syslog.conf. Em sua maioria, o arquivo de configuração do Rsyslog tem o mesmo formato que o sistema legado, embora suporte algumas opções a mais para conexão a banco de dados. 

Primeiramente é necessário instalar o pacote do Rsyslog. ele está disponível nos repositórios do Ubuntu e Debian, podendo ser instalado bastando executar o comando: 

$ sudo apt-get install rsyslog rsyslog-mysql (para uso com MySQL) 
ou
$ sudo apt-get install rsyslog rsyslog-pgsql (para uso com PostgreSQL) 

Caso não encontre os pacotes do Rsyslog nos repositórios de sua distribuição, ou sua distribuição não utilize pacotes, você pode baixar o Rsyslog no site oficial do projeto (www.rsyslog.com). Daí, é só descompactar e compilá-lo. 

Configurando o banco de dados

Depois de instalado o rsyslog, vamos configurar o banco de dados para que possa receber os logs do syslogd. 

É necessário que um dos bancos de dados (MySQL ou PostgreSQL) estejam previamente instalados na máquina. Não vou me delongar aqui sobre a instalação e configuração de banco de dados, por não ser o foco do artigo e existirem diversos artigos sobre o assunto já escritos. 

Para isso, pode-se utilizar o assistente que é executado na instalação do rsyslog, ou executar o script "createDB.sql", que é fornecido junto com o pacote Rsyslog. 

Em ambos os casos, um banco de dados chamado Syslog será criado, assim como todas as tabelas necessárias. 

Em seguida, no prompt do MySQL (ou PostgreSQL), deve-se criar um usuário e e atribuir-lhe os privilégios: 

mysql> grant ALL ON Syslog.* to rsyslog@localhost identified by 'secret';
mysql> flush privileges; 

Depois é muito fácil ordenar o Rsyslog pra que use o banco de dados - bastam duas linhas no arquivo /etc/rsyslog.d/mysql.conf (ou pgsql.conf, para o PostgreSQL): 

#Carrega o módulo para acesso ao banco de dados MySQL
$ModLoad MySQL

# Define o recurso de log que contém as entradas que o Rsyslog deve inserir no banco de dados, seguido pelos parâmetros de acesso ao BD.
# Nome_da_Máquina.Nome_do_Banco_de_Dados.Usuário_MySQL.Senha
# No caso abaixo, apenas os logs do recurso de e-mail serão gravados no banco de dados.

mail.* > localhost.Syslog.rsyslog.secret

Após implementado, verifiquei meu banco de dados e vi que ele já estava gravando os logs no MySQL, como demonstra a figura abaixo:

Não é a solução definitiva do problema, principalmente quanto ao armazenamento, mas facilita e muito a procura por algum log específico dentro do servidor de logs. 

Fonte: Linux Magazine: n° 43 - junho/08, pg 10 

Nenhum comentário:

Postar um comentário