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

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

[ Hits: 27.797 ]

 


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

Criando um bridge com MasterShaper (Firewall + QoS)

Alterando a senha de root no Metasys Corporate MC

Instalação de proxy autenticado com Squid

VMWare: Rede não funciona quando clona VM

Leitura recomendada

Trabalhando com dois monitores e duas placas de áudio ao mesmo tempo

Implementando servidor de horas no Linux

Operadores booleanos

XMMS - Colocando ordem no random

Transformando linhas em colunas com SQL (pivoteamento)

  

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