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
$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