Análisis de las visitas a un servidor web Apache con R
Análisis de las visitas a un servidor web con R
Por el eterno descanso de todos los difuntos y el consuelo y esperanza de sus familiares. – Conferencia Episcopal Española.
Ficheros de registro de acceso y error
Las páginas webs creadas en Debian o Ubuntu almacenan la información sobre los accesos y los errores en lo siguientes ficheros.
tail -100 /var/log/apache2/access.log tail -100 /var/log/apache2/error.log
Si solo aparece un día en los registros
Si solo aparece un día en los registros, comprobamos en qué día empieza el fichero access.log
, y verificamos las copias de respaldo que existen.
head -5 /var/log/apache2/access.log ls -al /var/log/apache2/
En mi caso aparecen por defectos catorce copias de respaldo y el fichero access.log
comienza hoy de madrugada.
Sobre el fichero access.log
El fichero access.log
llega a alcanzar un tamaño considerable. Por defecto se reinicia diariamente por la configuración de logrotate
.
cat /etc/logrotate.d/apache2
/var/log/apache2/*.log { daily missingok rotate 14 compress delaycompress notifempty create 640 root adm sharedscripts postrotate if invoke-rc.d apache2 status > /dev/null 2>&1; then \ invoke-rc.d apache2 reload > /dev/null 2>&1; \ fi; endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript }
Modificamos /etc/logrotate.d/apache2
según estas instrucciones, aunque revisamos por si acaso la documentación oficial. Así conseguimos que el fichero access.log
contenga registros de varios días, no solo del último día.
/var/log/apache2/*.log { size 100M compress dateext maxage 120 postrotate if invoke-rc.d apache2 status > /dev/null 2>&1; then \ invoke-rc.d apache2 reload > /dev/null 2>&1; \ fi; endscript prerotate if [ -d /etc/logrotate.d/httpd-prerotate ]; then \ run-parts /etc/logrotate.d/httpd-prerotate; \ fi; \ endscript }
size 100M
. Cuando los ficherosaccess
oerror
superan este tamaño, rotarán. Otras medidas como 100k (para Kb) o 100G (para GB), o de frecuencia daily, weekly, monthly marcan el criterio de rotación.compress
. El fichero rotado se comprime mediantegzip
con la extensión.gz
.dateext
. Añade la fecha en formato YYYYMMDD a los ficheros rotados, i.e en vez deaccess.log.1.gz
, se nomina comoaccess.log-20030928.gz
.maxage
. La duración en días en los que se mantiene los ficheros rotados.postrotate
,prerotate
,endscript
. Las instrucciones para proceder cuando se rotan los ficheros.
Análisis de los registros con R
El fichero access.log
contiene los campos de acceso de las IPs, ficheros visitados, etc. El siguiente código de R permite un análisis rápido de los mismos.
library(data.table) library(fasttime) fileaccess <- "/var/log/apache2/access.log" dd <- fread(fileaccess) nms <- c("ip", "v2", "v3", "ffecha", "ff2", "fichero", "http", "v8", "enlace", "navegador") names(dd) <- nms a <- strptime(dd$ffecha, "[%d/%b/%Y:%H:%M:%S") dd$fecha <- fastPOSIXct(as.character(a)) dd$ffecha <- NULL dd$ff2 <- NULL dd$v2 <- NULL dd$v3 <- NULL dd[enlace == "-", enlace := NA] dd[navegador == "-", navegador := NA] ## Top IPs x <- table(dd$ip) head(sort(x, decreasing = TRUE), 10) ## Top pages x <- table(dd$enlace) head(sort(x, decreasing = TRUE), 10)
Visualización de los registros con awstats
El programa awstats
visualiza de forma amigable estos registros.
Instalación
Para instalar y configurar este programa, seguimos los siguientes pasos explicados aquí.
sudo apt-get install awstats
cd /etc/awstats
sudo cp awstats.conf awstats.centon.conf
Edite /etc/awstats/awstats.centon.conf
y rellene oportunamente el SiteDomain
:
SiteDomain="156.35.173.56"
Uso de awstats
Crea una página html con toda la información relevante. Cualquier navegador sirve para visualizarla.
sudo awstats -config=centon -update sudo awstats -config=centon -output -staticlinks > misregistros.html
Abra el fichero misregistros.html
en un navegador.