Administrar correctamente un servicio implica disponer de un registro de su funcionamiento, errores incluidos. Apache dispone de un gran número de características para conseguir un seguimiento y control óptimos del servidor.
Apache nos aporta un registro de errores y un registro de accesos, vamos a ver a continuación cómo configurarlos.
En lo que respecta al registro de errores tenemos las siguientes directivas:
Directiva ErrorLog
Sintaxis: ErrorLog ruta-a-fichero
Contexto: server config, virtual host
Establece de forma absoluta o relativa el nombre del archivo en el que el servidor registrará cualquier error que encuentre, además de otros diagnósticos.
En los argumentos de tipo ruta-a-fichero, siempre que se especifique una ruta relativa, será relativa a ServerRoot.
# cat /etc/apache2/apache2.conf
...
ErrorLog ${APACHE_LOG_DIR}/error.log
...
El valor de APACHE_LOG_DIR lo tenemos en /etc/apache2/varenvs y está establecido a /var/log/apache2.
Directiva LogLevel
Sintaxis: LogLevel [module:]level [module:level] ...
Contexto: server config, virtual host, directory
Valor por defecto: warn
Con esta directiva especificamos el nivel de importancia de los mensajes registrados en el fichero dado por ErrorLog. Estos niveles, ordenados de mayor a menor importancia son: emerg, alert, crit, error, warn, notice, info, debug, trace1, ..., trace8. Una vez que establezcamos el nivel, se registrarán todos los mensajes que se generen del nivel especificado o de cualquier otro nivel de mayor importancia a este. Por ejemplo, como el valor por defecto es warn, si se produce un error del nivel alert, también se registrará. Se recomienda especificar el nivel crit o uno inferior.
Como se muestra en la sintaxis, si se quiere, el nivel de errores puede concretarse para módulos de Apache.
# cat /etc/apache2/apache2.conf
...
LogLevel warn
...
Los mensajes que se guardan en el fichero indicado por ErrorLog tienen el siguiente aspecto:
[Tue Nov 28 09:06:10.479902 2023] [mpm_event:notice] [pid 972:tid 140248980371328] AH00493: SIGUSR1 received. Doing graceful restart
El primer campo indica la fecha y hora del mensaje, el segundo su nivel de importancia, el tercero quién lo generó, aquí podemos encontrar una IP o el pid de un proceso, y por último, se muestra el texto del mensaje, en él puede llegar a aparecer la ruta absoluta de un fichero que estuviera involucrado en la generación del mensaje.
Por otro lado, como se mencionó, Apache también lleva un registro de los accesos, es decir, un registro de las peticiones que procesa, por lo que se puede ver la fecha y hora de la petición, la dirección IP del cliente que hizo la petición, qué recurso ha solicitado, etc.
Las directivas que están involucradas en el registro de accesos son las siguientes:
Directiva LogFormat
Sintaxis: LogFormat cadena_de_formato nickname
Contexto: server config, virtual host
Valor por defecto: "%h %l %u %t \"%r\" %>s %b"
Esta directiva sirve para definir el formato de las líneas del o de los ficheros de registro de accesos. A dicho formato se le asocia un nickname (apodo), pues podemos crear distintos formatos para distintos ficheros. Podemos encontrar información sobre cómo personalizar la cadena de formato aquí.
# cat /etc/apache2/apache2.conf
...
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
...
Directiva CustomLog
Sintaxis: CustomLog ruta-a-fichero {cadena_de_formato|nickname}
Contexto: server config, virtual host
CustomLog establece el nombre y el formato del archivo de registro de accesos. El formato se puede dar directamente o a través de un nickname creado con LogFormat.
Como vemos en el contexto, esta directiva puede usarse a nivel de virtual host, por lo que podemos tener ficheros de registro de accesos diferentes para cada sitio web, con formatos diferentes también, si se quiere. Se puede ver esto en 000-default.conf:
# cat /etc/apache2/sites-enabled/000-default.conf
<VirtualHost *:80>
...
CustomLog ${APACHE_LOG_DIR}/access.log combined
...
</VirtualHost>
El valor de APACHE_LOG_DIR lo tenemos en /etc/apache2/varenvs y está establecido a /var/log/apache2.