Análisis simple mirando los logs del Squid

Hola, parece que siempre dejamos pasar un tiempo largo para escribir en el blog. Espero que no vuelva a pasar. Siempre tengo ganas de escribir y nunca encuentro el tiempo. Esta vez en vez de escribir algo largo, me decidi por algo mas corto y puntual.

Hablando con unos clientes sobre el consumo de su ancho de banda, nos pusimos a trabajar en varios frentes para investigar en que se estaba generando trafico. Seguramente en otro post contare que herramientas se usaron. Pero en este vamos a hablar del consumo por navegacion. Quería saber que hacen los usuarios mas alla de ver los top de paginas destino, buscaba demostrarle al cliente que sus usuarios no usaban internet para trabajar. Y que hay que reestringir mucho mas.

Por suerte usan como proxy Squid, me permite analizar de manera flexible los logs. Me puse a discutir mostrandole un análisis de los logs del proxy, para esto hace tiempo armamos unas paginas donde el cliente puede ver estadísticas del uso/abuso de la navegación de manera diaria y mensual.

Mirando otros reportes comerciales (W*bsense, etc) siempre para mejorar nuestros reportes, observe que muestran que busco la gente en Google, de esa manera uno puedo ver cuando se pierde el tiempo en cosas del negocio o en cosas “personales”. Este post no es para discutir cuestiones de privacidad, solamente para que miremos algunas estadísticas reales y como se obtuvieron.

En conclusión quería agregarle a mi reporte para los clientes, que buscan en Google. Y para mostrar una parte del mismo, hice dos pequeños scripts para analizar el log, llamados “search_string.pl” (se queda con la frase buscada) y “search_tokens.pl” (arma tokens con las palabras), más abajo van a poder ver el código. Básicamente parsean el log y busca en la URL pedida el string “q=” que usa Google para la busqueda. Uno para frases y el otro para tokens.

Ahora les voy a mostrar dos ejemplos reales para que vean en que pierde el tiempo a gente (o gana depende de donde se mire).

Empresa 1. Top 25 de busquedas.

En el listado removí items por privacidad.

Algunas cosas para notar:

  • Vemos búsquedas de armas, sera bueno seguir trabajando ahi?
  • Facebook (esta bloqueado para el 90% de los usuarios)
  • Tienen bloqueadas algunas paginas por eso buscan proxys alternativos.
  • Esta de moda alguna película de Hollywood (se puede ver en los strings y tokens).

String

~# grep google.com /var/log/squid/access.log | perl search_string.pl \
     | sort | uniq -c | sort -nr | head -n25
     66 winona ryder the black swan
     51 winona ryder surgery
     34 facebook
     28 imagenes de vangelis teens
     27 armas
     26 mejor pagina callcenter
     25 hotel san marcos de mar de ajo
     18 policy logon run url win 2008
     18 imagenes de enya
     15 squid para windows xp
     13 policy to execute logon url and logoff win 2008
     13 infobae
     13 hoteles en mar de ajo
     13 3g netbook
     12 wireless tigre
     12 rock _ pop en mar de ajo
     12 nickelback taringa mediafire
     12 mapa de mar de ajo
     11 pearl___ 9100
     11 ipaq site_www_dealextreme_com
     11 instalar servidor proxy windows xp
     11 charm school roxette
     10 windows server 2008 r2
     10 script to execute url
     10 proxy server taringa

Tokens

~# grep google.com /var/log/squid/access.log | perl search_tokens.pl \
     | sort -nr | head -n25
122 winona
120 ryder
69 2008
67 proxy
66 swan
66 black
57 imagenes
54 avenida
51 surgery
50 windows
50 policy
50 nickelback
49 logon
46 taringa
45 como
44 hotel
41 execute
40 server
38 elcano
37 mejor
34 facebook
33 lacoste
32 marcos
30 pagina
29 vangelis

Empresa 2. Top 25 de busqueda.

En el listado removí items por privacidad.

Algunas cosas para notar:

  • Este es otro cliente que se quejan siempre porque anda lento, y encima lo que mas buscan son Juegos? y Clarin!
  • Fotos de chicas desnudas?
  • Los sitios sexuales estan bloqueados.
  • Un colegio para los chicos?
  • Vacaciones

Strings

