Fazendo rotate do Squid automaticamente

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

[ Hits: 23.533 ]

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

LILO: undefined video mode number

Escondendo a versão dos serviços que estão rodando em seu servidor para aumentar a segurança

Verificando erros na instalação do Squid

Iniciar o Slackware Linux no modo gráfico automaticamente

Instalando o flash player do Mozilla Firefox no Slackware Linux

Leitura recomendada

Integração simples do Apache 2 com Tomcat 5

Bloqueando email e links maliciosos listados na malware.com.br com Postfix

Recuperar Grub no Ubuntu

Prova de fogo do Linux

UNetbootin - Instalar um sistema Linux no pen drive do modo fácil

  

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