Instalación de AWStats sobre Debian Squeeze

Escrito el 20 junio 2012 por Luis Ignacio Díaz Martínez


Las estadísticas es algo muy importante en el diseño y programación web. Sencillamente si nosotros obtenemos cierta información de los clientes como puede ser que resolución de pantalla utiliza, por que navegador suelen entrar o que país es el que predomina podemos adaptar todo el diseño/contenido y focalizarlo hacía el sector que más nos convenga.

Para ello hay infinidades de herramientas capaz de realizar estos procesos. Nosotros empezaremos con una muy conocida y que da muy buen rendimiento y como no es de software libre. La herramienta en concreto se hace llamar AWStats.

AWStats es una aplicación que simplemente realiza la función de analizar e interpretar los logs. Entre muchos puede analizar los logs de Apache(2) y así darnos cierta información en forma de estadísticas sobre los visitantes o mostrarnos que navegador es el más utilizado..

Lo bueno de esta aplicación es que lógicamente es accesible desde una interface web y que tiene una gran estabilidad. Quizás al principio podamos ver demasiada información acumulada pero uno se acostumbra rápido a saber interpretarla.

Entorno

No me voy a entretener mucho hoy aquí, simplemente el sistema operativo que estamos utilizando es una distribución GNU/Linux bajo el nombre Debian Squeeze en su modalidad de 64bits.

Nota: Tendríamos que tener conocimientos medios de Apache2 para realizar bien todos los pasos que aquí se presentan.

Como funciona

Vamos a explicar por encima el funcionamiento de AWStats. Sencillamente como hemos explicado lo que hace es generar una serie de registros en formato html por medio de los logs de apache. Bien, cuando nosotros llamamos a la aplicación escrita en perl ( awstats.pl ) y le pasamos el fichero de configuración que hemos determinado ( más alante se explica ) con el flag -update lo que hace es revisar el log de apache y generar una serie de archivos como ya repetidas veces hemos dicho.

Los archivos que genera no son bien bien html, si no que son datos estructurados que más tarde la propia aplicación ( awstats.pl ) necesitará para mostrarnos la información en formato html.

Por lo tanto, cuando nosotros queremos entrar a la aplicación lo hacemos de la siguiente forma:

http://midominio.org/awstats.pl?config=midominio.org

Como podemos ver estamos llamando a «awstats.pl» para que genere los informes. Por lo tanto tendremos que tener las librerías as de Perl CGI en funcionamiento.

Organización de los logs

Para que todo esto funcione correctamente y de forma limpia deberemos de tener en cuenta que los logs de apache tienen que estar separados por dominio. Esto quiere decir que tendremos que editar las directivas de configuración de cada uno de nuestros VirtualHost añadiendo rutas personalizadas de logs. Aquí no lo voy a explicar ya que pienso explicarlo en el post de configuración de Apache2.

Simplemente voy a indicar que mis logs están formados con la siguiente sintaxis:

/var/log/apache2/

  • access_demo_midominio_org.log
  • error_demo_midominio_org.log

Como podemos ver consta de:

[TIPO_LOG]_[SUBDOMINIO]_[DOMINIO]_[TLS].log

Instalación

A continuación instaremos el paquete introduciendo lo siguiente:

Si no nos ha dado ningún problema ya está instalado.

Configurando apache2

Primero, lo que tendremos que hacer es añadir la configuración de awstats a la de apache, para ello introduciremos lo siguiente en la linea de comandos:

Con esto estamos copiando la configuración de ejemplo que tiene awstats en el directorio de configuraciones de apache.

Ahora vamos hacer unas modificaciones en el fichero ( la verdad es que son muchas ) así que copiaremos y pegaremos esta configuración:

Ahora introducimos lo siguiente:

Después de todos estos cambios reiniciaremos el servicio de apache.

Configuración

La verdad es que con el fichero de configuración nos pasará igual… mucho comentario y pocas nueces. Así que vamos a eliminar directamente el archivo de configuración básico:

Ahora crearemos un fichero de ejemplo. Aquí podemos ver las campos necesarios para que funcione las estadísticas en base a un dominio dado.

Como podemos ver son pocos los campos. Principalmente estamos definiendo el acceso al log principal del dominio, el dominio, el tipo de formato del log y el directorio de iconos.

Editando los permisos

Para que todo funcione correctamente tendremos que arreglar una serie de permisos. Así que editaremos los permisos de los logs de apache introduciendo el siguiente comando:

Subdominio para awstats ( opcional )

Aquí vamos a crear un VirtualHost para ello. El objetivo es que tengamos un subdominio por servicio y no un directorio. Así que para crear el nuevo VirtualHost nos vamos al directorio «/etc/apache2/sites-available».

Vamos a crear un nuevo documento:

Ahora añadimos lo siguiente:

Ahora guardamos el documento y habilitamos el sitio:

Atención! Implementando esto ( como ya lo pone es opcional ) tendremos que cargarnos la configuración anterior ( la que se encuentra en el directorio de configuración de apache ) para ello realizaremos simplemente lo siguiente:

Con ello habremos eliminado la configuración anterior. Ahora reiniciaremos apache para que se cargue las nuevas modificaciones.

Activando el modulo RewriteEngine ( opcional )

Esto es MUY OPCIONAL simplemente nos servirá para mejorar algunos aspectos visuales en la UR.

Esto que va hacer? Esto nos facilitará una dirección URL más amigable, esto quiere decir que el acceso será más sencillo.

Por ejemplo pongamos el caso que tenemos la siguiente dirección de acceso a nuestro awstats:

  • http://stats.midominio.com/awstats/awstats.pl?config=midominio.com

Esto es bastante largo, sería más sencillo si fuera de la siguiente manera:

  • http://stats.midominio.com/midominio.com/

Simplemente toda la otra parte de la URL la añadirá el solito.

Por lo tanto para activar el modulo tan solo realizaremos lo siguiente:

Ahora reiniciaremos el servicio de apache:

RewriteEngine + Subdominio

Nota: Si no te quieres complicar la vida no hace falta que lo hagas!

Esto se va complicando verdad? ahora vamos a implementar el módulo RewriteEngine junto con el sistema de subdominio. Esto como ya he dicho en el apartado anterior nos será de utilidad ( aun que tampoco variará mucho la forma de trabajar simplemente es mera comodidad.

Configurando

Primero vamos a realizar algunos cambios en el VirtualHost que hemos creado:

Tendría que quedar así:

Explicación

Exactamente que hemos editado?

  1. El DocumentRoot es distinto. En la configuración anterior el DocumentRoot llevaba al directorio por defecto de AWStats que genera Debian. Si no vamos ha modificar nada y solamente mirar las estadísticas lo podemos dejar tal cual ya que es un directorio sin ningún tipo de permisos y no nos pueden tocar nada desde fuera. Pero si queremos ampliar o hacer por ejemplo un «index.html» que contenga los enlaces a las urls de las diferentes zonas de estadísticas tendríamos que cambiar el directorio por defecto por uno el cual se encuentre con los permisos suficientes y no nos plante un problema de seguridad. Por lo tanto hemos modificado este campo por poner «/var/www/__srv/awstats/».
  2. El «<Directory …»  también está cambiado exactamente a la misma ruta del punto anterior.
  3. Hemos modificado ScriptAlias y es muy importante. Simplemente si nosotros estamos trabajando con «alias» alternativos al dominio «algo.dominio.com/alias/» y tenemos un alias que nos indica que la raíz del dominio lleva a la libreria principal del programa creará un error bastante lógico. Nosotros no podemos entrar al WC si este está ocupado verdad? al tener el alias reservado en la raíz no podemos añadir reglas del estilo «todo lo que venga de la última barra del dominio lo interpretas como dominio a analizar por awstats». Por lo tanto cambiamos este parámetro como podemos observar.
El último punto simplemente representa que el acceso al sistema cambiaría de:
  • http://stats.midominio.org/
A esta otra:
  • http://stats.midominio.org/awstats/

Añadido el RewriteEngine con .htaccess

En el directorio «/var/www/__srv/awstats/ tenemos que crear un archivo «.htaccess» ( también lo podríamos hacer directamente en la propia configuración de apache pero así será más fácil y práctico.
Creamos el fichero así:
Y le añadimos lo siguiente:

Ahora mismo con esta configuración tendríamos que poder acceder sin problemas mediante la siguiente dirección:

  • http://stats.midominio.org/dominio.org/
Como podemos ver el método es sencillo, tan solo tendremos que poner el nombre del dominio como si de un directorio se tratase =) así de sencillo.

Automatizando

Ahora vamos a realizar un punto muy importante. Como hemos explicado más arriba AWStats genera los ficheros con extensión HTML por medio de los «logs» de apache. Bien, tenemos que tener en cuenta que estos ficheros se tienen que generar cada «X» tiempo.

Existen varias alternativas para lograr esto, desde crear un script enlazado con un cron para que genere los informes cada «X» tiempo o uno que personalmente me gusta más ( y que se encuentra en la Wiki oficial de Debian 😛 ) es anidar la funcionalidad de generar los informes a la vez que apache genera los suyos.

Pero nos encontramos con un pequeño problema que tenemos que añadir una linea por cada informe ( dominio ) que tenemos.. y claro, soy perezoso por naturaleza y si cuando tengo que añadir una nueva linea por cada nuevo dominio que creo… mal voy, así que generaremos un pequeño script que será lanzado conjunto a los informes de apache.

El script viene a ser el siguiente:

El script es bastante sencillo, lo único que hace es realizar un listado del directorio donde están almacenados los «.conf» de los dominios y los lanza con la aplicación de awstats.

EDITADO: He modificado el Script, tiene control de parámetro (  si el fichero es realmente un documento «.conf» o no ) y corregido algunos fallos.

Ahora le daremos permiso de ejecución:

Y lo más importante lo añadimos al fichero de configuración de apache que se encuentra en:

Y lo dejamos así:

Ahora reiniciaremos apache para cargar la nueva configuración. Si todo ha ido bien tendríamos que tener los logs automáticos en funcionamiento =).

Creación automática de los «.conf»

De nuevo, soy perezoso, y mucho… y me niego a generar manualmente cada uno de los ficheros de configuración de awstats a mano. Así que he generado un pequeño script que realiza esta tarea por mi.

El script en cuestión es el siguiente:

Por último le damos permiso de ejecución:

Es un script muy sencillo que no tiene control de errores y puede llegar a ocasionar algún tipo de problema, más adelante cuando tenga más tiempo lo mejoraré.

Indexación automática

Ahora vamos con otro pequeño script, este tiene como funcionalidad generar un archivo «list.html» que contendrá el nombre de los ficheros dentro de una etiqueta HTML ( li ). Luego este pequeño html será tratado con un pequeño javascript para realizar un listado de las url’s de acceso a las diferentes estadísticas.

Actualmente este pequeño sistema cuenta con cuatro documentos:

  1. index.html
  2. awstats_index.sh
  3. list.html ( autogenerado )
  4. jquery-1.7.2.min.js ( librería )

Primero mostramos index.html:

Y ahora mostraremos el script awstats_index.sh

Nota: Los documentos «list.html» y «jquery-1.7.2.min.js» no los mostraré ya que uno es autogenerado y otro descargado.

Vale, como podemos observar tampoco tiene el tema mucha complicación. Cuando ejecutamos el script «awstats_index.sh» estamos generando el fichero «list.html» en el directorio «/var/www/__srv/awstats/» con una serie de etiquetas «<li>» que en su interior contienen el enlace relativo de las estadísticas. Más tarde el fichero «index.html» con un pequeño código javascript ( con la ajuda de la librería JQuery ) añade el contenido de «list.html» a su interior.

Seguridad en el directorio AWStats

Este tema tambien es importante. Imaginate que algún maldito robot nos juega una mala pasada e indexa todos los reportes en público… nos podríamos meter en un buen lio verdad? por lo tanto tenemos que proteger el directorio de AWStats con una contraseña. Apache con mucha facilidad nos permite esto.

Primero tendremos que crear un directorio donde almacenar las contraseñas, para ello teclearemos lo siguiente:

Ahora crearemos el fichero de la siguiente manera:

Ahora para añadir un nuevo usuario realizamos lo siguiente:

Como podemos observar el segundo comando no tiene el flag «-c».

Ya tenemos el fichero creado y ahora que? bueno, tenemos dos opciones o bien añadimos a la configuración del site los valores pertinentes para que acepte la configuración o bien editamos nuestro fichero .htaccess. Prefiero editar el fichero .htaccess ya que la configuración del site es genérica. PERO EN ESTE CASO como el site de por si no cumple las normas genéricas de los otros ya implementados lo añadiremos directamente.

Así que realizamos lo siguiente:

Guardamos el documento y reiniciamos apache.

Ahora comprobamos que funciona intentando entrar, si nos pide el usuario y la contraseña y nos deja entrar es que funciona correctamente.

Problemas con permisos

Bueno comprobando el funcionamiento de todo esto me he dado cuenta que hay ciertos problemas en los permisos de los logs… y otros ficheros.

Revisando el correo me he encontrado con los siguientes mensajes:

Realmente lo que he echo es cambiar los permisos del directorio apache:

Eso nos dará permisos de lectura en todo lo que necesitemos. Pero como estos logs se auto generan tenemos el problema de que los permisos también se modifican por lo tanto modificaremos también la configuración del logrotate para que genere los archivos con los permisos pertinentes:

Quedando así:

Por si acaso modificaremos también los permisos por medio del script que lanzamos ( awstats_auto.sh ) así que lo editaremos:

Quedando así:

Una vez realizado estonos aparece otro problemaque viene a ser el siguiente:

Como podemos ver no tiene permisos en el directorio «/usr/lib/cgi-bin/» para crear el temporal ( de escritura si lo vemos bien ) por lo tanto le daremos permisos:

Por último a realizar esto aparece un último error:

Así que lo he solucionado creando un awstats.awstats.conf simbólico:

Y en teoría los errores han sido solucionados =) y actualiza de momento bien AWStats!

Referencias utilizadas


Cargando...

Comentarios: