Servidor ubuntu completo - XVIII parte - SARG

Buenas noches!!! bienvenidos una vez más. 
En la entrada de hoy aprenderemos a generar reportes para el análisis de los accesos al proxy squid, con sarg vamos a poder generar reportes sobre demanda y también generar reportes automáticos por día, semana, mes o como lo haremos aquí cada "5 minutos".

Comencemos.

 Antes de nada aseguraros que tenéis instalado apache en el server (no es necesario tener apache instalado, pero desde luego poder ver los reportes desde cualquier ordenador es genial).

ahora instalaremos sarg, para ello pondremos lo siguiente:

apt-get install sarg

Con esto ya tenemos instalado sarg, pero toca configurarlo. El archivo de configuración es "/etc/sarg/sarg.conf". Aconsejo antes de modificarlo crear una copia del archivo:

crear copia:

cp /etc/sarg/sarg.conf /etc/sarg/sarg.conf.old

una vez tenemos nuestra copia de seguridad es el momento de ir configurarlo, aquí veremos solo algunas opciones importantes y otras muy aconsejables pero recomiendo encarnecidamente que leáis todo el archivo, tiene parámetros muy curiosos.

 El primer parámetro a tener en cuenta es el de access_log este parámetro indica cual es el archivo del que hará el reporte, de forma predeterminada debería ser /var/log/squid3/access.log
Si no es así cambiarlo a ese.

El siguiente es title este simplemente pondrá lo que le pongamos como titulo en los reportes, en mi caso es puesto exactamente esta linea, pero poner la que queráis.

title "Reportes de acceso con Squid"

El siguiente es muy importante: output_dir    este parámetro nos permitirá dejar el reporte donde queramos de nuestro sistema, esto es fundamental para verlo via web. Un ejemplo de su uso es el siguiente:

output_dir /var/www/squid

Esto dejara todos los reportes (manuales) en esa ruta (se que antes he puesto manuales, y es que esta opción solo lo usaran los reportes manuales, pero veremos más adelante como hacer para que no solo sean los manuales).


  Creación manual de reportes con sarg

Para crear un reporte en de todas las entradas del archivo access.log utilizaremos el siguiente comando:

sarg

    Nota*(Recordad que el archivo /var/log/squid3/access.log se rota cada semana)

Como vimos antes los reportes los guardábamos en /var/www/squid por lo tanto si queremos ver el reporte que hemos hecho lo único que tenemos que hacer es poner la dirección de nuestro servidor proxy y la ruta del archivo URL: http://TuServerIP/squid

Con esto ya podremos ver nuestro primer reporte:

En la imagen podemos apreciar lo que podríamos llamar como el "home" de nuestros reportes.

Donde pone FILE/PERIOD son los distintos reportes que tenemos hecho, si mañana hiciéramos uno, aparecería otra fila más, pero en vez de poner 31 pondría 1.

El nombre que tiene el archivo es 2013Jan31-2013Jan31 esto indica que el reporte nos comentara todo lo ocurrido entre el 31 de enero y el 31 de enero, en otras palabras, nos dice que ha pasado en el día 31 de enero. Esto puede variar, ya que nosotros como veremos más adelante podemos pedir reportes de varios días y por lo tanto podría poner algo como esto: 2013Jan31-2013Feb5 y en ese reporte veríamos lo que ha ocurrido entre el 31 de enero y el 5 de febrero, impresionante no? :)

CREATION DATE nos pone cuando a sido reportado el archivo por última vez.

USERS indica el número de usuarios que aparecen en este reporte.

BYTE la cantidad total de tráfico producido en ese reporte, no os engañéis, aunque pone Bytes, lo que haya que hacer caso es a la letra del numerito, en mi caso pone 372.23M --> esta M se refiere de Megas, por lo tanto el trafico generado que se ha producido en ese reporte ha sido de 372.23 Megas.

AVARAGE es el promedio de trafico que han tenido los usuarios en ese reporte.


Como podemos ver, la información que nos muestra esta "simple" pantalla es bastante, pero si pinchamos sobre el archivo veremos un montón de cosas.


















No voy a escribir mucho sobre todas las opciones que tenemos, ya que hay tantas cosas que escribir que esta entrada no terminaría, me basare en lo más importante.

Num --> Numero del usuario *no es muy importante.

las barritas y el dibujo que vemos justo alado son para ver el gráfico por días y para ver lo que ha ido consumiendo dicho usuario a lo largo del día. (una imagen vale más que mil palabras).

GRafica

























por horas (click para ampliar)









USERID --> Nombre del usuario (de forma predefinida pondrá la Ip, pero veremos más adelanta como hacer para poner un nombre :P), si pulsamos sobre el veremos toda la información referente al usuario.


















si dentro de esta imagen pulsamos sobre el reloj alado de cada URL podremos ver a que hora se a conectado.

  volvamos al menú principal del reporte.

BYTES --> Es el tráfico que ha generado el usuario.

%BYTES --> Es el porcentaje de trafico generado por el usuario del total generado en el reporte.

Con esto yo creo que debería bastar, ya que las siguientes opciones caen por su propio peso, aún así os dejo unas imágenes.

Top sites:


Sites & users

Downloads


Denied



Creación de reportes personalizados.

Por ahora solo hemos visto Sarg, pero podemos hacer reportes personalizados.
Para generar un reporte de una fecha especificada, o rango de fechas en especifico usamos el parametro -d, por ejemplo:

sarg -d 30/01/2013

Si quieres generar un reporte de un rango de fechas:
sarg -d 30/01/2013-5/02/2013

si quieres generar un reporte para una hora en especifico usa la opción -t para indicar la hora, por ejemplo:
sarg -d 31/01/2013 -t 20

para generar un reporte de un usuario en especifico usamos -u:

sarg -d 31/01/2013 -u 192.168.1.103

Nota* Después del -u he puesto una dirección ip, pero lo que hay que poner es  USERID que vimos antes, como todavía no os he enseñado a cambiarlo, por ahora tendremos que poner la ip, pero más adelante pondremos el nombre.

PAra generar un reporte de un dominio destino especifico usa -s:

sarg -d 31/01/2013 -s google.es

Como vemos en los ejemplos, podemos juntar varios parámetros para hacer reportes muy variopintos.

Siquieres más información de como se ha hecho el reporte, es aconsejable utilizar la opción -x que ejecuta sarg en modo debug, por ejemplo:

# sarg -x -d 31/01/2013 -t 20:00:00
SARG: Init
SARG: Loading configuration from: /etc/sarg/sarg.conf
SARG: Cargando archivo de exclusiones desde: /etc/sarg/exclude_hosts
SARG: Cargando archivo de exclusiones desde: /etc/sarg/exclude_users
SARG: Parametros:
SARG:
SARG:       Nombre de host o direccion IP (-a) =
SARG:           Log del agente de usuario (-b) =
SARG:              Archivo de exclusiones (-c) = /etc/sarg/excule_hosts
SARG:                   Fecha desde-hasta (-d) = 31/01/2013-31/01/2013
SARG: Direccion e-mail a donde enviar reportes (-e) =
SARG:            Archivo de configuracion (-f) = /etc/sarg/sarg.conf
SARG:                    Formato de fecha (-g) = USA (mm/dd/yyyy)
SARG:                          Reporte IP (-i) = No
SARG:                      Log de entrada (-l) = /var/log/squid3/access.log
SARG:            Resolviendo direccion IP (-n) = No
SARG:                Directorio de salida (-o) = /var/www/squid/Manual/
SARG:   Usa direccion IP en vez de userid (-p) = No
SARG:                      Sitio accedido (-s) = 
SARG:                                Hora (-t) =20:00
SARG:                             Usuario (-u) =
SARG:                 Directorio temporal (-w) = /tmp/sarg
SARG:       Mensajes de depuración (-x) = Si
SARG:                Mensajes de procesos (-z) = No
SARG:
SARG: sarg version: 2.3.2 Nov-23-2011
SARG: Fin
 

lo yo acabo de hacer el siguiente reporte:

 sarg -s google.es

Lo que puedo ver ahora es:













Generación automática de reportes periódicos con SARG.

Vamos a programar cron para que ejecute los reportes cada 5 minutos.

crontab -e

Al final del archivo poner lo siguiente.
*/5 * * * * sarg

Guardamos y cerramos, con esto tendremos el reporte del día actualizado cada 5 minutos.
Donde he puesto sarg, podéis poner el comando que vosotros queráis, por ejemplo:

*/5 * * * * sarg -s google.es


Si ahora esperamos 5 minutos veremos como se han actualizado los datos del reporte de hoy, cuando el día pase, se nos creara automáticamente el reporte del nuevo día y se ira actualizando cada 5 minutos.

