domingo, 14 de fevereiro de 2010

Fazendo o Apache gravar os logs no MySQL.

Uma coisa bem bacana de se fazer, é colocar os logs do Apache em um banco de dados, principalmente se você quiser montar uma ferramenta para análise da maneira que precisa. Não é complicado de ser feito, como veremos no decorrer deste artigo.

Continuar lendo...

Como base para este artigo, foi utilizado CentOS 5.4, MySQL 5.0.77 previamente instalados e configurados. Também foi necessário o repositório RPMForge configurado para baixar o pacote previamente compilado.

Com os prérequisitos instalados e configurados, o procedimento de instalação é bem simples. Para instalar o pacote, utilize o seguinte comando:

yum install mod_log_sql
Após alguns instantes o pacote será instalado.

Agora vamos a parte mais bacana: a configuração.

Há 3 maneiras como este módulo trabalha:
  • O administrador cria as tabelas e configura quais hosts virtuais serão logados.
  • O módulo cria as tabelas e o administrador configura quais hosts virtuais serão logados.
  • O módulo cria as tableas e loga todos os hosts.
Aqui aborademos a última por ser a mais simples e a que resolve minha necessidade (logar diversos domínios em tabelas separadas).

No diretório /etc/httpd/conf.d você irá encontrar o arquivo mod_log_sql.conf criado pelo pacote. Edite-o com seu editor de textos preferido e descomente as seguintes linhas:
LoadModule log_sql_module modules/mod_log_sql.so
LoadModule log_sql_mysql_module modules/mod_log_sql_mysql.so
[IfModule mod_ssl.c]
        LoadModule log_sql_ssl_module modules/mod_log_sql_ssl.so
[/IfModule]
Mais abaixo você verá as linhas:
#LogSQLLoginInfo mysql://loguser:l0gg3r@dbmachine.foo.com/apachelogs
#LogSQLDBParam port 3306
Remova os comentários e substitua loguser pelo usuário a ser utilizado, l0gg3r pela senha de acesso deste usuário ao MySQL. dbmachine.foo.com corresponde ao nome da máquina ou IP onde o MySQL está sendo executado e apachelogs é o nome do banco que receberá os logs.

Ainda neste mesmo arquivo, acrescente as duas linhas abaixo:

LogSQLCreateTables on
LogSQLMassVirtualHosting on
Agora salve o arquivo e saia do seu editor.

Crie o usuário (loguser) mencionado acima com os comandos:
# mysql -p
mysql> GRANT INSERT,CREATE ON apachelogs.* TO 'loguser'@'dbmachine.foo.com' IDENTIFIED BY 'l0gg3r'.
mysql> flush privileges;
mysql> quit;
Agora basta apenas reiniciar o serviço do Apache.
# service httpd restart
Caso tudo tenha funcionado, acesse uma página hospedada em seu servidor. Através do prompt de comando, digite o comando:
#mysqlshow -p apachelogs
Você deverá ver pelo menos uma tabela criada pelo módulo logando o acesso.

Caso você deseje utilizar as configurações específicas para cada host virtual, a documentação está presente no diretório /var/share/doc/mod_log_sql-1.100.

Não deixe de ver as considerações sobre performance relacionadas a este assunto neste link.

Fica aí a dica.

Nenhum comentário: