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

Publicado por Mauricio Vieira Gomes da Silva em 04/02/2009

[ Hits: 27.830 ]

 


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

Outras dicas deste autor

Instalação de proxy autenticado com Squid

VMWare: Rede não funciona quando clona VM

Criando um bridge com MasterShaper (Firewall + QoS)

Alterando a senha de root no Metasys Corporate MC

Leitura recomendada

Ativando e desativando a placa de rede em um Telecentro (Metasys)

Site com pacotes do Slackware

Ubuntu sem antialias com fontes estilo Windows XP

Instalação do Metasploit Framework

Ratio Master no Linux através do Wine

  

Comentários
[1] Comentário enviado por mayconplanet em 11/01/2012 - 13:13h

Valew meu brother o seu post tirou uma dúvida e resolveu um grande problema que estava ocorrendo no Rsyslog do meu trabalho! srrssr O banco estava carregando logs desnecessários.

[2] Comentário enviado por bleckout em 30/04/2015 - 17:35h

Eu sou novato, então fiquei com algumas dúvidas;

- Como posso monitorar o espaço do banco de dados?
- E se lotar?
- Tem como eu escolher quais dados do Rsyslog que serão gravados banco de dados?
___________________________________________________________________
[i]"Vivemos todos sob o mesmo céu, mas nem todos temos o mesmo horizonte." - Konrad Adenauer
Ubuntu 14.04 LTS amd64 - Core i7 3770K, 8GB RAM - NVIDIA GTX 760 Windforce[/i]



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts