Analisar log Squid

Publicado por Gustavo Hendrigo Marcon (última atualização em 01/10/2009)

[ Hits: 9.392 ]

Homepage: -

Download logsquidia.sh




Script que lista os 10 IPs que mais consumiram banda em uma certa data.

Para executar o script:

./logsquidia.sh 20090928

Ou seja, data no formato: AAAAMMDD

  



Esconder código-fonte

#!/bin/bash

#-------------------------#
# Gustavo Hendrigo Marcon #
#       ARL208004         #
#  Automação de tarefas   #
#-------------------------#

#----- Testa se foi passada os parâmetros -------------------#
if [ $# -ne 2 ]                        
then                           
   echo                           
   echo "Digite: $0 a data e o caminho do arquivo de log ."   
   echo "Exemplo: $0  20090901 /home/hendrigo/access.log"     
   exit                           
fi                           
#------------------------------------------------------------#

#----- Filtra os 8 caracteres referente a data ----#
data=$(echo $1|egrep '^([0-9]{8})')
#--------------------------------------------------#

#----- Atribui as variáveis -----#
ano=$(echo $data|cut -c1-4)
mes=$(echo $data|cut -c5-6)
dia=$(echo $data|cut -c7-8)
#--------------------------------#

#----- Data a ser filtrada com hora inicial 00:00 -----#
data_ini=$(date -d "$ano-$mes-$dia" "+%s")
#------------------------------------------------------#

# ---- Data a ser filtrada com hora inicial 23:59 ---- #
data_fim=$(date -d "$ano-$mes-$dia 23:59:59" "+%s")
#------------------------------------------------------#

#------------ Valida a quantidade de Dígitos ----------#
if [ "$data" == "" ]
   then echo "Data deve ter 8 digitos"
#------------------------------------------------------#

#------------------ Valida ano ------------------------#
elif [ "$ano" -le 2000 -o "$ano" -ge 2010 ]
   then echo "$ano não é ano válido!"
#------------------------------------------------------#

#------------------ Valida mês ------------------------#
elif [ "$mes" -le 0 -o "$mes" -ge 13 ]
   then echo "$mes não é mes válido"
#------------------------------------------------------#

#------------------ Valida dia ------------------------#
elif [ "$dia" -le 0 -o "$dia" -ge 32 ]
   then echo "$dia não é dia válido"
#------------------------------------------------------#

#--------------- Verifica acess.log -------------------#
elif [ ! -f "$2" ] 
   then echo " $2 não é um arquivo ou não existe"
#------------------------------------------------------#

#--------- Verifica permisao em acess.log -------------#
elif [ ! -r "$2" ]
   then echo " Você não tem permissao de leitura em $2"
#------------------------------------------------------#

# ------------------ Se todos parâmetros foram validados, executar --------------------------------------------- #
else
echo "Processando ..."
   {

   # Lista os ips que tiveram acesso durante o periodo, exemplo seguido da pag 81 da apostila #
   ips=$( awk -F" " '$1 >= '$data_ini' && $1 <= '$data_fim' {print $3}' $2 | awk 'BEGIN { } { 
   for (palavra = 1; palavra <= NF; palavra ++)
   quantidade [$palavra] ++
   }
   END { 
   for (palavra in quantidade)
   print palavra 
   }' | sort )
   # ----------------------------- Fim da atribuicao ips ------------------------------------ #

   echo
   echo "========================================================="

   for i in $ips
   do
      # ---- Fitra data e soma os downloads de cada ip, e imprime o resultado ---- #
      awk -F" " '$1 >= '$data_ini' && $1 <= '$data_fim' {print $1,$2,$3}' $2 | grep -w $i | awk -F" " 'BEGIN { } {
         downloads += $2; ip= $3;
    } 
      END {
           printf "%1s %15s %2s %15s %2s %11.3f %2s %2s\n", "|", ip , "|",  downloads, "|", expr downloads / 1000000 , "MB", "|"
    }'
   done | sort -k4 -n | tail -10

   # ---- Se não for encontrado nenhum acesso na data especificada ---- #
   if [ "$ips" == "" ]
   then  echo "Nenhum acesso na data: $1"
   fi

   echo "========================================================="
   echo "|       IP         |    Em Bytes      |      Em MBytes  |"
   echo "|                  |------------------------------------|"
   echo "|  TOP 10, HOSTS   |          TOTAL DE DOWNLOADS        |"
   echo "========================================================="
   echo 
}|tac
#-------------------------------- Fim do if ---------------------------------------------------------------------#
fi

Scripts recomendados

Script que identifica na rede a existência de duplicidades de IPs e MACs que utilizam mais de um IP

calculadora

Script para criação de pacotes auto extrator.

Ver último twitter pelo terminal ou na barra de notificação

Script de Autenticação simples do Speedy HOme


  

Comentários
[1] Comentário enviado por danne em 03/11/2009 - 18:55h

Muito bom.

[2] Comentário enviado por smailey em 08/06/2010 - 09:23h

Este scrip é bem util na empresa onde trabalho, porém, quando executo aparece uma mensagem falando que o ano é invalido.
Alguem pode me ajudar ?

[3] Comentário enviado por danne em 10/06/2010 - 08:37h

troque essa parte do script:
#----- Atribui as variáveis -----#
ano=$(echo $data|cut -c1-4)
mes=$(echo $data|cut -c5-6)
dia=$(echo $data|cut -c7-8)

por essa:

#----- Atribui as variáveis -----#
ano=`date +%Y`
mes=`date +%m`
dia=`date +%d`

=]

[4] Comentário enviado por smailey em 11/06/2010 - 11:33h

Danne ainda continua o mesmo problema, 2010 não é ano válido!

;]

[5] Comentário enviado por danne em 11/06/2010 - 22:09h

Opa!! Arruma esse trecho do código:

#------------------ Valida ano ------------------------#
elif [ "$ano" -le 2000 -o "$ano" -ge 2010 ]
then echo "$ano não é ano válido!"
#------------------------------------------------------#

e muda o ano limite:

#------------------ Valida ano ------------------------#
elif [ "$ano" -le 2000 -o "$ano" -ge 2030 ]
then echo "$ano não é ano válido!"
#------------------------------------------------------#

mude para o ano que achar melhor, hehehe. Ele estava comparando se o ano estava entre 2001 a 2009, como estamos em 2010 ele ficaria de fora da lista. =P

[6] Comentário enviado por danne em 11/06/2010 - 22:10h

Outra coisa, agora que fui reparar que ele recebe a data como parâmetro.

Volte esse trecho para o original:
#----- Atribui as variáveis -----#
ano=$(echo $data|cut -c1-4)
mes=$(echo $data|cut -c5-6)
dia=$(echo $data|cut -c7-8)
#--------------------------------#

Esquece aquele meu primeiro post pedindo para usar o comando date. Confundi, hehe.

[7] Comentário enviado por smailey em 14/06/2010 - 11:16h

Danne funcionou perfeitamente, muito obrigado

=D


Contribuir com comentário




Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts