Desde hace unos meses he dejado de lado a Piwik, el maravilloso sistema de estadÃsticas que he venido usando durante los tres últimos años. Piwik ha evolucionado muchÃsimo desde que empecé a usarlo: ya no usa gráficos flash, mantiene muy controlado el tamaño de su base de datos, es más rápido y tiene nuevos plugins que lo convierten en un perfecto competidor libre de google analytic y lo están haciendo escalar puestos poco a poco en el competitivo ranking de los sistemas de estadÃsticas. Pero… tiene un enorme problema: el consumo de memoria resulta del todo inasumible para una máquina con RAM escasa que es el gran cuello de botella de un servidor web con Apache, asà que cuando me pasé a un servidor VPS en Linode, con la limitación de RAM que eso supone, fue lo primero que tuve que sacrificar. Algún dÃa me pararé a probar lighttpd o a ver si realmente el módulo MPM worker mejora tanto como cuentan la gestión de memoria, pero por el momento los alrededor de 128 Megas que consumen los scripts de Piwik me resultan del todo inasumibles.
AWStats tiene un aspecto realmente «viejuno» de web sacada de Geocities, pero hace bien lo que tiene que hacer, apenas consume RAM y obtiene sus resultados leyendo directamente de los logs de Apache con lo que no pierde ni una sóla visita. Cualquier otro método (usando javascript en cliente, PHP en el servidor, etc.) es susceptible de perder información en determinadas circunstancias.
El hecho de que no ofrezca datos en tiempo real se puede mitigar haciendo que los logs se procesen en intervalos más pequeños o, incluso, añadiendo un enlace para que estos se procesen bajo demanda. El filtro de estadÃsticas diario que por defecto no es posible también puede conseguirse mediante la extensión Day by Day que también veremos en esta entrada.
Los únicos requisitos previos son tener instalados perl (necesario para ejecutar los scripts de awstats) y nuestro servidor web que, en este ejemplo, será Apache. La instalación en una debian es tan fácil como siempre (apt-get install awstats) pero la versión en el repositorio estable es la 6.9.5 que tiene más de dos años. Si quieres trabajar con la última versión (la 7.0 o la beta 7.1 en estos momentos) lo más fácil es bajarte el paquete desde aquà y descomprimirlo en tu servidor en el directorio /usr/local. Todo lo que vamos a ver a continuación supone que estamos instalando por este segundo método.
A continuación creamos un virtual host en nuestro Apache para realizar el acceso a las estadÃsticas o incluimos las siguientes lÃneas (sacadas del modelo que tendremos en el fichero /usr/local/awstats/tools/httpd_conf) en, por ejemplo, la instancia por defecto del mismo:
Alias /awstatsclasses "/usr/local/awstats/wwwroot/classes/"
Alias /awstatscss "/usr/local/awstats/wwwroot/css/"
Alias /awstatsicons "/usr/local/awstats/wwwroot/icon/"
Alias /awstatsjs "/usr/local/awstats/wwwroot/js/"
ScriptAlias /awstats/ "/usr/local/awstats/wwwroot/cgi-bin/"
Options None
AllowOverride None
Order allow,deny
Allow from all
Una vez editado debemos de pedir a apache que vuelva a leer la configuración para que tengan efecto estas lÃneas (service apache2 reload).
Vamos ahora a crear un fichero de configuración para awstats. Partimos del modelo que habrá en /usr/local/awstats/wwwroot/cgi-bin/awstats.model.conf. Lo copiamos en el directorio /etc/awstats (que debemos de haber creado antes) con un nombre distintivo (por ejemplo awstats.miweb001.conf) y lo editamos para adecuarlo a nuestra instalación. Mucha antención a la partÃcula miweb001 que deberÃa de identificar a la web cuyas estadÃsticas queremos ver y que tendremos que usar en otras instrucciones más adelante. Las lÃneas que deberÃas de modificar sobre la configuración por defecto (y que no aparecen consecutivamente como aquà ¿eh?) son estas:
LogFile="/var/log/apache2/apache2-myweb001-access.log"
SiteDomain="www.miweb001.es"
HostAliases="www.miweb0001.com www.miweb001.net"
DNSLookup=1
DirData="/var/lib/awstats"
DirCgi="/awstats"
DirIcons="/awstatsicons"
AllowToUpdateStatsFromBrowser=1
AllowFullYearView=3
Las tres primeras definen, respectivamente, el emplazamiento del fichero de logs de la instancia de apache, el nombre de la web y los posibles alias a través de los cuales podamos acceder a la misma (separados estos por espacios). La cuarta lÃnea habilita la resolución completa por DNS de las IP’s de acceso. En la quinta lÃnea decimos donde queremos que deje los ficheros resultantes de procesar los ficheros de log (¡no olvides crearlo!). En la sexta y la séptima se define donde están los diferentes componentes de awstats según los hemos definido anteriormente en el fichero de configuración de la instancia de apache. Las dos últimas lÃneas hacen que nos aparezca un enlace que permita refrescar los datos en cualquier momento y habilitan la posibilidad de realizar informes estadÃsticos de todo un año.
Existen muchos otros parámetros interesantes o útiles para activar plugins, funcionalidades extras, personalización, etc, pero yo te recomiendo que lo eches a funcionar sólo con esto que es lo mÃnimo y luego ya te metas en experimentar otras cosas. Sobre todo si no tienes mucha experiencia en estas lides.
Vamos ahora a programar el cron de nuestra máquina para que procese los logs de apache, por ejemplo, cada 15 minutos. Creamos un fichero llamado /etc/awstats/cron-awstats.sh, le damos permisos de ejecución y copiamos lo siguiente en él:
#!/bin/sh
perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=miweb001 -update
perl /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -config=miweb001 -databasebreak=day -update
Fijate bien en que la partÃcula que aparece a continuación de config en ambas lÃneas (miweb001) debe de ser exactamente la misma que aparece en el nombre del fichero de configuración que hemos creado anteriormente (awstats.miweb001.conf). Bien, ahora editamos el fichero /etc/crontab y añadimos al final del mismo lo siguiente:
*/15 * * * * root /etc/awstats/cron-awstats.sh > /dev/null
Y listo. Nos quedan unos pequeños retoques pero ahora ya cada 15 minutos se analizarán los logs del servidor de apache y podremos consultar la información, ya procesada, en la siguiente URL. Atención, de nuevo, a la partÃcula miweb001:
http://ip-del-servidor/awstats/awstats.pl?config=miweb001
Si, como es habitual, nuestro sistema rota los ficheros de log tenemos que evitar perder el procesado de los últimos minutos antes de una rotación. Para ello editamos el fichero /etc/logrotate.d/apache2 y bajo la lÃnea donde pone prerotate volvemos a ejecutar el procedimiento que llama a los scripts de awstats:
prerotate
/etc/awstats/cron-awstats.sh > /dev/null
Lo último que nos resta por hacer es habilitar la posibilidad de mostrar informes diarios. Para ello usaremos la extensión Day by Day. Para instalarla y configurarla tenemos que descargarnos la última versión, descomprimirla y copiar los dos archivos javascript (day-by-day-head.js y day-by-day-end.js) en el directorio /usr/local/awstats/wwwroot/js/. A continuación editamos el fichero de configuración de awstats (recuerda que en nuestro ejemplo se llama awstats.miweb001.conf y está en el directorio /etc/awstats) y reemplazamos los valores de los dos parámetros HTMLHeadSection y HTMLEndSection (casi al final del fichero) por las siguientes lÃneas:
HTMLHeadSection=""
HTMLEndSection=""
Una vez hecho esto, la pantalla principal de nuestro awstats aparecerá con un cintillo en la parte superior donde podemos escoger un dÃa concreto y, al hacerlo, en la gráfica principal aparecerá un corte de detalle por horas. El resto de los datos también serán referidos al dÃa escogido. Para volver a la vista mensual pulsamos el enlace «Back to monthly report» del cintillo superior.
Si tenemos otras instancias web separadas en nuestro servidor y también queremos obtener sus estadÃsticas sólo tenemos que repetir, por cada una de ellas, dos de los pasos anteriores:
- Crear un fichero de configuración separado en el directorio /etc/awstats con los datos pertinentes. No olvides incluir las lÃneas finales que hemos visto para la extensión Day by Day.
- Añadir un par de lÃneas adicionales correspondientes a la nueva instancia en el fichero /etc/awstats/cron-awstats.sh
La URL para consultar las estadÃsticas de estas nuevas instancias será también diferente, claro. Y recuerda que la partÃcula distintiva que usamos en el nombre del fichero de configuración será la que nos permitirá construirla.
Buen dÃa
Tengo la duda del hardware necesario para que awstats soporte gráficas 1500 urls
Agradezco de antemano su apoyo
@VÃctor: En la parte superior de la página puedes elegir el perÃodo mostrado. Hay un selector para el mes, otro para el año y un botón de aceptar ¿no lo ves?
ejecuto el script para actualizarlas estadisticas, pero veo las estadisticas del mes en curso.
como puedo ver las estadisticas del mes aterior?
La verdad es que Piwik también me gusta mucho, y gana ahora mucho gracias a la aplicación Android que tienen.
Pero claro, en mi caso tengo que saber diferenciar la utilización práctica de uno y de otro.
He podido observar Apache2Piwik lo has conseguido probar? que tal es?
Un saludo!
RT @josemaria: En el blog: #awstats revisitado: http://t.co/khNeU7Nn
En el blog: #awstats revisitado: http://t.co/jnQgxpjU