Fazendo rotate do Squid automaticamente

Publicado por Sérgio Abrantes Junior em 11/07/2008

[ Hits: 23.292 ]

Blog: https://br.linkedin.com/in/sergioabrantes

 


Fazendo rotate do Squid automaticamente



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
etc

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!

Sérgio Abrantes

[]'s

Outras dicas deste autor

Treinamento on-line e gratuito - Introdução ao Slackware Linux

Internet Banking Caixa: Erro CM12

Instalando o flash player do Mozilla Firefox no Slackware Linux

Mplayer funcionando fullscreen

Corrigindo horário de servidores com NTP

Leitura recomendada

Instalar Nvidia FX5200 no Debian ETCH

Lazarus no Fedora

Testando um arquivo ISO

Instalando impressora Canon PIXMA iP1700

Instalando Firebird 2 com rfunc no Debian

  

Comentários
[1] Comentário enviado por jeferson_roseira em 13/07/2008 - 21:50h

cara boa dica

ja foi para o favoritos

[2] Comentário enviado por removido em 14/07/2008 - 10:03h

Lembrando que o Squid não consegue gerenciar mais do q 2GB de log (em um unico arquivo de log). Se ele atingir os 2GB, o daemon do Squid simplesmente para e não consegue mais subir. Portanto, vale a pena fazer um levantamento antes pra ver se o log vai atingir esse tamanho antes do final de cada mês.
No mais, ótima dica.

[3] Comentário enviado por llbranco em 19/06/2012 - 18:35h

ae, manero...
vou testar aki, caso nao volte a posta funcionou!!

[4] Comentário enviado por david.blu em 19/12/2013 - 18:15h

Olá Sérgio Abrantes Junior, muito bom seu post.

Estou tendo uma dificuldade em fazer funcionar o meu. Ele me retorna este erro:

/etc/rc.d/init.d/squid_rotate: line 5: [: número excessivo de argumentos

E o erro acontece em todas as linhas ref. ao mês:

if [ $data == "01" ];then

Todos os parâmetros estão corretos mas retorna o erro.

Você pode me dar uma ajuda?

Obrigado.

[5] Comentário enviado por pelo em 19/12/2013 - 19:14h

David,


Pode ser que o erro nem seja dessa linha, mas sim da próxima.
Talvez teu executável ou conf não estão nos caminhos que coloquei no script sendo necessário ajuste.
Pode executar o script com um debug ativado trocando adicionando um -x na primeira linha:
Antes
#!/bin/bash

Depois
#!/bin/bash -x

Assim ele vai mostrando tudo que está sendo executado.


Outra coisa, há aluns parâmetros novos nos confs para habilitar que o squid faz o rotate (sem colocar meses é claro).
Procure no squid.conf por "logfile_rotate"
Nele você diz quantos arquivos de log ele deve ter.

Sérgio Abrantes

[6] Comentário enviado por david.blu em 20/12/2013 - 09:54h

Bom dia Sérgio Abrantes Junior, obrigado pela resposta.
Este foi o debug. Vou dar uma verificada no Squid. Verifiquei dentro do Squid e "logfile_rotate" não tem.

+ data='date +%m'
+ ano='date +%Y'
+ '[' date +%m == 01 ']'
/etc/rc.d/init.d/squid_rotate: line 5: [: número excessivo de argumentos
+ '[' date +%m == 02 ']'
/etc/rc.d/init.d/squid_rotate: line 14: [: número excessivo de argumentos
+ '[' date +%m == 03 ']'
/etc/rc.d/init.d/squid_rotate: line 23: [: número excessivo de argumentos
+ '[' date +%m == 04 ']'
/etc/rc.d/init.d/squid_rotate: line 32: [: número excessivo de argumentos
+ '[' date +%m == 05 ']'
/etc/rc.d/init.d/squid_rotate: line 41: [: número excessivo de argumentos
+ '[' date +%m == 06 ']'
/etc/rc.d/init.d/squid_rotate: line 50: [: número excessivo de argumentos
+ '[' date +%m == 07 ']'
/etc/rc.d/init.d/squid_rotate: line 59: [: número excessivo de argumentos
+ '[' date +%m == 08 ']'
/etc/rc.d/init.d/squid_rotate: line 68: [: número excessivo de argumentos
+ '[' date +%m == 09 ']'
/etc/rc.d/init.d/squid_rotate: line 77: [: número excessivo de argumentos
+ '[' date +%m == 10 ']'
/etc/rc.d/init.d/squid_rotate: line 86: [: número excessivo de argumentos
+ '[' date +%m == 11 ']'
/etc/rc.d/init.d/squid_rotate: line 95: [: número excessivo de argumentos
+ '[' date +%m == 12 ']'
/etc/rc.d/init.d/squid_rotate: line 104: [: número excessivo de argumentos

[7] Comentário enviado por pelo em 20/12/2013 - 10:24h

David,

Executei uma parte do script pra testar a data e deu certo:

#!/bin/bash
data=`date +%m`

if [ $data == "12" ] ;then

echo "dezembro"

fi

Mostrou dezembro como mensagem ao executar.
Faça esse teste também.
Qual distribuição está esse squid e qual versão?
Envia o squid.conf pro meu e-mail pra eu ver sergioabrantes@gmail.com
Até

Sérgio Abrantes

[8] Comentário enviado por david.blu em 20/12/2013 - 10:56h

Sérgio Abrantes Junior, já te mandei meu Squid.

Fiz o teste acima e o erro persistiu.

Obrigado.

Abs!

[9] Comentário enviado por david.blu em 26/12/2013 - 11:45h

Sérgio Abrantes Junior, muito obrigado pela sua ajuda.

Consegui resolver alterando as linhas:

data=`date +%m`
ano=`date +%y`

Para:

data=$(date +%m)
ano=$(date +%Y)

Grande abraço e um Feliz Natal para você!!!



Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts