De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.


Fazendo rotate do Squid automaticamente

Colaboração: Sérgio Abrantes

Data de Publicação: 09 de Abril de 2009

Mostrarei como fazer um rodízio dos arquivos de log do Squid que crescem enormemente ao final de todo o mês, colocando-os na crontab para fazer esse trabalhinho sujo. : D

O arquivo de log do Squid (access.log) cresce enormemente devido aos acessos externos. O próprio Squid tem sistema de rotacionamento dos logs através do comando "squid -k rotate". Com esse comando, os arquivos vão ficando no seguinte formato:

  access.log.0
  access.log.1
  ...

A idéia é fazer um rotacionamento ao final de todo o mês, criando um arquivo de log com o mês e gerar um relatório mensal utilizando o SARG.

Porque fazer isso? Assim tiramos um relatório com o acesso de todo o mês e geramos um arquivo com os acessos daquele mês. Caso seja necessário um relatório de todo o mês, basta apenas juntar os logs e gerar.

Crontab

Devemos inserir as datas e o script na crontab para realizar a tarefa. Segue abaixo o conteúdo da crontab:

  # Faz um logrotate do Squid
  59 23 31 1 * /home/bkp_server/scripts/rotate_squid
  59 23 28 2 * /home/bkp_server/scripts/rotate_squid
  59 23 31 3 * /home/bkp_server/scripts/rotate_squid
  59 23 30 4 * /home/bkp_server/scripts/rotate_squid
  59 23 31 5 * /home/bkp_server/scripts/rotate_squid
  59 23 30 6 * /home/bkp_server/scripts/rotate_squid
  59 23 31 7 * /home/bkp_server/scripts/rotate_squid
  59 23 31 8 * /home/bkp_server/scripts/rotate_squid
  59 23 30 9 * /home/bkp_server/scripts/rotate_squid
  59 23 31 10 * /home/bkp_server/scripts/rotate_squid
  59 23 30 11 * /home/bkp_server/scripts/rotate_squid
  59 23 31 12 * /home/bkp_server/scripts/rotate_squid

Ele executará o script que está em /home/bkp_server/scripts/rotate_squid ao final do último dia de cada mês.

Script rotate_squid

Segue o conteúdo do script:

  #!/bin/bash
  data=`date +%m`
  ano=`date +%y`
  
  if [ $data == "01" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/01/$ano-31/01/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-janeiro
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-janeiro
  cp -p /var/log/squid/store.log /var/log/squid/store.log-janeiro
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "02" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/02/$ano-28/02/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-fevereiro
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-fevereiro
  cp -p /var/log/squid/store.log /var/log/squid/store.log-fevereiro
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "03" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/03/$ano-31/03/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-marco
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-marco
  cp -p /var/log/squid/store.log /var/log/squid/store.log-marco
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  if [ $data == "04" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/04/$ano-30/04/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-abril
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-abril
  cp -p /var/log/squid/store.log /var/log/squid/store.log-abril
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "05" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/05/$ano-31/05/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-maio
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-maio
  cp -p /var/log/squid/store.log /var/log/squid/store.log-maio
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "06" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/06/$ano-30/06/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-junho
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-junho
  cp -p /var/log/squid/store.log /var/log/squid/store.log-junho
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "07" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/07/$ano-31/07/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-julho
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-julho
  cp -p /var/log/squid/store.log /var/log/squid/store.log-julho
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  if [ $data == "08" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/08/$ano-31/08/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-agosto
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-agosto
  cp -p /var/log/squid/store.log /var/log/squid/store.log-agosto
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "09" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/09/$ano-30/09/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-setembro
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-setembro
  cp -p /var/log/squid/store.log /var/log/squid/store.log-setembro
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "10" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/10/$ano-31/10/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-outubro
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-outubro
  cp -p /var/log/squid/store.log /var/log/squid/store.log-outubro
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  
  if [ $data == "11" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/11/$ano-30/11/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-novembro
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-novembro
  cp -p /var/log/squid/store.log /var/log/squid/store.log-novembro
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi
  if [ $data == "12" ] ;then
  /usr/bin/sarg -f /usr/local/sarg/sarg.conf -d 01/12/$ano-31/12/$ano
  cp -p /var/log/squid/access.log /var/log/squid/access.log-dezembro
  cp -p /var/log/squid/cache.log /var/log/squid/cache.log-dezembro
  cp -p /var/log/squid/store.log /var/log/squid/store.log-dezembro
  cat /dev/null > /var/log/squid/access.log
  cat /dev/null > /var/log/squid/cache.log
  cat /dev/null > /var/log/squid/store.log
  
  fi

Logs

Agora veremos como os LOGs ficam após serem rotacionados.

  # cd /var/log/squid
  # ls -lrth
  total 1.2G
  -rwxr-xr-x 1 nobody users 22K 2008-02-28 16:35 cache.log-fevereiro*
  -rwxr-xr-x 1 nobody users 111M 2008-02-28 22:59 store.log-fevereiro*
  -rwxr-xr-x 1 nobody users 109M 2008-02-28 22:59 access.log-fevereiro*
  -rwxr-xr-x 1 nobody users 46K 2008-03-31 16:50 cache.log-marco*
  -rwxr-xr-x 1 nobody users 136M 2008-03-31 22:59 store.log-marco*
  -rwxr-xr-x 1 nobody users 121M 2008-03-31 22:59 access.log-marco*
  -rwxr-xr-x 1 nobody users 64K 2008-04-30 18:12 cache.log-abril*
  -rwxr-xr-x 1 nobody users 160M 2008-04-30 23:58 store.log-abril*
  -rwxr-xr-x 1 nobody users 102M 2008-04-30 23:58 access.log-abril*
  -rwxr-xr-x 1 nobody users 229M 2008-06-12 17:17 store.log*
  -rwxr-xr-x 1 nobody users 42K 2008-06-12 17:17 cache.log*
  -rwxr-xr-x 1 nobody users 184M 2008-06-12 17:17 access.log*

Assim fica mais tranquilo para o SARG trabalhar também e os teus logs mais organizados. : )

Conclusão

Cuidar dos logs sempre é triste. Os scripts vão surgindo conforme a necessidade de administração do servidor.

Esta foi uma alternativa que achei mais interessante para o meu caso. Caso tentam sugestões de melhoria ou outras alternativas para solucionar este caso, todas serão bem vindas.

Vivendo e aprendendo!

Adicionar comentário

* Campos obrigatórios
5000
Powered by Commentics

Comentários

Nenhum comentário ainda. Seja o primeiro!


Veja a relação completa dos artigos de Sérgio Abrantes