Comment analyser et interpréter le journal du serveur Web Apache
Les serveurs Web Apache peuvent générer un grand nombre de journaux. Ces journaux contiennent des informations telles que les requêtes HTTP qu’Apache a traitées et auxquelles il a répondu, ainsi que d’autres activités spécifiques à Apache. L’analyse des journaux est une partie importante de l’administration d’Apache et de la garantie qu’il fonctionne comme prévu.
Dans ce guide, nous allons passer en revue les différentes options de journalisation présentes dans Apache et comment interpréter ces données de journal. Vous apprendrez à analyser les journaux produits par Apache et à configurer les paramètres de journalisation pour vous fournir les données les plus pertinentes sur ce que fait Apache.
Dans ce tutoriel, vous allez apprendre :
- Configurer et comprendre la journalisation du serveur web Apache
- Que sont les niveaux de journalisation Apache ?
- Comment interpréter le formatage des journaux Apache et sa signification
- Quels sont les fichiers de configuration de journal Apache les plus courants ?
- Comment étendre la configuration de la journalisation pour inclure des données d’investigation
Comment analyser et interpréter le journal du serveur Web Apache
Configuration logicielle requise et conventions utilisées
| Catégorie | Exigences, conventions ou version du logiciel utilisé |
|---|---|
| Système | Ubuntu, Debian, CentOS, RHEL, Fedora |
| Logiciel | Serveur Web Apache |
| Autre | Accès privilégié à votre système Linux en tant que root ou via la commande sudo. |
Fichiers journaux Apache et leur emplacement
Apache produit deux fichiers journaux différents :
- access.log stocke des informations sur toutes les demandes de connexion entrantes à Apache. Chaque fois qu’un utilisateur visite votre site Web, il y sera enregistré. Chaque page demandée par un utilisateur sera également enregistrée en tant qu’entrée distincte.
- error.log stocke des informations sur les erreurs rencontrées par Apache tout au long de son fonctionnement. Idéalement, ce fichier doit rester relativement vide.
Configuration par défaut du journal Apache sur le serveur Linux Ubuntu
L’emplacement des fichiers journaux peut dépendre de la version d’Apache que vous exécutez et de la distribution Linux sur laquelle elle se trouve. Apache peut également être configuré pour stocker ces fichiers dans un autre emplacement que celui par défaut.
Mais, par défaut, vous devriez pouvoir trouver les journaux d’accès et d’erreurs dans l’un des répertoires suivants :
- /var/log/apache/
- /var/log/apache2/
- /etc/httpd/logs/
Formatage du journal Apache
Apache vous permet de personnaliser les informations enregistrées et la présentation de chaque entrée de journal, ce que nous aborderons plus loin dans ce tutoriel.
Le format habituel suivi par Apache pour présenter les entrées de journal est le suivant :
"%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\""Voici comment interpréter cette mise en forme :
- %h – L’adresse IP du client.
- %l – Il s’agit de l’identd sur le client, qui est utilisé pour les identifier. Ce champ est généralement vide et présenté sous la forme d’un trait d’union.
- %u – L’ID utilisateur du client, si l’authentification HTTP a été utilisée. Si ce n’est pas le cas, l’entrée du journal n’affichera rien pour ce champ.
- %t : horodatage de l’entrée de journal.
- \ %r\ – La ligne de demande du client. Cela montrera quelle méthode HTTP a été utilisée (telle que GET ou POST), quel fichier a été demandé et quel protocole HTTP a été utilisé.
- %>s : code d’état renvoyé au client. Les codes 4xx (tels que 404, page introuvable) indiquent des erreurs client et les codes 5xx (tels que 500, erreur de serveur interne) indiquent des erreurs de serveur. D’autres nombres doivent indiquer un succès (comme 200, OK) ou quelque chose d’autre comme une redirection (comme 301, déplacé définitivement).
- %O : taille du fichier (y compris les en-têtes), en octets, qui a été demandé.
- \" %{Referer}i\ » – Le lien référent, le cas échéant. Cela vous indique comment l’utilisateur a navigué vers votre page (à partir d’un lien interne ou externe).
- \" %{User-Agent}i\ » – Contient des informations sur le navigateur Web et le système d’exploitation du client qui se connecte.
Une entrée typique dans le journal d’accès ressemblera à ceci :
10.10.220.3 - - [17/Dec/2019:23:05:32 -0500] "GET /products/index.php HTTP/1.1" 200 5015 "http://example.com/products/index.php" "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/79.0.3945.79 Safari/537.36"Le journal des erreurs est un peu plus simple et facile à interpréter. Voici à quoi peut ressembler une entrée typique :
[Mon Dec 16 06:29:16.613789 2019] [php7:error] [pid 2095] [client 10.10.244.61:24145] script '/var/www/html/settings.php' not found or unable to stat
C’est un bon moyen de voir combien d’erreurs 404 vos visiteurs rencontrent, et cela peut vous indiquer des liens morts sur votre site. Plus important encore, il peut vous alerter en cas de ressources manquantes ou de problèmes de serveur potentiels. L’exemple ci-dessus montre une page *.php qui a été demandée mais qui est manquante.
Configuration du journal Apache
La journalisation d’Apache est hautement personnalisable et peut être ajustée à partir de quelques fichiers de configuration. Sur Ubuntu et Debian, le fichier de configuration principal pour la journalisation d’Apache se trouve ici :
- /etc/apache2/apache2.conf
Étant donné que vous pouvez exécuter plusieurs sites Web (appelés hôtes virtuels) à partir d’une seule instance Apache, vous pouvez également configurer chacun d’entre eux pour avoir des journaux d’accès et d’erreurs distincts. Pour définir le nom de ces fichiers journaux distincts et l’emplacement de leur enregistrement, configurez ce fichier :
- /etc/apache2/sites-available/000-default.conf
Sur CentOS, RHEL et Fedora, les deux fichiers de configuration se trouvent, respectivement, aux emplacements suivants :
- /etc/httpd/conf/httpd.conf
- /etc/httpd/conf.d/ (place les configurations supplémentaires de VirtualHost dans ce répertoire)
Consignes de journal
Il y a pas mal de directives différentes qui peuvent être configurées à l’intérieur de ces fichiers, mais ce sont les principales dont vous devriez vous préoccuper si vous souhaitez personnaliser la journalisation d’Apache :
- CustomLog – Définit l’emplacement de stockage du fichier journal d’accès.
- ErrorLog – Définit l’emplacement de stockage du fichier journal des erreurs.
- LogLevel – Définit la gravité d’un événement pour être enregistré (voir ci-dessous pour plus d’informations).
- LogFormat – Définissez comment chaque entrée du journal d’accès doit être formatée (voir ci-dessous pour plus d’informations).
Par défaut, LogLevel est défini sur warn, ce qui signifie qu’il écrira dans le journal des erreurs les conditions d’avertissement ou les événements plus graves. Si votre journal d’erreurs est rempli de nombreux messages d’avertissement inoffensifs, vous pouvez le faire passer à l’erreur qui ne signalera que les erreurs ou les problèmes plus graves.
D’autres options incluent (par ordre de gravité) le coup critique, l’alerte et l’urgence. Apache recommande d’utiliser un niveau d’au moins crit. À des fins de débogage, vous pouvez définir temporairement LogLevel pour déboguer, mais sachez que vous pouvez vous retrouver avec une quantité trop importante d’entrées dans votre journal d’erreurs.
LogFormat vous permet d’ajuster l’apparence des entrées à l’intérieur du journal d’accès. Si vous trouvez que l’entrée d’exemple dans access.log (de la section sur le formatage du journal Apache ci-dessus) est un peu déroutante, vous n’êtes pas seul. Apache vous permet de personnaliser le format des entrées de journal, afin que vous puissiez les configurer de manière plus logique. Vous pouvez également utiliser cette personnalisation pour exclure certaines informations que vous pourriez trouver non pertinentes.
Modules de journalisation Apache
La configuration de journalisation que nous avons exposée dans ce guide jusqu’à présent concerne le module Apache mod_log_config. Pour étendre encore plus la fonctionnalité de journalisation, vous pouvez charger d’autres modules de journalisation dans Apache. Cela peut fournir d’autres fonctionnalités qui ne sont pas disponibles avec les paramètres par défaut.
mod_log_forensic commence à se connecter avant une demande (lorsque les en-têtes sont reçus pour la première fois) et se connecte à nouveau après la demande. Cela signifie que deux entrées de journal sont créées pour chaque demande, ce qui permet à un administrateur de mesurer les temps de réponse avec plus de précision.
Définissez l’emplacement de votre journal d’analyse à l’aide de la directive CustomLog. Par exemple:
CustomLog ${APACHE_LOG_DIR}/forensic.log forensicmod_logio consigne le nombre d’octets envoyés et reçus pour chaque demande. Il fournit des informations très précises car il compte également les données présentes dans l’en-tête et le corps de chaque requête, ainsi que les données supplémentaires requises pour les connexions chiffrées SSL/TLS.
Ajoutez les espaces réservés %I et O % à la directive LogFormat afin d’utiliser les données supplémentaires fournies par ce module.
D’autres modules existent ; Ce ne sont là que deux des plus utiles.
Conclusion
Dans cet article, nous avons vu comment analyser et interpréter les journaux d’accès et d’erreurs d’Apache. Nous avons également appris à personnaliser la journalisation dans les fichiers de configuration d’Apache pour rendre les données de journal plus pertinentes. Armé de ces connaissances, vous serez en mesure d’isoler les problèmes plus rapidement et de les résoudre avec Apache.
N’oubliez pas que la fonctionnalité de journalisation d’Apache peut être étendue par d’autres modules de journalisation, bien que cela ne soit nécessaire que dans les cas limites qui nécessitent un débogage avancé.

