Registro de Peticiones HTTP con Apache: Un tutorial rápido
13:12, 27.07.2026
Fundamentos del registro de Apache
Los registros de Apache contienen información sobre las respuestas de Apache, las solicitudes procedentes de otros ordenadores y las acciones internas del servidor. En esta guía, analizaremos los fundamentos del registro de logs y, en concreto, los tipos de logs, su ubicación de almacenamiento e incluso su interpretación. Además, compartiremos información sobre la configuración de módulos y la configuración de formatos de log personalizados.
Categorías de registros de Apache
Los registros de Apache se dividen en dos categorías: registros de errores y registros de acceso.
Registros de acceso
Los registros de acceso incluyen datos sobre las solicitudes que acceden al servidor. Este tipo de registro suele contener datos sobre la página web que se ha consultado, si dicha solicitud ha tenido éxito y cuánto tiempo ha tardado en obtener resultados.
Registros de errores
Como es obvio, los registros de errores incluyen datos sobre los errores que se produjeron mientras el servidor procesaba una solicitud concreta. Al igual que los registros de acceso, también incluyen la hora exacta en la que se produjo la solicitud y la dirección IP. Gracias a los registros de errores, se le notificarán los problemas que se hayan producido. Por ejemplo, si falta un archivo,
Ubicaciones de los archivos de registro
Según la configuración predeterminada, el almacenamiento tanto de los registros de errores como de los de acceso se realiza por separado en el servidor. Dependiendo del sistema operativo utilizado, la ubicación puede variar ligeramente.
Ajustar la configuración de registro de Apache
Apache ofrece una configuración de registro muy flexible, gracias a la cual es posible configurar el comportamiento del registro para cada host virtual o de forma global. El comportamiento de registro se puede modificar mediante varias directivas. Veamos, pues, las directivas más comunes: el formato de registro y el nivel de registro.
Uso de la directiva LogLevel
La directiva LogLevel es necesaria para determinar el nivel mínimo de gravedad de los eventos. El nivel de gravedad especifica la importancia de un evento concreto y puede variarse. Por ejemplo, el nivel de gravedad puede establecerse como «Trace8» o «Emerg». «Emerg» indica los eventos que pueden provocar algún tipo de inestabilidad, mientras que «Trace8» se refiere a los mensajes de rastreo. Por ejemplo, «LogLevel crit» ignora todos los niveles excepto «Emerg», «Alert» y «Crit».
Definición de formatos de registro personalizados
La directiva LogFormats se encarga del formato y la disposición de los eventos de registro. Según la configuración predeterminada, se utiliza CLF (Common Format), pero también se puede emplear una cadena de formato específica.
La directiva «CustomLog» también es necesaria para cambiar la ubicación de los archivos de registro. En la mayoría de los sistemas Linux, los registros suelen escribirse en «var/log/httpd» o «var/log/apache2». Además, puedes modificar la cadena que sigue al nombre del archivo para que los cambios específicos se apliquen únicamente a ese archivo concreto.
La lista completa de los campos se puede consultar en la documentación sobre los registros. Para supervisar la actividad del servidor y resolver de inmediato los problemas que surjan, debes utilizar los siguientes 5 campos:
- %T: especifica el tiempo dedicado al procesamiento de la solicitud. Este es un campo muy útil, ya que permite medir la velocidad del sitio web. Para obtener los mismos resultados, pero en microsegundos, en lugar de «T», debes utilizar «D».
- %>s – con esta opción puedes comprobar el estado de la solicitud tras una redirección interna.
- %a – muestra la dirección IP desde la que se ha realizado la solicitud. Esto significa que puedes identificar la actividad del tráfico con mucha más facilidad.
- %{ID}e – «ID» hace referencia al identificador de la solicitud, lo que significa que cada solicitud tiene su propio identificador único. Esto se puede utilizar para rastrear solicitudes entre el servidor de la aplicación web y Apache.
- %U – Ruta de la URL, pero excluyendo los parámetros adicionales, como la cadena de consulta.
Asignación de apodos a los registros
La asignación de apodos a los registros resulta extremadamente útil, especialmente cuando se utilizan varios archivos de registro para distintos hosts virtuales. El apodo asignado se puede utilizar con la directiva `CustomLog` para que los registros se escriban en el formato especificado. Esto significa que puedes especificar formatos de registro distintos para cada archivo de registro y, al mismo tiempo, no perderás tiempo redefiniendo el formato cada vez.
Registro en formato JSON
El almacenamiento de los registros en el formato de texto habitual facilita mucho la consulta de los archivos en caso de que sea necesario. Por supuesto, este formato es fácil de leer a simple vista, pero resultará complicado procesar dichos datos mediante herramientas de gestión de registros, ya que estas soluciones tienen un formato específico. Es cierto que la mayoría de las herramientas de gestión utilizan el formato predeterminado de Apache, pero si no es así, deberías plantearte utilizar JSON.
JSON es la abreviatura de «JavaScript Object Notation» y es un formato ideal para el almacenamiento de datos estructurados. JSON resulta muy útil, ya que puede almacenar prácticamente cualquier estructura o tipo de datos. Además, este formato es ideal para la autodocumentación de la información. Entre los tipos básicos que admite este formato, podemos destacar las matrices, los números, las cadenas de caracteres, el valor nulo y los operadores booleanos.
Implementación de la rotación de registros
Los problemas que pueden surgir con los registros de acceso u otros registros son el consumo excesivo de espacio o las dificultades de gestión. Con la implementación de la rotación de registros, es posible hacer frente a este problema.
Existe un programa específico, «rotatelogs», que puede ayudar a rotar los registros en función de su tamaño y tiempo. El comando estándar «logrotate» también es una buena opción con la que puedes empezar. En la mayoría de los sistemas Linux, Apache tiene un archivo de configuración.
El archivo de configuración predeterminado en Debian 11 se encuentra en /etc/logrotate.d/apache2. Puedes modificar este archivo para ajustar la rotación de registros de Apache. A continuación, explicaremos el significado de cada sección de este archivo de configuración:
- La ausencia de «ok» no supone ningún problema si se especifica el archivo de registro.
- /var/log/apache2/*.log: significa que la configuración se aplicará a todos los archivos que terminen en .log en la ubicación especificada. Después de { se especifican todas las directivas para logrotate y, a continuación, se utiliza }.
- «Compress» significa que se aplica a los archivos de registro rotados.
- Si se indica «daily», significa que las rotaciones se realizan a diario; también se puede cambiar este valor a «yearly», «weekly» o «monthly».
- «Rotate 14-» significa que se conservan 14 archivos de registro, mientras que los demás se eliminan. En caso de que se utilice la rotación diaria, dispondrás de aproximadamente dos semanas de registros guardados.
- «Delaycompress» significa que los archivos recientes no se comprimen, mientras que los más antiguos sí se comprimen.
- «Notifempty»: significa que los archivos vacíos no se someten a rotación.
- Sharedscripts: los scripts posteriores a la rotación no se ejecutarán hasta que se hayan rotado todos los registros.
- Create 640 root adm: significa que, tras la rotación, se crearán archivos con permisos 640.
Configuración predeterminada de los registros para hosts virtuales
Los hosts virtuales son necesarios para ejecutar varios sitios web en un mismo servidor. Para cada host virtual, puedes especificar una configuración de registro independiente. Esto significa que puedes hacer que los registros de cada sitio se guarden en un directorio distinto. O también puedes optar por mantener la configuración global predeterminada.
A continuación se muestra un ejemplo en el que los registros se escriben en un archivo access.log independiente:
<VirtualHost *:80>
ServerName skills.com (dominio de ejemplo)
ServerAdmin webmaster@skills.com
DocumentRoot /var/www/skills.com
LogLevel info ssl:warn
ErrorLog /var/www/skills.com/logs/error.log
CustomLog /var/www/skills.com/logs/access.log example
</VirtualHost>
Debian, Ubuntu y Linux Mint
En los sistemas Debian, la configuración predeterminada de cifrado de sitios web con SSL/TLS se encuentra en /etc/apache2/sites-available/default-ssl.conf, y la configuración de hosts virtuales para sitios web sin cifrar se encuentra en /etc/apache2/sites-available/000-default.conf.
Tabla de directivas predeterminadas
Parámetro/Directiva | Archivo de configuración | Valor/Ruta |
AccessLog | /etc/apache2/sites-available/000-default.conf | CustomLog ${APACHE_LOG_DIR}/access/log combined |
SUFFIX* | /etc/apache2/envvars | La lógica condicional se puede consultar en el archivo de configuración |
LogLevel | /etc/apache2/apache2.conf | warn |
APACHE_LOG_DIR** | /etc/apache2/envvars | Export =/var/log/apache2$SUFFIX |
ErrorLog | /etc/apache2/apache2.conf | ErrorLog${APACHE_LOG_DIR}/error.log |
LogFormat | /etc/apache2/apache2.conf | “%v:%p %h %l %u %t”%r”%>s %0 “%{Referer}i» «%{User-Agent}i»» |
CustomLog | /etc/apache2/conf-available/other-vhosts-access-log.conf | ${APACHE_LOG_DIR}/other_vhosts_access.log vhost_combined |
Red Hat, Fedora y CentOS
En Red Hat y sistemas similares, los archivos de configuración de los servidores virtuales se encuentran en /etc/httpd/conf.d y el archivo de configuración principal está en /etc/httpd/conf/httpd.conf.
Tabla de directivas predeterminadas
Directiva | Archivo de configuración | Valor/Ruta |
LogLevel | /etc/httpd/conf/httpd.conf | warn |
AccessLog | /etc/httpd/conf/httpd.conf | /var/log/httpd/access_log |
Formato de registro (log_config_module) | /etc/httpd/conf/httpd.conf | “%h %l %u %t»%r»%>s %b «%{Referer}i» „%{User-Agent}i»» |
ErrorLog | /etc/httpd/conf/httpd.conf | /var/log/httpd/error_log |
CustomLog (log_config_module) | /etc/httpd/conf/httpd.conf | «logs/access_log» combinado |
LogFormat (módulo logio cargado) | /etc/httpd/conf/httpd.conf | «%h %l %u %t»%r»%>s %b «%{Referer}i» „%{User-Agent}i” %l%0»combinedio |
OpenSUSE
En el sistema OpenSUSE, la configuración para sitios web con SSL/TLS se encuentra en /etc/apache2/default-vhost-ssl.conf y para los no cifrados, en /etc/apache2/default-vhost.conf.
Tabla de directivas predeterminadas
Directiva | Archivo de configuración | Valor/Ruta |
LogLevel | /etc/apache2/sysconfig.d/global.conf | warn |
AccessLog | /etc/apache2/sysconfig.d/global.conf | /var/log/apache2/access_log |
Formato de registro (log_config_module) | /etc/apache2/mod_log_config.conf | “%h %l %u %t”%r”%>s %b“ |
ErrorLog | /etc/apache2/httpd.conf | /var/log/apache2/error_log |
LogFormat (logio_module) | /etc/apache2/mod_log_config.conf | «%h %l %u %t»%r»%>s %b«%{Referer}i» „%{User-Agent}i» %l%0»combinedio |
CustomLog (log_config_module) | /etc/apache2/sysconfig.d/global.conf | /var/log/apache2/access_log combined |
LogFormat (mod_ssl) | /etc/apache2/mod_log_config.conf | «%t%h%{SSL_PROTOCOL}x %{SSL_CIPHER}x»%r» %b» ssl_commonLogformat»%t %h %{SSL_PROTOCOL}x %{SSL_CIPHER}x «%r»%b «%{Referer}i» «%{User-Agent}i»»ssl_combined |
Módulos de Apache para el registro de logs
Existen varios módulos que pueden ayudar significativamente a modificar el comportamiento del registro de logs. Basándonos en los conocimientos adquiridos sobre la configuración del servidor Apache, compartiremos información importante sobre los módulos de Apache útiles para el registro de eventos.
mod_log_config
Este es probablemente el módulo más básico y uno de los que ya hemos comentado en este artículo.
mod_log_debug
Es posible que este módulo no esté incluido en todas las distribuciones de Apache, pero resulta útil para registrar mensajes de depuración. Por ejemplo, este módulo se puede utilizar para registrar mensajes de determinados clientes, registrar eventos en una ruta URL concreta y mucho más.
Por ejemplo:
<Location /path/to/some/directory>
LogMessage "/path/to/directory ha sido solicitado por"
${REMOTE_ADDR}
</Location>
mod_log_forensic
Con este módulo, es posible registrar información antes y después del proceso de la solicitud. Tras habilitar este módulo, se pueden utilizar las palabras clave para determinar qué archivo de registro es forense. También es posible utilizar %{forensic-id} en diversas cadenas para añadir datos forenses a los registros habituales.
A continuación se muestra un ejemplo:
<VirtualHost *:80>
ServerName skills.com (es un dominio de ejemplo)
ServerAdmin webmaster@skills.com
DocumentRoot /var/www/skills.com
LogLevel info ssl:warn
ErrorLog /var/www/skills.com/logs/error.log
CustomLog /var/www/skills.com/logs/access.log example
CustomLog /var/www/skills.com/logs/forensic.log forensic
</VirtualHost>
mod_logio
Este módulo permite registrar el número de bytes recibidos o enviados por cada solicitud. Este módulo también tiene en cuenta los cambios de tamaño debidos al cifrado TLS/SSL y suele incluirse según las características predeterminadas.
mod_filter
Este módulo ayuda a filtrar determinadas solicitudes según el filtro especificado. El filtro sensible al contexto que proporciona este módulo incluye la configuración de vhost, la configuración de Apache, los archivos .htaccess y mucho más.
Este módulo suele estar activado por defecto, pero es posible que tengas que habilitarlo.
mod_unique_id
Este módulo es necesario para la creación de un identificador único para cada solicitud. El identificador se escribe en el registro de acceso. Se pasa al gestor de la aplicación mediante la variable de entorno UNIQUE_ID. De este modo, resulta mucho más fácil para los desarrolladores rastrear las solicitudes.