ATAJOS DE WINDOWS. Los diferentes atajos para utilizar en windows y ser más e...
Web Log Analysis - AWK
1. WEB y TEXT MINING
Web Log Analysis con AWKJuan Azcurra
2. Log del web server Apache
El log que guarda un servidor Apache contiene la siguiente
información:
%h %l %u %t "%r" %>s %b "%{Referer}i" "%{User-agent}i"
Donde:
%h: IP del cliente.
%l: identidad del cliente.
%u: userid de la persona solicitando el documento.
%t: hora en la que el servidor finalizó el pedido.
%r: linea solicitada por el cliente.
%>s: código de estado que el servidor envia al cliente.
%b: tamaño en bytes del objeto enviado al cliente.
%{Referer}: desde donde fue referido.
%{User-agent}: agente de usuario del cliente.
3. Códigos de estado
Códigos de respuesta:
200 - OK
206 - Partial Content
301 - Moved Permanently
302 - Found
304 - Not Modified
401 - Unauthorised (password required)
403 - Forbidden
404 - Not Found
301 o 302 indican que hubo una redirección.
304 indica que el objeto ya se encontraba en la cache del
cliente.
404 indica que el link está corrupto.
4. GAWK – Introducción
Un lenguaje muy potente para procesamiento de texto y búsqueda
de patrones.
GAWK es una versión GNU de AWK.
Sintáxis similar a C.
http://www.gnu.org/software/gawk
El nombre AWK proviene de las iniciales de sus diseñadores:
Alfred V. Aho, Peter J. Weinberger, and Brian W. Kernighan.
La versión original de AWK fue escrita en 1977.
6. GAWK – Archivos y campos
Gawk divide el archivo en registros y campos.
Cada línea es un registro (por defecto).
Los campos son delimitados por un carácter
especial.
Por defecto: espacio en blanco (blanco o tab).
Puede ser cambiado con la opción –F
Ej. Para indicar que el campo está separado por
comas, usar:
Gawk –F “,” archivo.csv
7. GAWK – Campos y variables
Los campos son accedidos por el prefijo $
Variables especiales:
$1 es el primer campo, $2 es el segundo campo,
…
$0 es un campo especial que contiene todo el
registro.
NF es una variable especial que indica el número
de campos en el registro actual.
NR es una variable especial que indica el número
de registro actual.
8. GAWK - Condiciones
gawk –F "d" 'condición' archivo
GAWK procesa cada linea del archivo, usando
el delimitado por defecto para dividir cada
linea en campos.
La acción por defecto es imprimir la linea
completa.
9. Ejemplo con archivo de prueba
Utilizaremos el archivo d100.log que contiene
las 100 primeras lineas del archivo de log de
Kdnuggets del 16/11/05,
Se presentarán algunos códigos de ejemplo
que pueden utilizarse con el archivo completo.
11. Ejemplo 1: Líneas con estado !=
200
Código de estado se encuentra en el campo $9
Cuántas lineas tienen el código de estado distinto
de 200? :
gawk '$9 != 200' d100.log
Resultado: 27
Para contar el estado igual a 200, usar:
'$9 == 200'
no '$9 = 200' (esto setea $9 al valor 200)
12. Ejempo 2: Contar referencias de
Google
Gawk tiene un poderoso evaluador de
patrones
variable ~ "pattern"
Ejemplo: cuántas líneas del log tiene la
referencia (campo $11) desde google:
gawk '$11 ~ "google"' d100.log
Resultado: 2
13. Ejemplo 3: Condiciones
complejas
Cuántos hits tienen el método GET y estado
404?
(status 404 es un código de error)
El método está en $6, pero el método está
separado por un espacio. Se puede utilizar:
gawk '$6 ~ "GET" && $9 == 404' d100.log
Resultado: 1
14. Ejemplo 4a: Contando solicitudes
de HTML
El archivo solicitado está en el campo $7, se
puede utilizar esta condición para evaluar si
terminar con .html
Nota: $ en una expresión regular indica el fin
de la cadena.
gawk '$7 ~ ".html$"' d100.log
Resultado: 21
15. Ejemplo 4b: Contando solicitudes
de HTM o HTML
Algunos archivos finalizan con .html, se puede
utilizar:
gawk '$7 ~ ".html$|.htm$"'
d100.log
Resultado: 22
O también:
gawk '$7 ~ ".htm"' d100.log
Resultado: 22
16. Ejemplo 4c: Contado solicitudes de
directorios
Algunos pedidos pueden ser a un directorio,
por ejemplo un pedido a www.kdnuggets.com/
tendría el literal "GET / HTTP/1.1".
Para contar estas solicitudes:
gawk '$7 ~ "/$"' d100.log
Resultado: 6
17. Ejemplo 4d: Contando todas las
solicitudes HTML
o contar html, htm y directorios con:
gawk '$7 ~ "(html|htm|/)$"'
d100.log
Resultado: 28
18. GAWK – Cálculos
Forma general de la sentencia
gawk '{sentencias;…}' archivo
Las sentencias son ejecutadas para cada
línea del archivo.
Las sentencias incluyen condicionales, loops,
etc.
19. Ejemplo 5: Referencias
externas
Imprimir referencias a páginas html,
excluyendo acceso directo (donde la
referencia es "-" )
Nota: para testear si $11 es "-", es
necesario utilizar la comilla con escape "
Código:
gawk '{if ($7~"html$" &&
$11!=""-"") print $11}'
d100.log
Resultado: 7
20. GAWK – Sentencias BEGIN,
END
Para ejecutar sentencias antes de leer la
primera linea se utiliza la palabra clave BEGIN
Para ejecutar sentencias despues de leer la
última linea se utiliza la palabra clave END
gawk 'BEGIN{sent1;…} {sent2;…} END
{sent3;…}' archivo
21. Ejemplo 6
Sumar los bytes transmitidos con código de
estado 200
gawk '{if ($9 == 200) suma += $10}
END{print suma}' d100.log
Resultado: 396460
Nota: no es necesario inicializar suma, todas
las variables son inicializadas en 0 por
defecto.
22. GAWK - Arreglos
Es posible utilizar variables compuestas
Por ejemplo, imprimir la cantidad de hits por
IP:
gawk '{!a[$1]++} END {for(i in
a) print i, a[i]}'d100.log
Resultado:
ip2171.unr 1
ip967.com 5
ip1037.com 1