Servidor de log no Debian com Syslog-ng

Instalação dos requisitos

Requisitos:

  • Ambiente LAMP (Linux, Apache, MySQL e PHP)
  • Syslog-ng
  • PHP-Syslog-ng

Eu utilizo o repositório oficial do Debian no Brasil:

deb http://ftp.br.debian.org/debian squeeze main contrib non-free

Caso não tenha esse repositório, aconselho adicionar ao seu sources.list. Comece instalando o ambiente LAMP:

# apt-get install apache2 mysql-server php5 php5-mysql 

Defina sua senha para o banco e aguarde a configuração dos pacotes baixados.

Agora vamos instalar o syslog-ng:

# apt-get install syslog-ng

Precisamos baixar o Php-Syslog-ng, faça o download da versão desejada aqui:

Neste artigo utilizaremos a versão 2.8. Após feito o download, vamos descompactar o mesmo no diretório padrão do apache:

# tar -zxvf phpsyslogng-2.8.tar.gz -C /var/www

Então renomeie o diretório descompactado para phpsyslog:

# cd /var/www
# mv phpsyslogng-2.8 phpsyslog

Adaptando e configurando o banco MySQL

Vamos, editar o arquivo dbsetup.sql para então rodar ele no nosso banco MySQL. Ainda no diretório /var/www, acesse phpsyslog/scripts e abra o arquivo dbsetup.sql:

# vim dbsetup.sql

Agora procure pelas linhas:

# create users
INSERT INTO user (Host, User, Password) VALUES (‘localhost’,’sysloguser’, password(‘PW_HERE’));
INSERT INTO db (Host, Db, User) VALUES (‘localhost’,’syslog’,’sysloguser’);INSERT INTO user (Host, User, Password) VALUES (‘localhost’,’syslogfeeder’, password(‘PW_HERE’));
INSERT INTO db (Host, Db, User) VALUES (‘localhost’,’syslog’,’syslogfeeder’);

INSERT INTO user (Host, User, Password) VALUES (‘localhost’,’syslogadmin’,password(‘PW_HERE’));
INSERT INTO db (Host, Db, User) VALUES (‘localhost’,’syslog’,’syslogadmin’);
COMMIT;
FLUSH PRIVILEGES;

Modifique onde tem “PW_HERE” para o password que você definiu na instalação do MySQL. Salve e feche o arquivo, então digite:

# mysql -u root -p < dbsetup.sql

Digite seu password de root do MySQL. Vamos editar também o arquivo syslog2mysql.sh, que é um script que grava os logs (fazendo um redirecionamento) no MySQL (já que o syslog-ng não faz isso diretamente e precisa de uma ajuda desse script):

# vim syslog2mysql.sh

Edite a linha:

mysql -u syslogfeeder –password=PW_HERE syslog < /var/log/mysql.pipe >/dev/null

Trocando PW_HERE pelo password do usuário root do banco:

mysql -u syslogfeeder –password=SUA_SENHA syslog < /var/log/mysql.pipe >/dev/null

Agora salve e feche. Vamos executar o script:

# ./syslog2mysql.sh & 

Configurando o Apache2

Antes de acessar pelo navegador, adicione no final do arquivo de configuração do seu apache (no caso do Debian /etc/apache2/apache2.conf) a seguinte linha:

AddType application/x-httpd-php .phtml .php

Ou seja, abra o arquivo e insira no final do arquivo a linha acima:

# vim /etc/apache2/apache2.conf

Apesar das configurações feitas, o Php-Syslog-ng ainda não está pronto. Precisamos incluir a senha do usuário root do banco de dados no arquivo de configuração dele. Observe que se você tentar acessar sem inserir essa senha no arquivo de configuração, será exibida uma página que no topo terá uma mensagem assim:

A database connection problem was encountered.
Please check config/config.php to make sure everything is correct and make sure the MySQL server is up and running.

Então abra o arquivo de configuração localizado em /var/www/phpsyslog/config/config.php.

Onde tiver “PW_HERE”, coloque o password do banco, depois salve e feche o arquivo. Agora reinicie o serviço do Apache da seguinte maneira:

# /etc/init.d/apache2 restart

Finalizando e colocando em execução

Acesse o diretório /var/www/phpsyslogng-2.8/scripts. Configure o Syslog-ng para gravar os dados no MySQL da seguinte maneira:

# cd /var/www/phpsyslogng-2.8/scripts
# cat syslog.conf >> /etc/syslog-ng/syslog-ng.conf 

Abra o arquivo /etc/default/syslog-ng e descomente essa linha:

CONSOLE_LOG_LEVEL=1

Vá ao arquivo de configuração do syslog-ng para editarmos algumas linhas. Utilize seu editor de texto preferido:

# vim /etc/syslog-ng/syslog-ng.conf 

Agora procure pela linha comentada, onde tem:

#udp();

E descomente. Faça o mesmo para use_dns(no), alterando o estado de “no” para “yes” e vamos adicionar outra linha. Depois de realizar a busca, você deve encontrar a linha assim:

#use_dns(no);

Deixe com “yes” e adicione a linha “dns_cache(yes);”:

use_dns(yes);
dns_cache(yes);

Agora sim, acesse do seu navegador a página com o endereço do servidor e o complemento “phpsyslog”, exemplo:

http://192.168.10.5/phpsyslog

Login: admin
Senha: admin

Após efetuar o login, se você recebe um erro do tipo:

“Query failed: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ” at line 1″

Calma, não altere nada em seu banco de dados. Basta editar o arquivo config.php (/var/www/phpsyslog/config/config.php), alterando a linha que diz:

define(‘USE_CACHE’, TRUE);

Para:

define(‘USE_CACHE’, FALSE);

Ou seja, alteramos apenas de “TRUE” para “FALSE”, reinicie o apache e tente acessar novamente.

Para os clientes, basta instalar o syslog. Para instalar em um cliente Debian:

# apt-get install sysklogd

Vá até o arquivo central de configuração e adicione a linha para que todos os logs sejam redirecionados para o nosso servidor de log central:

# vim /etc/syslog.conf

Adicione a linha:

*.*            @IPDOSERVIDOR
Rolar para cima