~# grep google.com /var/log/squid/access.log | perl search_strings.pl \
     | sort | uniq -c | sort -nr | head -n25
    133 juegos
    106 clarin
     95 balneario reta
     88 rivera indarte
     69 cintia ressel
     65 omnibus chile
     65 ley contrato laboral tiempo almuerzo argentina
     60 clarin edicion impresa
     57 cine devoto
     56 hotmail
     55 los viajes de gulliver cines
     55 cai informatica zarate
     49 manual de termostato honeywell t6570
     47 ana santini
     45 cursos de la uba
     43 village caballito
     43 magyar himnusz
     43 fotos de chicas desnudas
     42 colegio misericordia
     42 colegio de mendoza
     41 ruta 1000
     41 ley de contrato de trabajo   licencia por enfermedad
     41 kazdan
     41 casa
     38 manual de telescopio reflector

Tokens

~# grep google.com /var/log/squid/access.log | perl search_tokens.pl \
     | sort -nr | head -n25
409 colegio
274 argentina
243 contrato
239 trabajo
230 para
206 2011
202 juegos
186 clarin
162 hotel
161 manual
151 salon
149 mapa
149 banco
140 function
138 letra
131 between
129 performance
129 chile
126 buenos
125 viajes
114 escobar
114 capacity
113 motor
113 devoto
112 titulo

Script: search_strings.pl

# @logentry = ($datetime,$secs,$ip,$code,$bytes,$re,$url,$user,$hc,$type)

use URI::Escape;
$|=1;

$min_len = 4;

while (<STDIN>) {
        chomp;
        my @logentry = split /\s+/;
        my $url = $logentry[6];

        if ($url =~ /q=([^&]+)/) {
                $match = uri_unescape($1);
                $match =~ s/\+/ /g;
                $match =~ tr/A-Z/a-z/;
                $match =~ s/[^\w\s]/_/g;
                next if length($match) < $min_len;
        } else {
                next;
        }

        print "$match\n";
}

Script: search_tokens.pl

# @logentry = ($datetime,$secs,$ip,$code,$bytes,$re,$url,$user,$hc,$type)

use URI::Escape;
$|=1;

$min_len = 4;

while (<STDIN>) {
        chomp;
        my @logentry = split /\s+/;
        my $url = $logentry[6];

        if ($url =~ /q=([^&]+)/) {
                $match = uri_unescape($1);
                $match =~ s/\+/ /g;
                $match =~ tr/A-Z/a-z/;
                $match =~ s/[^\w\s]/_/g;

                while ($match =~ /(\w+)/g) {
                        $token = $1;
                        next if length($token) < $min_len;
                        $words{$token}++;
                }
        }
}

foreach $token (keys %words) {
        print "$words{$token} $token\n";
}

Como yapa, saben que me gusta el tema de visualización, asi que hice un script más modificando “search_tokens.pl” para solo listar los token (no sumarizar) y generar un txt. Primero algo simple y luego usando “tagxedo.com” genero una imagen de “cloud words”.

Click en las imagenes para ampliar.

Imagen: Empresa 1

Imagen: Empresa 2

Saludos

4 Responses to “Que buscan en Google”
  1. Daniel says:

    Hola:
    Leí tu arctìculo y también otros relacionados con squid proxy, yo estoy desarrollando una aplicación que analiza el archivo access.log y busca acesos frecuentes para luego cachearlos automàticamente por la mañana. Utiliza reglas de asociación para encontrar las paginas web màs frecuentes (no es lo mismo que un top de pàginas solicitadas) y las almacena en un txt.
    Mi problema es que yo genero este listado, pero no he podido encontrar la manera de realizar el cacheo de estas páginas. Vi que has hecho algo similar, pero con videos de youtube (en tro de tus post), podrìas darme alguna indicación para aplicarlo el perl o php. Gracias, Daniel.

  2. Una forma facil de cachear, es: (x.x.x.x ip del proxy)

    export http_proxy=http://x.x.x.x:3128/
    wget –proxy-on –cache=off –delete after -m http://web.a.cachear/

    Saludos

  3. Tambien esta el paquete squid-prefetch, pero no lo probe.

    Saludos

  4. Guido Barosio says:

    No pude evitar el recuerdo a epocas de Sinectis con el

    $|=1 ;

    Abrazo Ale, saludos a Vilma!

    Guido

  5.  
Leave a Reply