MYSAR – install/configure

Idéia

Ter apenas uma máquina rodando com Apache, MySQL e PHP para ter todos os logs do Squid centralizados nela. Isso facilita manutenção e diminui o consumo de recurso nas máquinas onde o proxy está no ar.


Ambiente / Funcionamento

O ambiente é simples, teremos várias servidores proxy que irão transferir algumas vezes por dia os logs compactados via FTP para a máquina que fará o controle dos arquivos que chegam.
A frequencia de atualização dos relatórios via web vai depender da configuração feita no servidor de proxy, nele deve ser determinado o número de vezes que esses logs serão transferidos para a máquina centralizadora dos logs, essa máquina por sua vez terá um script que rodará com um intervalo máximo de 25 minutos, ou seja, ela verifica por novos arquivos transferidos 3 vezes por hora, caso tenha algo novo ela lê o arquivo, coloca na base de dados SQL referente ao site e depois publica via http.
A cada dia será feito um backup compactado do log diário, que depois pode ser anexado em apenas um arquivo tento um log do mês todo, ou caso seja necessário um intervalo de dias.


Softwares envolvidos

Como distribuição usarei Slackware 10.2, mas isso não infuencia em absolutamente nada. Caso você deseje usar outra distro você terá que fazer algumas adaptações mínimas. Vamos aos softwares básicos:

Aplicativo Site
Apache 1.3 (http://www.apache.org/)
MySQL 4.1.14 (http://www.mysql.com/)
PHP 4 (http://www.php.net/)
MySAR 2.0.11 (http://giannis.stoilis.gr/software/mysar/)
Proftpd 1.2.10 (http://www.proftpd.org/)

Para todos os softwares pode ser usada a versão igual ou superior.


Instalação

Não vou entrar em detalhes quanto a instalação do Apache, PHP, FTP e MySQL, pois além da maioria das SO Gnu/Linux já terem esses pacotes incorporados na instalação padrão esse também não é o objetivo do manual.


Primeiros passos

Vamos antes de mais nada assumir algumas coisas para ser padrão durante toda a instalação. Vamos dizer que teremos 3 máquinas que descarregarão os logs N vezes por dia na máquina onde serão criados os relatórios.

Vamos assumir alguns “paths” para as máquinas, isso depois você deverá adptar (se for o caso) para seu ambiente.

Caminhos para a máquina proxy:

  • access.log

    Nada mais que o arquivo de logs gerado pelo squid, onde ficam registrados os acessos dos usuários.

       CAMINHO:
       /usr/local/squid/var/logs/
  • spt.relat

    Script que irá copiar, limpar os relatórios, compactar e enviar os relatórios via FTP para a máquina centralizadora.

       CAMINHO:
       /usr/bin/

Caminhos para a máquina centralizadora:

  • access.log*

    É importarte prestar atenção para onde ficarão esses arquivos, pois eles serão indicados dentro do banco de dados para que o MySAR faça a busca por novos registros para lançar nos relatórios. Onde está “$SITE” leia-se nome da máquina e/ou localidade de onde vem o log.

       CAMINHO:
       /var/squid-report/$SITE/logs
  • *.bz2

    Onde ficarão os arquivos de log depois de serem compactados e enviados à máquina que irá fazer o trabalho de centralização dos logs.

       CAMINHO:
       /var/squid-report/$SITE/
  • backup

    O backup dos arquivos “access.log”, para que seja possivel fazer uma busca caso as informações forem perdidas.

       CAMINHO:
       /var/squid-report/$SITE/backup/
  • web

    Caminho de onde ficarão as páginas PHP do MySAR, vou usar o padrão do Slackware mesmo.

       CAMINHO:
       /var/www/htdocs/$SITE/
  • spt.lanca

    Script que fará o lancamento e organização dos logs gerados pelos proxys. Depois de organizar ele irá mante-los organizados por DIA e também verificará se existem dados para serem anexados à base de dados SQL, caso sim ele irá executar os scripts em PHP do MySAR que farão a leitura do “access.log” diário e colherá os dados novos.

       CAMINHO:
       /usr/bin/
  • spt.backdia

    Faz o backup diário compactado dos logs lançados na máquina centralizadora pelos proxys.

       CAMINHO:
       /usr/bin/

MySAR

My… quem?

Antes de mais nada vamos falar o que ele faz. É simples, ele é uma aplicação em PHP criada por Giannis Stoilis que cria uma base de dados SQL (isso mesmo, cria sozinho!) e que com poucas configurações do usuário já começa a ler os arquivos de log e colocar dentro dessa base de dados. Daí para frente só alegria. Existe inclusive uma tradução para pt_BR dos templates usados, no caso vou usar os templates em inglês mesmo, mas comentarei como fazer isso em pt_BR, o que por sinal é muito fácil.

Instalação

Antes de iniciar a instalção tenha certeza que o apache está rodando com suporte a PHP e que aceita arquivos “index.php” como página inicial, verifique também se o MySQL está no ar com a porta 3306 aberta para conexões.

A instalação é bem simples, basta descompactar os arquivos dentro da pasta onde ficam os arquivos do apache. Assumindo os caminhos citado acima vamos fazer:

   # tar -xvzf mysar-2.0.11.tar.gz -C /var/www/htdocs/$SITE/
   # mv /var/www/htdocs/$SITE/mysar/* /var/www/htdocs/$SITE/
   # rm -r /var/www/htdocs/$SITE/mysar/

O que foi feito? Simples, os arquivos do MySAR foram descompactados e depois movidos para a pasta onde ficará o acesso aos relatórios. Lembre-se que “$SITE” é o nome do site que você está colocando para ter os relatórios, por exemplo poderia ser “empresa_x”.

Agora vamos abrir um browser para continuarmos a configuração. Você deverá colocar no browser o endereço do seu servidor onde está rodando o apache, o endereço é:

   http://IP_DO_SERVER/$SITE/www/

Eu vou dividir por passos que acredito que ficará mais fácil.

  • 1º Passo:

É apenas uma tela de bem-vindo do wizard do MySAR, vamos clicar em “Click here to continue” e ir para o segundo passo.

  • 2º Passo:

Mais uma tela simples onde apenas iremos optar por um upgrade ou uma nova instalação, no nosso casso usaremos “New install”.

  • 3º Passo:

Agora sim estamos começando a fazer alguma coisa. Nesse momento vamos passar os campos para a criação do banco de dados. Abaixo uma breve descrição de cada campo por ordem de cima para baixo:

  1. Nome do usuário que tem permissões de administrador no MySQL. Normalmente é o próprio usuário root.
  2. Senha do usuário administrador.
  3. Onde o servidor MySQL está rodando, no nosso caso vamos manter localhost pois o MySQL está na própria máquina.
  4. Nome da data base a ser criada, eu recomendo usar algo que facilite a identificação, como: mysar_$SITE.
  5. Nome do usuário que será dono do banco de dados. Vamos deixar o padrão.
  6. Senha do usuário dono do bando de dados, materemos o padrão.

Depois de fazer isso clique em Submit Query, e vamos para o próximo passo.

  • 4º Passo:

Ess tela significa: Mas que beleza rapaz! Funcionou!, rs. Mas antes de começarmos a testar a conexão ao banco de dados precisamos criar um arquivo falando para o MySAR como ele deve fazer essa consulta.

Agora abra o linux onde está sendo feita a instalação do MySAR e crie o arquivo:

   /var/www/htdocs/$SITE/etc/config.ini

Com as seguintes linhas (tirando os comantários):

  dbUser = mysar	# Usuário dono do banco de dados
   dbPass = mysar	# Senha do usuário
   dbHost = localhost	# Onde o banco de dados está
   dbName = mysar_SITE	# Nome do banco de dados

Agora sim clique em “Click here” para ele testar a conexão com o banco de dados, caso dê algum erro é porque você passou alguma informação desencontrada, refassa os passos anteriores caso isso aconteça.

  • 5º Passo:

Essa tela diz que a conexão ao banco de dados foi executada com
sucesso, então podemos ir em frente, mas antes disso temos que
fazer mais algumas alterações no nosso linux centralizador.

Conecte-se a ele e epois dê as seguintes permissões:

   # chown nobody /var/www/htdocs/$SITE/www-templates
   # chmod o+rwx /var/www/htdocs/$SITE/www-templates
   # chown nobody /var/www/htdocs/$SITE/smarty-tmp

Feito isso clique em “Click here” para irmos ao passo seguinte.

  • 6º Passo:

Com o passo anterior realizado com sucesso essa será a tela printada para você. Aqui não temos nada para fazer, clique em “Click here” e vamos ir para o próximo passo.

  • 7º Passo:

Agora a instalação acabou, basta deletarmos os arquivos de instalação do MySAR para que quando abrirmos o site ele não tente instalar novamente.

   # rm -rf /var/www/htdocs/$SITE/www/install

Feito isso clique em “Start using mysar!” e você verá a primeira tela do MySAR, ainda sem nenhum dado… mas emocionante não é? =)

A instalação do MySAR está praticamente pronta, voltaremos a alterar coisas nele, mas não agora. Ah! E como eu havia prometido vou ensinar a coloca-lo em pt_BR.

Caso você queira colocar o MySAR em português brasileiro basta fazer o seguinte:

   # mv /var/www/htdocs/$SITE/www-templates /var/www/htdocs/$SITE/www-templates.en
   # mv /var/www/htdocs/$SITE/www-templates.pt_BR/ /var/www/htdocs/$SITE/www-templates
   # chown nobody /var/www/htdocs/$SITE/www-templates
   # chmod o+rwx /var/www/htdocs/$SITE/www-templates

Configurações

Vamos continuar nos lembrando dos caminhos que já foram vistos anteriormente, mas agora vamos começar a fazer as configurações nos servidores, tanto nas máquinas Squid quanto na máquina centralizadora dos logs.


Pastas de logs

Como já havia sido definido anteriormente a pasta onde os logs ficarão devem ser criadas da seguinte maneira:

   # mkdir -p /var/squid-report/$SITE/backup
   # mkdir /var/squid-report/$SITE/logs

Depois dentro de cada pasta devem ser criadas mais duas pastas backup e logs. Ou seja, a estrutura de cada pasta ficará:

   /var/squid-report
   		/$SITE
   		     /backup
   		     /logs

Depois vamos fazer as permissões para essas pastas durante a criação dos usuários.


Proftpd

Serviço

A configuração do Proftpd é muito simples e eu não vou ficar entrando em detalhes, então vamos fazer o seguinte, abaixo está o que deve estar contido no arquivo /etc/proftpd.conf coloque essa informação dentro dele e inicie o serviço. Atenção, apague tudo que tem dentro do proftp.conf e coloque o que está aqui, MAS só faça isso se você não estiver usando ele para nada, caso esteja você terá que criar essas conexões de FTP por sua conta. =)

   # vim /etc/proftpd.conf

Configurações:

   ServerName                      "FTP - Maquina Centralizadora"
   ServerType                      standalone
   DefaultServer                   on
   Port                            21
   Umask                           022
   MaxInstances                    30
   User                            nobody
   Group                           nogroup
   RootLogin                       off
   UseReverseDNS                   off
   UseFtpUsers                     off
   SystemLog                       /var/log/proftpd.log
   TransferLog                     /var/log/xferlog
   <Directory /*>
     AllowOverwrite                on
   </Directory>

Simples né? Agora inicie o serviço e não se esqueça de coloca-lo para ser iniciado junto com o boot da máquina.

   # proftpd

Usuários

O cadastro de usuários aqui também vai ser feita de forma simples, eu sei que existem maneiras de fazer isso com banco de dados em SQL e tudo mais, só que para o que nós queremos agora não precisamos disso.

Adicionar

Para facilitar as coisas vamos criar um usuário para cada site, esse usuário deverá ter o mesmo nome do site, por exemplo, se temos um site que se chama cliente_sp o usuário também terá o nome de cliente_sp, assim como sua pasta dentro do /var/squid-report.

Vamos imaginar que temos dois clientes que descarregarão os logs do squid dentro dessa máquina centralizadora. Clientes serão:

  • cliente_sp
  • cliente_mg

Esses clientes deverão ter:

  • Pasta dentro de “/var/squid-report”:
       /var/squid-report/cliente_sp/
       /var/squid-report/cliente_mg/
  • Sub pastas “logs” e “backup” dentro das pastas que estão em “/var/squid-report”.
  • Usuário com permissão de gravação e leitura nessas pastas.

Vamos adicionar o primeiro usuário, lembre-se que as pastas já devem estar criadas.

   # useradd -d /var/squid-report/cliente_sp -s /bin/bash cliente_sp
   # passwd cliente_sp
   # chown cliente_sp:users -R /var/squid-report/cliente_sp

Esse é o procedimento básico para adicionar um novo usuário, esse processo deverá ser feito para cada usuário/site novo que você for cadastrar.


MySQL – access.log

Na instalação padrão do MySAR ele coloca como endereço padrão do access.log a pasta “/var/log/squid/”. Precisamos alterar isso, pois nossos logs ficarão em “/var/squid-report/$SITE/logs/”.

O processo é simples, veja:

   # mysql -D mysar_cliente_sp -u mysar -pmysar -e \
   > "UPDATE config SET value='/var/squid-report/cliente_sp/logs/access.log' WHERE name='squidLogPath';"

Isso deve ser feito para todos os sites cadastrados. Não tem mistério nenhum e nem exige habilidade. =)


spt.relat

Esse é o script que será encarregado de compactar e copiar o arquivo de logs da máquina onde o proxy está rodando para a máquina onde serão centralizados.

Aqui está o modelo do script que deve ser colocado no CRON com a frequencia que você deseja que copie. O arquivo como já foi dito antes é o spt.relat que vai ficar em /usr/bin/.

   #!/bin/bash
   # AUTOR:        Tiago Durante
   # SUPORTE:      tiagodurante [at] gmail (dot) com  log="/usr/local/squid/var/logs/access.log"
   store="/usr/local/squid/var/logs/store.log"

[ -d /backup ] && { cp ${log} /backup/; bzip2 /backup/access.log;
   >${log}; >${store}; } || { mkdir /backup; cp ${log} /backup/;
   bzip2 /backup/access.log; >${log}; >${store}; }

ftp -in <<EOF
     open 10.0.0.1
     user cliente_sp SENHA
     bin
     lcd /backup
     put access.log.bz2
     bye
   EOF

rm /backup/*

# FIM

Não se esqueça de dar permissão de execução para o script.

   # chmod +x /usr/bin/spt.relat

Um exemplo de como colocar no CRON é assim:

   0,20,35 * * * * /usr/bin/spt.relat 1> /dev/null

spt.lanca

Esse vai ser o scrip que vai verificar a existencia de um novo arquivo dentro da pasta onde o proxy lanca os arquivos .bz2, depois o descompactará e irá rodar os scripts PHP do MySAR para que os dados sejam registrados no banco de dados. Veja o script:

   #!/bin/bash  # AUTOR:        Tiago Durante
   # EMAIL:        tiagodurante [at] gmail (dot) com

sites="cliente_sp cliente_mg"
   pasta="/var/squid-report/"
   phpbin="/usr/bin/php"

for i in $sites
   do
           [ -e ${pasta}${i}/access.log.bz2 ] && {
           bunzip2 ${pasta}${i}/access.log.bz2;
           cat ${pasta}${i}/access.log >>${pasta}${i}/logs/access.log;
           rm ${pasta}${i}/access.log;
           ${phpbin} /var/www/htdocs/${i}/bin/mysar-importer.php;
           ${phpbin} /var/www/htdocs/${i}/bin/mysar-resolver.php;
   }
   done

O script deve ficar em /usr/bin como já foi falado anteriormente.

Existem algumas maneiras de você colocar esse script para rodar, eu vou mostrar como exemplo ele rodando três vezes por hora, mas isso depende da sua vontade. No caso utilizando o cron fica:

   10,30,45 * * * * /usr/bin/spt.lanca 1>/dev/null

Quanto mais vezes você rodar esse script mais vezes ele fará a varredura dentro dos diretórios onde são lançados os access.log. O ritimo de atualização dos reports está diretamente ligado ao número de execuções desse script e do spt.relat.


spt.backdia

O funcionamento do backup diário é bem simples, ele apenas compacta os logs gerado no dia e o copia para a pasta de backups dentro do servidor centralizador. Abaixo o script que deve ser colocado em /usr/bin.

  #!/bin/bash

# AUTOR:        Tiago Durante
   # EMAIL:        tiagodurante [at] gmail (dot) com

sites="cliente_sp cliente_sp"
   pasta="/var/squid-report/"
   phpbin="/usr/bin/php"

for i in $sites
   do
           [ -e ${pasta}${i}/logs/access.log ] && {
           bzip2 ${pasta}${i}/logs/access.log;
           mv ${pasta}${i}/logs/access.log.bz2 ${pasta}${i}/backup/`date +%Y-%m-%d`access.log.bz2
           ${phpbin} /var/www/htdocs/${i}/bin/mysar-maintenance.php;
   }
   done

Para agendar essa tarefa no contrab basta adicionar a linha:

   55 23 * * * /usr/bin/spt.backdia 1>/dev/null

Esse script também vai rodar um script de manutenção das bases de dados do MySAR.


Final

Bom, acho que o tutorial acabou. Para adicionar novos sites para reportar logs basta seguir os mesmos passos. Lembre-se de tomar cuidado com a execução das tarefas do contrab e fique atento ao espaço em disco.

Caso tenha qualquer dúvida, reclamação ou dica é só mandar email.

Abraço,

Tiago Durante

  1. July 27, 2007 at 19:20

    Aew Tiago, ficou show o tutor!!

    Falta soh fazer um com o importador binario do MySar, o mesmo tem capacidade para ler logs compactados com o gzip, sem descomprimir no disco.

    De uma olhada no Ultimo Release do mysar!!

    []’s
    Valeu!!

  2. July 27, 2007 at 20:24

    Oi Cassiano!

    É verdade, é que esse manualzinho que está aqui foi feito há uns meses já e o Giannis tinha colocado na página do MYSAR, como eu precisei trocar de domínio apenas migrei esse para cá.

    Esse mês vou migrar o servidor onde centralizo os logs dos squids aqui de onde trabalho e vou passar a usar a versão mais nova do MYSAR… Bom, como Nerd solidário que sou, hehehe, já vou mandar uma doc nova!

    =)

    É isso, abraço e obrigado pela visita! Fique a vontade pra sugerir qquer coisa!

    []s
    Tiago Durante

  3. July 31, 2009 at 15:17

    BOA TARDE
    NAO ENTENDI NADA, COMO EU FAÇO ESSA CONFIGURACAO NO MEU MICROONDAS , ELE AINDA NAO TA FUNCIONANDO E ESTA SAINDO UM CHEIRO MUITO FORTE QUANDO TENTO LIGA-LO.

    ATT
    JUJU

  4. tiagodurante
    January 15, 2010 at 15:42

    Juvenal, desculpe a demora, mas pega no meu… MySAR… :D

  5. Fernando
    April 30, 2013 at 9:58

    Como você resolveu a situação da tabela config para cada log squid?

  6. Diltinho
    December 3, 2015 at 9:22

    Amigo muito bacana sua explicação so que acima tem uns comandos que cortaram a linha e as imagens do print nao tem anexo teria como enviar este doc por email.

  1. March 17, 2010 at 9:40

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: