Estadísticas básicas AWStats - HTTP y SMTP


Servidores Linux Ubuntu Server

Instalación de estadísticas básicas de Awstats para un sólo dominio o múltiples dominios. Nótese que para poder sacar estadísticas de múltiples dominios, cada VirtualHost debe logar en un fichero de log diferente.

  • Instalamos el paquete de la distribución:
     # apt-get install awstats


  • Añadimos las siguientes líneas dentro de /etc/apache2/ en conf.d/awstats.conf (virtualhost general de la máquina) como en cada sites-enabled/web_cliente.conf (VirtualHost de las webs en cuestión):
     ScriptAlias /awstats/ /usr/lib/cgi-bin/
     Alias /awstatsclasses /usr/share/awstats/lib
     Alias /awstats-icon /usr/share/awstats/icon
     Alias /awstatscss /usr/share/doc/awstats/examples/css
     Alias /stats /var/www/stats

     <Files awstats.pl>
             AuthName "Estadisticas awstats"
             AuthType Basic
             AuthUserFile /etc/apache2/http_passwords
             require valid-user
     </Files>

Nota: se ha indicado que las anteriores líneas de configuración se deben introducir dentro de cada VirtualHost. Esto es así si queremos mantener usuarios o AuthNames diferentes en cada Website, pero si no es así, bastaría con incluir lo siguiente dentro de cada VirtualHost:

     Include /etc/apache2/conf.d/awstats.conf


  • Creamos el listado de usuarios válidos que podrán acceder a las estadísticas. El require valid-user de la configuración anterior valdría para cualquier usuario de este fichero, aunque puede cambiarse en cada VirtualHost por usuarios concretos si cada web pertenece a un usuario diferente, por algo del tipo "require user awstats".
     # htpasswd -c /etc/apache2/http_passwords awstats


  • Copiamos el fichero de configuración para cada una de las webs y los editamos:
     # cd /etc/awstats/
     # cp awstats.conf awstats.conf.orig
     # cp awstats.conf awstats.dominio1.conf
     # cp awstats.conf awstats.dominio2.conf
     # vim awstats.dominio1.conf
     # vim awstats.dominio1.conf


  • Hacemos los cambios del fichero de configuración necesarios. Los parámetros más importantes son los siguientes:
     LogFile="/var/log/apache2/access.log"
     SiteDomain="dominio.com"
     DirCgi="/awstats"


  • Actualizamos las estadísticas de cada dominio:
     # /usr/lib/cgi-bin/awstats.pl --config=dominio1 -update
     # /usr/lib/cgi-bin/awstats.pl --config=dominio2 -update


  • Verificamos que la rotación de logs es semanal o diaria.


  • Añadimos lo siguiente al /etc/crontab:
     # Actualizar logs awstats
     0-50/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=dominio1 -update >/dev/null
     0-50/10 * * * * root /usr/lib/cgi-bin/awstats.pl -config=dominio2 -update >/dev/null
     # (etc...)


  • Proporcionamos al usuario el username y el password de acceso, sabiendo que las URLs de cada web serán las siguientes:
     http://www.dominio1.com/awstats/awstats.pl?config=dominio1
     http://www.dominio2.com/awstats/awstats.pl?config=dominio2

Si no se indica el parámetro ?config=dominio, aparecerán estadísticas vacías o un error de configuración de awstats, al tratar de mostrar las estadísticas "por defecto" de /etc/awstats/awstats.conf (y no de los ficheros "generales").


  • Para evitar que el usuario acceda a las estadísticas vacías (/etc/awstats/awstats.conf) o para facilitar el acceso en máquinas con un sólo dominio, se crea una carpeta /stats que redirija a una de las estadísticas:
     # cd /var/www
     # mkdir stats
     # cat index.php
     <?php 
     header("Location: http://www.dominio.com/awstats/awstats.pl?config=dominio");
     ?>

De esta forma, el usuario puede acceder directamente a http://dominio.com/stats/, y será redirigido al CGI pidiéndole el password de acceso.


  • Verificar que con esta configuración no se puede acceder a http://dominio/cgi-bin/awstats.pl sin password.



Servidores Linux RedHat

Instalación de estadísticas básicas de Awstats para un sólo dominio o múltiples dominios. Nótese que para poder sacar estadísticas de múltiples dominios, cada VirtualHost debe logar en un fichero de log diferente.


  • Instalamos el paquete de la distribución. Si no existe yum (y todavía se usa up2date), instalarlo junto al repositorio de rpmforge:
     # yum install awstats


  • Editamos el /etc/httpd/conf/awstats.conf:
     Alias /awstats/icon/ /var/www/awstats/icon/
     Alias /stats /var/www/stats
     ScriptAlias /awstats/ /var/www/awstats/
     <Directory /var/www/awstats/>
             DirectoryIndex awstats.pl
             Options ExecCGI
             #order deny,allow
             #deny from all
             #allow from 127.0.0.1

             AuthName "Estadisticas awstats"
             AuthType Basic
             AuthUserFile /etc/httpd/http_passwords
             require valid-user
     </Directory>

     <Files "awstats.pl">
             AuthName "Estadisticas awstats"
             AuthType Basic
             AuthUserFile /etc/apache2/http_passwords
             require valid-user
     </Files>


  • Dentro de cada VirtualHost, agregamos:
     Include /etc/httpd/conf.d/awstats.conf

Nota: si alguno de los VirtualHosts requiere una configuración / usuario diferente, en lugar del Include se pueden indicar directamente las directivas de Directory y Files dentro del mismo.


  • Creamos el listado de usuarios válidos que podrán acceder a las estadísticas. El require valid-user de la configuración anterior valdría para cualquier usuario de este fichero, aunque puede cambiarse en cada VirtualHost por usuarios concretos si cada web pertenece a un usuario diferente.
     # htpasswd -c /etc/httpd/http_passwords awstats


  • Copiamos el fichero de configuración para cada una de las webs y los editamos:
     # cd /etc/awstats/
     # cp awstats.conf awstats.conf.orig
     # cp awstats.conf awstats.dominio1.conf
     # cp awstats.conf awstats.dominio2.conf
     # vim awstats.dominio1.conf
     # vim awstats.dominio1.conf


  • Hacemos los cambios del fichero de configuración necesarios. Los parámetros más importantes son los siguientes:
     LogFile="/var/log/httpd/access_log"
     SiteDomain="dominio.com"
     DirCgi="/awstats"


  • Actualizamos las estadísticas de cada dominio:
     # /var/www/awstats/awstats.pl --config=dominio1 -update
     # /var/www/awstats/awstats.pl --config=dominio2 -update


  • Verificamos que la rotación de logs es semanal o diaria.


  • Añadimos lo siguiente al /etc/crontab:
     # Actualizar logs awstats
     0-50/10 * * * * root /var/www/awstats/awstats.pl -config=dominio1 -update >/dev/null
     0-50/10 * * * * root /var/www/awstats/awstats.pl -config=dominio2 -update >/dev/null
     # (etc...)


  • Proporcionamos al usuario el username y el password de acceso, sabiendo que las URLs de cada web serán las siguientes:
     http://www.dominio1.com/awstats/awstats.pl?config=dominio1
     http://www.dominio2.com/awstats/awstats.pl?config=dominio2

Si no se indica el parámetro ?config=dominio, aparecerán estadísticas vacías o un error de configuración de awstats, al tratar de mostrar las estadísticas "por defecto" de /etc/awstats/awstats.conf (y no de los ficheros "generales").


  • Para evitar que el usuario acceda a las estadísticas vacías (/etc/awstats/awstats.conf) o para facilitar el acceso en máquinas con un sólo dominio, se crea una carpeta /stats que redirija a una de las estadísticas:
     # cd /var/www
     # mkdir stats
     # cat index.php
     <?php 
     header("Location: http://www.dominio.com/awstats/awstats.pl?config=dominio");
     ?>

De esta forma, el usuario puede acceder directamente a http://dominio.com/stats/, y será redirigido al CGI pidiéndole el password de acceso.



Estadísticas de correo con Awstats en servidores Postfix

Cómo generar estadísticas de correo en servidores Postfix mediante awstats. Las estadísticas se generan localmente y requieren de un servidor Web para ser visualizadas. Es posible modificar los scripts para que no requieran servidor Web y empaqueten las estadísticas con sus iconos en ZIPs visualizables localmente.


  • Instalar el paquete awstats.


  • Generar un fichero de configuración para Postfix.
     # cd /etc/awstats/
     # cp awstats.conf awstats.postfix.conf


  • Modificar el fichero de configuración para que analice logs de correo:
     # /etc/awstats$ diff awstats.postfix.conf awstats.conf | grep "<" | sed -e 's/\< //g'
     LogFile="perl /usr/share/doc/awstats/examples/maillogconvert.pl (partido)
     standard < /var/log/postfix/mail.log |"
     LogType=M
     LogFormat="%time2 %email %email_r %host %host_r %method %url %code %bytesd" 
     SiteDomain="mail.dominio.com"
     AllowToUpdateStatsFromBrowser=1
     LevelForBrowsersDetection=0
     LevelForOSDetection=0
     LevelForRefererAnalyze=0
     LevelForRobotsDetection=0
     LevelForWormsDetection=0
     LevelForSearchEnginesDetection=0
     LevelForFileTypesDetection=0 
     MaxRowsInHTMLOutput=2000
     Lang="es"
     ShowSummary=HB
     ShowMonthStats=HB
     ShowDaysOfMonthStats=HB
     ShowDaysOfWeekStats=HB
     ShowHoursStats=HB
     ShowDomainsStats=0
     ShowHostsStats=HBL
     ShowRobotsStats=0
     ShowEMailSenders=HBML
     ShowEMailReceivers=HBML
     ShowSessionsStats=0
     ShowPagesStats=0
     ShowFileTypesStats=0
     ShowOSStats=0
     ShowBrowsersStats=0
     ShowOriginStats=0
     ShowKeyphrasesStats=0
     ShowKeywordsStats=0
     ShowMiscStats=0
     ShowHTTPErrorsStats=0
     ShowSMTPErrorsStats=1
     MaxNbOfHostsShown = 40
     MaxNbOfEMailsShown = 100
     FirstDayOfWeek=0
     ShowLinksOnUrl=0


  • Crear /var/www/awstats/ y /var/www/awstats/oldstats/ en distribuciones Debian, o /var/www/stats en RedHats (ya que RedHat instala awstats en /var/www/awstats):
     # mkdir /var/www/awstats
     # mkdir /var/www/awstats/oldstats


  • Crear una redirección postfix_stats@dominio.com que llegue a los usuarios destino de las estadísticas.


  • Crear el siguiente script genera_estadisticas_awstats.sh, para generar estadísticas estáticas en el servidor Web local. El enlace a las mismas se enviará por correo. El path de ejecución de awstats en este script es /usr/lib/cgi-bin (distribuciones Debian y Ubuntu), en el caso de RedHat se debe cambiar por /var/www/awstats/, y el directorio destino de las estadísticas por /var/www/stats.
     $ cat /usr/local/bin/genera_estadisticas_awstats.sh
     #!/bin/sh
     #
     # Crear estadisticas de awstats para postfix.

     EMAIL="postfix_stats@dominio.com"

     cd /var/www/awstats/

     DIA="`date +%u`"
     # Se rotan las estadísticas semanalmente.
     if [ "x${DIA}x" == "x7x" ];
     then
        YESTERDAY="`date -d yesterday +%F`"
        mkdir -p oldstats
        cp -f awstats.* oldstats/awstats-${YESTERDAY}.html
     fi

     # Actualizar estadisticas:
     /usr/lib/cgi-bin/awstats.pl --config=postfix -update

     # Generar estadisticas (sin paginas adicionales ni enlace a ellas):
     /usr/lib/cgi-bin/awstats.pl --config=postfix -output -staticlinks \
      | sed -n '/^$/!{s/<a href[^>]*>//g;p;}' > awstats.html

     echo "http://www.dominio.com/awstats/awstats.html" | \
       mail -s "[mail.dominio.com] Estadisticas semanales postfix (awstats)" \
       $EMAIL


  • Se añade la siguiente configuración a Apache, dentro del VirtualHost que deba servir las estadísticas:
     Alias /stats /var/www/awstats
     <Directory "/var/www/awstats">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        AuthType Basic
        AuthName "Acceso a estadisticas postfix"
        AuthUserFile /etc/apache2/http_passwords
        Require user awstats
     </Directory>


  • Se crea el fichero de passwords http_passwords con el usuario "awstats".
     # htpasswd -c /etc/apache2/http_passwords awstats


  • Se añade la generación de estadísticas al Cron:
     30 5 * * 7 root /usr/local/bin/genera_estadisticas_awstats.sh > /dev/null

Esto actualiza las estadísticas diariamente. Se puede cambiar la periodicidad a "cada 30 minutos" y prescindir del email de aviso al usuario si éste ya tiene conocimiento de la URL de acceso.



Estadísticas de correo con pflogsumm en servidores Postfix

Cómo generar estadísticas de correo en servidores Postfix mediante pflogsumm. Las estadísticas se generan localmente y se envían por correo en un formato de texto puro con todos los datos relativos a los logs analizados. Estas estadísticas no sumarizan datos antiguos y se deben pasar a los logs antes de su rotación, proporcionando la información sólo del período temporal que contiene el fichero mail.log. Así, las podemos generar semanalmente o diariamente según la periodicidad de rotación de los logs.


  • Instalar el paquete pflogsumm última versión, o descargar la última versión disponible de la web del autor e instalarlo en /usr/local/bin. En el caso de Debian, la versión de paquete es la 1.0 y el tar.gz contiene la 1.1. El programa es un script en perl por lo que es "seguro" y "mantenible" instalarlo desde tar.gz.


  • Configurar en postfix una rotación de logs semanal o diaria, según cada cuánto se quieran recibir las estadísticas.


  • Crear una redirección postfix_stats@dominio.com que llegue a los usuarios destino de las estadísticas.


  • Crear el siguiente script de generación de estadísticas:
     $ cat /usr/local/bin/estadisticas_postfix.sh
     #!/bin/sh
     #
     # Estadisticas de postfix con pflogsumm.
     #

     EMAIL="postfix_stats@dominio.com"

     SUBJECT="[mail.dominio.com]: Estadisticas semanales postfix (pflogsumm)"

     cd /var/log/postfix/
     cat mail.log | pflogsumm-1.1.1 --no_smtpd_warnings | mail -s "$SUBJECT" $EMAIL


  • Ejecutar la generación de estadísticas en el cron:
     00 6 * * 7 root /usr/local/bin/estadisticas_postfix.sh



Generación de estadísticas anuales actualizadas estáticas

Es posible generar estadísticas estáticas con awstats, utilizando un binario directamente diseñado a tal efecto. Estas estadísticas se actualizarán regularmente, y sólo mostrarán las del año en curso. De esta forma, el usuario no accede al CGI de awstats y se le muestra una visión HTML plana que se puede guardar desde el navegador (guardando la web completa).


  • Creamos en el sistema el siguiente directorio:
     # mkdir /var/www/stats


  • Lo protegemos en Apache al igual que en los casos anteriores:
     Alias /awstatsclasses /usr/share/awstats/lib
     Alias /awstats-icon /usr/share/awstats/icon
     Alias /awstatscss /usr/share/doc/awstats/examples/css
     Alias /stats /var/www/stats
     
    <Directory "/var/www/stats">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        AuthType Basic
        AuthName "Acceso a estadisticas Web"
        AuthUserFile /etc/apache2/http_passwords
        Require user awstats
    </Directory>


  • Creamos el usuario de autenticación:
     # htpasswd -c /etc/apache2/http_passwords awstats


  • Creamos el siguiente script de estadísticas:
     $ cat /usr/local/bin/genera_estadisticas_anuales.sh 
     #!/bin/sh

     YEAR="`date +%Y`"

     EMAIL="usuario@destino.com"
     AWSTATS="/usr/lib/cgi-bin/awstats.pl"
     AWSTATIC="/usr/share/doc/awstats/examples/awstats_buildstaticpages.pl"
     DESTDIR="/var/www/stats/$YEAR"
     WEB="dominio.com"
     USER="webuser"

     mkdir -p $DESTDIR
     chown $USER:$USER $DESTDIR
     cd $DESTDIR

     # Actualizar estadisticas:
     $AWSTATS --config=${WEB} -update

     $AWSTATIC -config=${WEB} -dir=$DESTDIR -awstatsprog=$AWSTATS -year=$YEAR -month=all
     rm -f index.html
     su -c "ln -sf awstats.dominio.com.html ${DESTDIR}/index.html" $USER
     chown ${USER}:${USER} *


  • Introducir las siguientes líneas en /etc/crontab:
     # Actualizar estadísticas anuales:
     0-59/10 * * * * root /usr/local/bin/genera_estadisticas_anuales.sh > /dev/null



Notas sobre versiones

Los pasos anteriormente descritos son para distribuciones Ubuntu Server 8.04 y RedHat/CentOS 4.x y 5.x. Estos pasos, así como los paths, ubicaciones de binarios, etc, pueden variar en versiones anteriores o posteriores, o si así lo determinan los mantenedores de los paquetes.



<Volver a la sección de GNU/Linux>