UP | HOME |

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.

Cristo yacente, Gregorio Fernández.

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 ficheros access o error 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 mediante gzip con la extensión .gz.
  • dateext . Añade la fecha en formato YYYYMMDD a los ficheros rotados, i.e en vez de access.log.1.gz, se nomina como access.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.