Linux: Enviando as mensagens de log para um banco de dados PostgreSQL

Este artigo descreve como instalar realizar a instalação e configuração do postgresql, de forma que ele possa ser utilizado para guardar as mensagens registradas por um servidor de log baseado no daemon do rsyslog.

Ao usar este tipo de configuração, ou seja, armazenar as mensagens de log em servidor de banco de dados, podemos realizar/construir consultas baseadas em SQL para localizar os eventos que mais nos interessam.

Antes de iniciarmos o processo de configuração devemos conferir o conteúdo do arquivo /etc/rsyslog.conf e observar a diretiva “IncludeConfig“.

A diretiva “IncludeConfig“. deve estar definida conforme as linhas abaixo:

# Include all config files in /etc/rsyslog.d/
$IncludeConfig /etc/rsyslog.d/*.conf

Caso o arquivo tenha sido alterado, salve as alterações e feche-o. Em seguida reinicie o daemon do rsyslog

sudo service rsyslog restart

Com o rsyslog ajustado , podemos passar para a configuração do banco de dados, inicialmente devemos realizar a instalação do dademons do postgresql e alguns outros aplicativos

sudo apt-get install postgresql phppgadmin apache2 joe

Para permitir que as outras máquinas possam acessar o SGDB, devemos liberar o daemon do postgresql para receber conexões externas. Desta forma, abra o arquivo de configuração do postgresql (/etc/postgresql/9.1/main/postgresql.conf) e insira a linha:

listen_addresses = '*'

Para carregar a nova configuração, reinicie o daemon do serviço

service postgresql restart

Provavelmente, o daemon deve estar aceitando conexões oriundas de qualquer endereço disponível na máquina, para verificar, podemos utilizar o comando abaixo:

lsof -i | grep postgre | grep -i listen

Caso o daemon tenha sido configurado e carregado corretamente, o comando anterior deve ter produzido uma saída semelhante às linhas abaixo:

postgres 17246 postgres 3u IPv4 24764 0t0 TCP *:postgresql (LISTEN)
postgres 17246 postgres 6u IPv6 24765 0t0 TCP *:postgresql (LISTEN)

Com isto podemos testar a conexão com o banco de dados, logo podemso executar os comandos:

su - postgres
psql -U postgres -l

O primeiro comando muda o usuário corrente para o usuário que pode gerenciar o banco de dados e o segundo lista os bancos atualmente disponíveis. A saída gerada pelo segundo comando deve ser semelhante à:

 List of databases
 Name | Owner | Encoding | Collate | Ctype | Access privileges
-----------+----------+----------+-------------+-------------+-----------------------
 postgres | postgres | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 |
 template0 | postgres | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres +
 | | | | | postgres=CTc/postgres
 template1 | postgres | UTF8 | pt_BR.UTF-8 | pt_BR.UTF-8 | =c/postgres +
 | | | | | postgres=CTc/postgres
(3 rows)

Podemos continuar os testes do banco executando a sequencia de comandos abaixo, que apresentará a data atual

psql -U postgres template1
 select current_date;
 q
exit

Com o SGDB funcionando corretamente, podemos criar um outro usuário para administrar o banco de dados. Por exemplo, como os comandos abaixo, criaremos o usurário denominado pgadmin ao qual será atribuida uma senha e quando for questionado se a regra deve gerar um “superuser” responda pressionando a tecla “y”.

su - postgres
createuser pgadmin -P
exit

Agora que já temos um outro administrador, podemos configurar a aplicação “phppgadmin“.  Utilizaremos esta aplicação para administrar o banco de dados.

O primeiro passo será remover o arquivo de índice do Apache e criar um novo em branco (vazio).

sudo rm /var/www/index.html && sudo touch /var/www/index.html

Para limitar o acesso ao phppgadmin devemos editar seu arquivo de configuração (/etc/apache2/conf.d/phppgadmin) e verificar se as seguintes linhas estão descomentadas:

order deny,allow
deny from all
allow from 127.0.0.0/255.0.0.0 ::1/128

Em seguida podemos adicionar linhas semelhantes à do exemplo abaixo para liberar o acesso à máquinas ou a intervalos de IPs

allow from 192.168.0.0/255.255.255.0

No exemplo acima, o serviço está sendo liberado para todas as máquinas da rede 192.168.0.0, cuja mascara de rede é 255.255.255.0, ou simplesmente /24.

Execute os comandos abaixo, para informar ao apache que ele deve carregar as configurações referentes ao phppgadmin

ln -s /etc/apache2/conf.d/phppgadmin  /etc/apache2/conf-available/phppgadmin.conf
a2enconf phppgadmin

Para ativar as configurações devemos reiniciar o daemon o apache

service apache2 restart

Até este ponto já estão configurados e instalados os daemons do postgresql, rsyslog e do apache, agora instalaremos o módulo rsyslog-pgsql que permitirá ao rsyslog publicar os dados logados no banco de dados, denominado Syslog, hospedado e gerenciado pelo postgresl. Para instalar o modulo podemos executar o comando abaixo:

sudo apt-get install rsyslog-pgsql

Quando for questionado se deseja configurar o base de dados para o rsyslog-pgsql com o dbconfig-common responda que “sim“.

Em seguida, informe uma senha a ser utilizada pela conta utilizada pelo rsyslog para publicar os dados no banco. Depois de digitar a senha será solicitada a confirmação da mesma.

Neste ponto, no servidor do postgresql, foram criados (i) o usuário e (ii) o banco de dados para armazenar os logs. Para verificar qual o nome do usuário e a senha utilizada basta listar o conteúdo do arquivo /etc/rsyslog.d/pgsql.conf, que deve conter uma linha semenlhante à:

*.* : ompgsql:localhost,Syslog,rsyslog,1J7BCF7GlNeQ

Nela, percebemos que o daemon responsável pelo registro dos log está utilizando o usuário ”’rsyslog”’, com a senha ”’1J7BCF7GlNeQ”’ para acessar o banco de dados ”’Syslog”’

Com o modulo instalado e configurado podemos reiniciar o deamon do rsyslog

service rsyslog restart

Para verificar se o rsyslog está conseguindo publicar os dados no banco de dados, podemos executar o comando abaixo:

lsof -i | grep rsyslogd

O qual deve produzir uma saída semelhante á:

rsyslogd 5570 syslog 4u IPv4 96454 0t0 TCP localhost:46159->localhost:postgresql (ESTABLISHED)

Se o banco de dados estiver instalado na mesma máquina que o servidor de log, podemos pular esta parte do processo de configuração, caso contrário devemos proceder a liberação do acesso o banco de dados Syslog hospedado no postgresql.

Para liberar o acesso ao banco, será necessário acrescentar uma ou várias linhas ao arquivo ”’/etc/postgresql/9.1/main/pg_hba.conf ”’.

Por exemplo, insira a seguinte linha ao final do arquivo. Ela informa ao postgresql que o usuário pgadmin pode acessar, a partir da máquina cujo endereço IP é ”’xxx.yyy.kkk.zzz”’ e após fornecer sua senha, todos os bancos hospedados pelo SGDB

host all pgadmin xxx.yyy.kkk.zzz/32 md5

Depois de atualizar o arquivo e salva-lo, devemos reiniciar o daemon do postgresql

service postgresql restart

Com isto finalizamos o processo de configuração de servidor de banco de dados e do daemon do rsyslog e a partir de agora as mensagens registradas pelo sistema de log serão encaminhadas para o banco de dados.