Introducción
Apache es un servidor HTTP multiplataforma de código abierto. Tiene muchas características poderosas que se pueden ampliar con una amplia variedad de módulos. Al administrar servidores web Apache, una de las tareas más frecuentes que realizará es verificar los archivos de registro.
Saber cómo configurar y leer registros es muy útil a la hora de solucionar problemas del servidor o la aplicación, ya que proporcionan información de depuración detallada.
Apache escribe sus registros de eventos en dos tipos de registros: registro de acceso y registro de errores. Los registros de acceso incluyen información sobre las solicitudes de los clientes e información del registro de errores sobre problemas del servidor y de la aplicación.
Este artículo describe cómo configurar y leer los registros de acceso y error de Apache.
Si desea habilitar el registro de errores de Apache y los archivos de registro de acceso en un servidor remoto, continúe leyendo; de lo contrario, omita el primer párrafo "Conectando al servidor" y lea el siguiente.
Conexión al servidor
Para acceder al servidor, necesita conocer la dirección IP. También necesitará su nombre de usuario y contraseña para la autenticación. Para conectarse al servidor como root, escriba el siguiente comando:
ssh root@IP_DEL_SERVER
A continuación, deberá ingresar la contraseña del usuario root.
Si no está utilizando el usuario root, puede iniciar sesión con otro nombre de usuario utilizando el mismo comando, luego cambie root a su nombre de usuario:
ssh nome_utente@IP_DEL_SERVER
Luego se le pedirá que ingrese su contraseña de usuario.
El puerto estándar para conectarse a través de ssh es 22, si su servidor usa un puerto diferente, deberá especificarlo usando el parámetro -p, luego escriba el siguiente comando:
ssh nome_utente@IP_DEL_SERVER -p PORTA
Configurar registros de acceso
El servidor web Apache genera un nuevo evento en el registro de acceso para todas las solicitudes procesadas. Cada registro de evento contiene una marca de tiempo e incluye información diversa sobre el cliente y el recurso solicitado. Los registros de acceso muestran dónde están los visitantes, qué página visitan, cuánto tiempo pasan en la página y más.
La CustomLog
define la ubicación del archivo de registro y el formato de los mensajes registrados.
La sintaxis más básica de la CustomLog
es la siguiente:
CustomLog log_file format [condition];
El Log_file
puede ser relativo a ServerRoot
o una ruta completa al archivo de registro. Los mensajes de registro también se pueden redirigir a otro programa mediante el símbolo de barra vertical |
.
El segundo argumento, format
, especifica el formato de los mensajes de registro. Puede ser una definición de formato explícita o un apodo definido por la directiva LogFormat
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
CustomLog logs/access.log combined
CustomLog logs/access.log "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""
Para evitar repetir el mismo código varias veces, prefiere definir la LogFormat
y usarla como apodo en la directiva CustomLog
Para obtener una lista completa de todas las cadenas y modificadores de formato, consulte la documentación del módulo mod_log_config.
El tercer argumento [condition]
es opcional y le permite escribir mensajes de registro solo cuando se cumple una condición específica. Normalmente, esto se hace mediante variables de entorno. La condición se puede cancelar con el símbolo !
.
Por ejemplo, si desea excluir las solicitudes de archivos CSS para que no se escriban en el archivo de registro, utilice lo siguiente:
SetEnvIf Request_URI \.css$ css-file
CustomLog logs/access.log custom env=!css-file
Para cambiar el formato de registro, puede definir una nueva LogFormat
o anular el formato predeterminado. Por lo general, es mejor definir un formato nuevo.
Si bien el registro de acceso proporciona información muy útil, ocupa espacio en el disco y puede afectar el rendimiento del servidor. Si su servidor tiene pocos recursos y tiene un sitio web ocupado, es posible que desee deshabilitar el registro de acceso.
Para hacer esto, simplemente comente o elimine la CustomLog
de la configuración del servidor principal y las secciones del servidor virtual.
Si desea deshabilitar el registro de acceso solo para un host virtual, establezca el primer argumento de la directiva CustomLog
/dev/null
:
CustomLog /dev/null combined
Configurar el registro de errores
Apache escribe los mensajes de la aplicación y los errores generales del servidor en el archivo de registro de errores. Si se producen errores en la aplicación web, el registro de errores es el primer lugar para comenzar a solucionar problemas.
La ErrorLog
define la ubicación del nombre del registro de errores. Toma la siguiente forma:
ErrorLog log_file
Si la ruta a log_file
no es absoluta, se establece en relación con ServerRoot
. Los mensajes de error también se pueden enviar a otro programa mediante el símbolo de barra vertical |
.
El LogLevel
establece el nivel de registro. Los niveles enumerados por gravedad (de menor a mayor) se enumeran a continuación:
trace1
-trace8
- Mensajes de seguimiento.debug
: depurar mensajes.info
: mensajes de información.notice
- Avisos.warn
- Advertencias.error
: errores al procesar una solicitud.crit
- Problemas críticos. Requiere una acción rápida.alert
: alertas. Se deben tomar medidas de inmediato.emerg
- Situación de emergencia. El sistema está en un estado inutilizable.
Cada nivel de registro incluye los niveles más altos. Por ejemplo, si configura el nivel de registro de warn
, Apache también escribe mensajes de error
, crit
, alert
y emerg
Cuando no se especifica el parámetro LogLevel
warn
. Se recomienda establecer al menos el nivel crit
La ErrorLogFormat
especifica el formato del archivo de registro de errores de Apache. En la mayoría de las distribuciones de Linux, el servidor Apache usa el formato predeterminado, que es suficiente para la mayoría de los casos.
Hosts virtuales y registro global
El comportamiento de registro y la ubicación del archivo se pueden configurar globalmente o por host virtual.
Luego, las CustomLog
o ErrorLog
se establecen en el contexto del servidor principal, el servidor escribe todos los mensajes de registro en los mismos archivos de registro de acceso y error. De lo contrario, si las directivas se colocan en un <VirtualHost>
, solo los mensajes de registro para ese host virtual se escriben en el archivo especificado.
La directiva de registro establecida en el <VirtualHost>
anula la establecida en el contexto del servidor.
Los hosts virtuales sin CustomLog
o directivas ErrorLog
tendrán sus mensajes de registro escritos en los registros del servidor global.
Para una mejor legibilidad, se recomienda que configure archivos de registro de errores y accesos separados para cada host virtual. Aquí hay un ejemplo:
<VirtualHost *:80>
ServerName esempio.it
ServerAlias www.esempio.it
ServerAdmin [email protected]
DocumentRoot /var/www/esempio.it/public
LogLevel warn
ErrorLog /var/www/esempio.it/logs/error.log
CustomLog /var/www/esempio.it/logs/access.log combined
</VirtualHost>
Siempre que cambie el archivo de configuración, debe reiniciar el servicio Apache para que los cambios surtan efecto.
Ubicación de los registros de archivos
De forma predeterminada, en distribuciones basadas en Debian como Ubuntu, los registros de acceso y error se encuentran en el /var/log/apache2
. En CentOS, los archivos de registro se colocan en el /var/log/httpd
.
Leer y comprender los registros de archivos de Apache
Los archivos de registro se pueden abrir y analizar mediante comandos estándar como cat
, less
, grep
, cut
, awk
, etc.
Aquí hay un registro de muestra del archivo de registro de acceso que usa el combine
192.168.22.22 - - [26/Jan/2020:20:19:02 +0000] "GET /HTTP/1.1" 200 6169 "-" "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.88 Safari/537.36"
Analicemos lo que significa cada campo del registro:
%h
-192.168.22.22
: el nombre de host o la dirección IP del cliente que realiza la solicitud.%l
--
- Nombre de registro remoto. Cuando no se establece el nombre de usuario, este campo muestra-
.%u
--
- Si la solicitud está autenticada, se muestra el nombre de usuario remoto.%t
-[26/Jan/2020:20:19:02 +0000]
- Hora del servidor local.\"%r\"
-"GET /HTTP/1.1"
- Primera línea de la solicitud. Tipo de solicitud, ruta y protocolo.%>s
-200
- El código de respuesta del servidor final. Si>
y la solicitud se ha redirigido internamente, mostrará el estado de la solicitud original.%O
-396
: el tamaño de la respuesta del servidor en bytes.\"%{Referer}i\"
-"-"
- La URL de la referencia.\"%{User-Agent}i\"
-Mozilla/5.0...
- El agente de usuario del cliente (navegador web).
Utilice el tail
para ver el archivo de registro en tiempo real:
tail -f access.log
Conclusión
Los registros de archivos brindan información útil sobre problemas del servidor y cómo los visitantes interactúan con su sitio web.
Apache tiene un sistema de registro muy configurable que le permite personalizar los registros de acceso y errores para satisfacer sus necesidades.