Por último vamos a ver como podemos cambiar ese USERID por un nombre que nos haga más cómoda la administración, esto es muy útil si vamos a tener muchos usuarios, como puede ser el caso de un colegio (la persona por la que lo digo lo entendrá)

editamos el archivo sarg.conf

nano /etc/sarg/sarg.conf

y vamos hasta la fila que pone usertab /etc/sarg/usertab

si esta comentada (que tiene un # delante) descomentarla, esta linea lo que nos quiere decir es que va a mirar los USERID que hay en la tabla usertab y los va a cambiar por los nombre que nosotros escojamos. Se que esto se entiende un poco mal, pero cuando lo hagamos sé verá muy claro.
Lo primero sera modificar el archivo usertab

nano /etc/sarg/usertab

 y en la última linea ponemos el USERID que teníamos antes y justamente alado el nombre con el que queremos que aparezca (esto lo tendremos que hacer por cada usuario). Quedando de la siguiente forma para mi ejemplo:

192.168.1.103 Un friki tecnologico

Si os acordáis 192.168.1.103 era la ip del ordenador que estaba usando el proxy en mi ejemplo, lo que le he dicho es que ese USERID me lo cambie por el nombre que le he escrito a continuación, si tuviéramos más usuarios lo  que tendríamos que hacer sería en una linea aparte poner el USERID seguido del nuevo nombre para ese equipo. En otras palabras, la sintaxis para esto es.

USERID <nombre a legir>

 Imagen de como quedara tras esto:













Por último deciros que no es estrictamente necesario utilizar el fichero usertab para esto, podemos usar un archivo que creemos nostros mismo, lo único que en el archivo sarg.conf donde pone usertab /etc/sarg/usertab tendremos que poner la ruta de nuestro archivo, por ejemplo:

usertab /etc/sarg/usuarios.txt

Bueno, creo que el manual esta bastante completito, pero como siempre os aconsejo que que leáis los archivos de configuración para ver muchas más cosas.

Un abrazo sicológico y nos vemos en el próximo manual.

return 0;

Como curiosidad os dejo las canciones que he estado escuchando durante la creación de esta parte del manual:

 Opening del dorama "Yamato Nadeshiko Shichi Henge"



Kimi ga iru kara 君がいるから



9 comentarios:

Cristinel Pavel dijo...

Hola Luis,

Yo ya lo tengo todo configurado a mi gusto, pero me han pedido que a la hora de mirar el log en vez de la IP aparezca el nombre del usuario de Windows.

Aquí he visto que tu le has indicado que nombre pertenece a una IP, pero lo que me piden es que eso se relacione automáticamente.

Es una red de más de 50 ordenadores y las direcciones ip se reparten por DHCP, así que no puedo hacer exactamente lo que dice tu manual...

Espero tu respuesta,

Un saludo.

Luis Serra dijo...

Hola Cristienel,

La duda que tienes es algo muy típico y es que en usertab lo que estamos poniendo son "motes" a las IP, entiendo que lo que quieres es obtener el nombre de la máquina, para eso hay una propiedad en /etc/sarg/sarg.conf la cual se llama resolve_ip y tienes que ponerlo en yes, esta propiedad lo que hace es convertir las ip a su nombre dns correspondiente, en otras palabras, al nombre de la máquina.

Espero que te sirva y si te sirvió deja un comentario diciendolo :)

Cristinel Pavel dijo...

Hola Luisa, (cuando escribas bien mi nombre escribiré bine el tuyo xd)

Ya he hecho lo que me has dicho de "resolve_ip" y al ejecutar el informe diario de sarg me sale el error:
SARG: IP to name resolution (getnameinfo) on IP address 199.103.1.113 failed with error-3 - Fallo temporal en la resolución del nombre.

Y así cada vez que lo intento.

Y lo que yo te preguntaba no sé si esto lo resolverá, pero me han pedido que se muestre el nombre de usuario de Windows, ya que un mismo ordenador lo usan varios usuarios, y lo que tu me has puesto de "resolve_ip" me muestra el nombre de la máquina, no? O también del usuario?

Luis Serra dijo...

Hola Cristinel.

Como bien sospechas resolve_ip lo que hace es resolver el nombre DNS del equipo, en otras palabras el nombre de la máquina no el del usuario.

No hay ninguna manera de saber el nombre de usuario de una máquina.

Los más parecido que puedes hacer es que al proxy entren con usuario y contraseña y de esa manera ya los tendrías controlados (pero la autentificación por usuario y contraseña es una configuración de SQUID no se SARG).

Espero haberte ayudado y suerte.

Cristinel Pavel dijo...

Muchas gracias Luis, por todo.

¿Tú no sabrás como se hace con Squid, verdad?

Y por si lo sabes (y por no hacer mil comentarios), me han pedido que los usuarios se autentifiquen automáticamente, es decir, que no les pide escribir su usuario y contraseña.

Perdona por tanta molestia tío,

Un saludo.

Luis Serra dijo...

Una autentificación de usuarios eficiente y sencilla es utilizando el metodo NCSA el cual soporta squid, para ello primero tendremos que instalar los paquetes que traen el NCSA, para ello tendremos que instalar apache | apt-get install apache2 y con esto ya tendremos los paquetes, lo siguiente es crear el archivo de contraseñas y usuarios.

Para ello utilizamos htpasswd -c /etc/squid3/passwd USERNAME (/etc/squid3/passwd es la ruta donde se guardara el archivo de claves y usuarios y USERNAME es el nombre del usuario que queremos crear).
Cuando teclees eso te pedira su contraseña y ya tendrás a un usuario creado en NCSA. Para crear mas, tienes que poner el mismo comando pero sin la -c

Para que se pida autentificación tendras que ir al archivo de configuración de squid y dentro de ese archivo tendrás que añadir las siguientes lineas

auth_param basic program /usr/lib/squid3/ncsa_auth /etc/squid3/passwd
auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic casesensitive 2 hours

(todas estas lineas estan comentadas en el archivo de configuración, buscalas).

Lo siguiente será crear una ACL nueva como la siguiente:

acl usuarios proxy_auth REQUIRED

Y después decir si vamos a permitir el tráfico a esos usuarios o no.

http_access allow usuarios

Con esto ya tendremos todo controlado.

En cuanto a la pregunta de si se puede hacer automáticamente... Yo creo que no y no sabría como hacerlo, pero es que la verdad una autentificación automática no tiene mucho sentido debido a que si los usuarios y contraseñas se ponen automáticamente ¿Para que sirve?. Pero respondiendo a tu pregunta, pienso que eso no es posible.

yesenia marycruz dijo...

Hola Luis Serra, estuve leendo tu post y esta muy bueno, recien voy conociendo el SARG y veo lo potencial que es, sabes a mi me gustaria obtener un reporte de los sitios mas visitamos en un rango de tiempo, el cual yo misma pueda ejecutar, no se me podrias dar alguna idea de como hacerlo.

Luis Serra dijo...

Hola Yesenia.

En todos los reportes que genera SARG se crea un top 100 de paginas para ese reporte, cuando accedes al reporte deseado habrá un enlace que pone "Top Sites", justamente. Para que lo situes mejor, las opciones que hay debajo son "Sites & Users", "Downloads" y "Denied accesses".

Una vez ya sabemos donde ver en los reportes el top 100 sites, te paso a explicar como se hace un reporte manual entre fechas especificadas.

Para generar un reporte de un rango de fechas especificas usa el parametro -d, por ejemplo:

sarg -d 27/01/2014-28/01/2014

*El formato de la fecha para un rango es: DD/MM/YYYY-DD/MM/YYYY.

Si ademas deseas hacerlo no solo entre un rango de fechas delimitado por días, sino especificando horas minutos y segundos, se utiliza junto al parametro -d el parametro -t, por ejemplo:

sarg -d 27/01/2014-28/01/2014 -t 12

* Los formatos de hora soportados son: HH, HH:MM ó HH:MM:SS.

Espero que te sirva la ayuda, si tienes más preguntas simplemente pon un comentario.

またねー

José Antonio Alvariño Gómez dijo...

Buenas tardes Amigo luis
tengo un prblemita con el reporte sarg y es cuando trato de ver a que hora se conecto cierto usuario a x web como bien explicas en el tutorial si marcamos sobre el icono del reloj este nos mostrara a que hora se conecto x usuario a x web. Cuando hago este procedimiento el reporte me da un dato faciado x ejemplo usuario Jose tiene acceso a internet de 1pm a 2pm y cuando accedo a este reporte me dice que el usuario jose se conecto a las 22:00 o a las 23:00 en fin me da un dato falso. Hasta el momento he investigado y lo unico que mas o menos vi fue el formato de la hora que tiene el server q el actual es HH:mm:ss. se te ocurre algo mas o tienes alguna solucion para este problemita ?

Mis saludos y gracias de ante mano x la ayuda que me puedas aportar saludos

Publicar un comentario