Le Journal Apache enregistre les événements qui ont été gérés par le serveur web Apache, y compris les demandes provenant d’autres ordinateurs, les réponses envoyées par Apache et les actions internes au serveur Apache. Cette section du guide explique les bases de la journalisation Apache, y compris les types de journaux générés par Apache, où ils sont stockés et comment les interpréter. Nous couvrirons également des sujets avancés tels que la définition de formats de journaux personnalisés et la configuration de modules pour obtenir des données plus riches.,
Types de Logs Apache
Apache génère deux types de journaux: les journaux d’accès et les journaux d’erreurs.
Journal d’Accès
Le journal d’accès contient des informations sur les requêtes arrivant sur le serveur web. Ces informations peuvent inclure les pages consultées par les utilisateurs, l’état de réussite des demandes et le temps de réponse du serveur. Voici un exemple d’entrée typique du journal d’accès:
journal des erreurs
le journal des erreurs contient des informations sur les erreurs rencontrées par le serveur web lors du traitement des demandes, telles que les fichiers manquants., Il comprend également des informations de diagnostic sur le serveur lui-même. Voici un exemple de journal des erreurs:
File does not exist: /var/www/favicon.ico
Emplacements des journaux
par défaut, Apache stocke les journaux d’accès et d’erreur dans des fichiers séparés sur le serveur. L’emplacement exact dépend de votre système d’exploitation., Vous pouvez trouver l’emplacement de votre système d’exploitation en cliquant sur les liens suivants:
Debian/Ubuntu/Linux Mint
Redhat/Fedora/CentOS Configuration
OpenSUSE
configuration des journaux Apache
Apache dispose d’un framework de journalisation hautement configurable qui vous permet d’ajuster le comportement de journalisation globalement Il existe plusieurs directives que vous pouvez utiliser pour modifier le comportement de connexion. Certaines des directives les plus courantes sont les directives log level et log format, que nous expliquerons plus en détail.,
Directive Log Level
la directiveLogLevel
détermine le niveau de gravité minimum des événements enregistrés vers une destination spécifique. Le niveau de gravité représente l’importance de l’événement et peut aller de « Emerg” à « Trace8”, « Emerg” représentant les événements pouvant entraîner une instabilité et « Trace8” représentant les messages au niveau de la trace. Par exemple, LogLevel crit
autorisera les journaux avec la gravité « Crit”, « Alert” et « Emerg”, mais ignorera tous les autres niveaux.,
format du journal
la directiveLogFormat
contrôle la mise en page et le formatage des événements du journal. Apache utilise le format de journal commun (CLF) par défaut, mais vous pouvez spécifier votre propre chaîne de format pour modifier les champs inclus dans chaque journal.
Vous pouvez également utiliser la balise CustomLog
directive pour modifier l’emplacement du fichier journal. Sous Linux, Apache écrit généralement des journaux dans les répertoires /var/log/apache2 ou /var/log/httpd en fonction de votre système d’exploitation et des remplacements D’Hôtes Virtuels., Vous pouvez également définir une chaîne LogFormat après le nom de fichier, qui appliquera uniquement la chaîne de format à ce fichier.
par exemple, la configuration suivante écrit des journaux dans logs/access_log
en utilisant le format standard « commun”. Les journaux/ sous-répertoire par rapport au répertoire spécifié dans la directive ServerRoot:
LogFormat "%h %l %u %t \"%r\" %>s %b" commonCustomLog "logs/access_log" common
CustomLog logs/access_log » commune
Vous pouvez trouver une liste complète des champs dans le log d’Apache documentation., Nous vous recommandons d’utiliser au moins les cinq champs suivants, car ils sont importants pour surveiller l’état du serveur et pour résoudre les problèmes:
-
%>s
– le code D’état HTTP de la requête. Cela montre l’état final de la demande après toute redirection interne; pour l’état d’origine, utilisez %s. -
%U
– le chemin D’URL demandé, à l’exclusion de tous les paramètres D’URL supplémentaires tels qu’une chaîne de requête. -
%a
– L’adresse IP du client qui fait la demande., Ceci est utile pour identifier le trafic d’une source particulière. -
%T
– Combien de temps il a fallu pour traiter la demande dans les secondes. C’est utile pour mesurer la vitesse de votre site. Utilisez %D pour effectuer la même mesure en microsecondes. -
%{UNIQUE_ID}e
– également connu sous le nom d’ID de requête, il enregistre un identifiant unique à chaque requête. Ceci est utile pour tracer une requête D’Apache vers votre serveur d’applications web.,
attribution de surnoms
LogFormat
les chaînes peuvent recevoir des surnoms, que vous pouvez ensuite utiliser avec une directiveCustomLog
pour écrire des journaux en utilisant le format spécifié. Cela vous permet d’utiliser le même format de journal pour plusieurs fichiers journaux sans avoir à redéfinir le format à chaque fois. Ceci est particulièrement utile lorsque vous utilisez différents fichiers journaux pour plusieurs hôtes virtuels.
par exemple, créons un format d’exemple et nommons-le « vhost_combined., »Nous allons ensuite créer une directiveCustomLog
qui écrit des journaux dans un fichier en utilisant le format vhost_combined.
LogFormat "%v:%p %h %l %u %t "%r" %>s %O "%{Referer}i" "%{User-Agent}i"" vhost_combinedCustomLog /var/log/apache2/vhost.log vhost_combined
formatage en JSON
Le Stockage de vos journaux en texte brut les rend faciles à analyser au cas où vous auriez besoin de lire vos fichiers journaux. Cependant, cela rend difficile l’utilisation d’outils tels que les solutions de gestion des journaux pour lire vos journaux, car ces outils doivent savoir comment vos journaux sont formatés. La plupart des solutions de gestion des journaux prennent en charge le format de journal Apache par défaut, mais sinon, vous devriez envisager d’utiliser un format structuré comme JSON.,
JSON (abréviation de JavaScript Object Notation) est un format flexible pour stocker des données structurées. JSON stocke une collection de paires nom/valeur imbriquées, vous permettant de stocker presque tous les types et structures de données. JSON s’auto-documente également efficacement, car le nom de la clé décrit les données qu’elle contient. JSON prend en charge de nombreux types de données de base, y compris les chaînes, les nombres, les booléens, les tableaux et les valeurs nulles.,
Voici un exemple d’unLogFormat
qui stocke les journaux au format JSON:
LogFormat "{ \"time\":\"%t\", \"remoteIP\":\"%a\", \"host\":\"%V\", \"request\":\"%U\", \"query\":\"%q\", \"method\":\"%m\", \"status\":\"%>s\", \"userAgent\":\"%{User-agent}i\", \"referer\":\"%{Referer}i\" }"
L’hôte virtuel par défaut remplace
Les hôtes virtuels (vhosts) sont utilisés pour exécuter plus d’un site web sur un seul serveur Apache. Vous pouvez définir une configuration de journalisation distincte pour chaque serveur virtuel, qui est prioritaire par rapport à la configuration de journalisation globale. Cela vous permet de connecter chaque site web à un répertoire distinct, par exemple. En laissant ces paramètres par défaut à la configuration de journalisation globale.
Par exemple, la configuration suivante est pour un serveur virtuel, par exemple.,COM. Les journaux sont écrits pour séparer les fichiersaccess.log
Eterror.log
dans le répertoire/var/www/example.com/logs
:
Les sections suivantes montrent les emplacements des fichiers de configuration par défaut et les directives utilisées dans les différentes distributions Linux.
Debian/Ubuntu/Linux Mint
sur les distributions basées sur Debian, la configuration vhost par défaut pour les sites non cryptés (port 80) se trouve à/etc/apache2/sites-available/000-default.conf
. La configuration vhost par défaut pour les sites chiffrés avec SSL / TLS (port 443) est à /etc/apache2/sites-available/default-ssl.conf
.,
tableau des Directives par défaut
* variable D’environnement conditionnée. Prend en charge plusieurs instances de serveur Apache.
** variable d’Environnement. Utilisé pour définir dynamiquement le chemin du journal initial.
Red Hat/Fedora/CentOS
sur les distributions basées sur Red Hat, le fichier de configuration principal se trouve à/etc/httpd/conf/httpd.conf
. Vous pouvez placer des fichiers de configuration vhost supplémentaires dans le répertoire /etc/httpd/conf.d
, qui est automatiquement lu par le serveur au démarrage.
table des Directives par défaut
* conditionnée sur loaded log_config_module.,
** conditionnée sur logio_module chargé.
OpenSUSE
dans OpenSUSE, la configuration vhost par défaut pour les sites non chiffrés (port 80) est située à/etc/apache2/default-vhost.conf
, tandis que la configuration par défaut pour les sites chiffrés avec SSL/TLS est située à/etc/apache2/default-vhost-ssl.conf
.
table des Directives par défaut
* conditionnée sur loaded log_config_module.
** conditionnée sur logio_module chargé.
*** Conditionné sur chargé mod_ssl.,
Modules liés aux journaux
le serveur web Apache propose un certain nombre de modules qui modifient le fonctionnement D’Apache ou étendent ses capacités. Les modules suivants ajoutent ou modifient le comportement de journalisation de manière utile.
mod_log_config
c’est le module de journalisation de base utilisé par Apache, et celui que nous avons couvert dans cette section du guide.
mod_log_debug
Ce module fournit des options supplémentaires pour la journalisation des messages de débogage., Par exemple, vous pouvez consigner des événements dans un chemin D’URL spécifique, consigner les demandes après leur traitement, consigner les messages d’un client spécifique s’ils entraînent des délais d’attente, etc. Notez que ce module est expérimental et peut ne pas être inclus dans votre distribution Apache.
Par exemple, la configuration suivante enregistre l’adresse IP d’un client lorsqu’il demande à un chemin spécifique:
mod_log_forensic
Ce module permet l’enregistrement avant et après une demande est traitée. Chaque entrée se voit attribuer un identifiant unique, qui peut être utilisé pour tracer les événements entre le journal médico-légal et le journal normal., Cependant, l’enregistreur médico-légal ne prend pas en charge les formats personnalisés. Ce module remplace également le module mod_unique_id.
Une fois le module activé, vous pouvez utiliser le mot-cléforensic
pour spécifier quel fichier journal est le journal médico-légal. Vous pouvez également utiliser le modèle%{forensic-id}
dans d’autres chaînesLogFormat
pour ajouter des données médico-légales aux journaux normaux. Ici ,nous utilisons /var/www/example.com/logs/forensic.log
:
chaque ligne du journal médico-légal commence par un caractère « +” ou » -”., « + »indique la ligne de journal des entrées pour cette demande particulière, et « -” indique les entrées suivantes pour la même demande.
par exemple, le journal des entrées suivant a été généré en appelanthttp://localhost en utilisant le format de journal par défaut:
l’entrée du journal de fin de la même requête apparaît comme suit:
-3264:55958cb4:0
Si une entrée de fin n’apparaît pas dans le journal,
mod_logio
Ce module ajoute la possibilité de consigner le nombre d’octets envoyés et reçus par demande., Cela inclut les octets reçus, envoyés et transférés (combinaison de reçus et envoyés). Le module tient également compte avec précision des changements de taille dus au cryptage SSL et TLS. Ce module nécessite mod_log_config et est généralement inclus dans Apache par défaut.
ce module ajoute la directiveLogIOTrackTTFB On|Off
, qui permet de suivre L’heure du premier octet (TTFB). TTFB est le temps écoulé entre la réception d’une demande et l’envoi initial de la réponse au client., Vous pouvez ensuite utiliser %^FB
pour inclure la mesure TTFB dans une chaîne LogFormat
.
mod_filter
ce module fournit des filtres contextuels à la chaîne de sortie en enregistrant un nombre illimité de fournisseurs de filtres. mod_filter n’est pas spécifique à la journalisation, mais permet d’extraire des requêtes spécifiques en fonction du fournisseur de filtres. Les conteneurs de contexte incluent: main apache config, VHost config, within directory tags, et .fichiers htaccess.,
L’utilisation de ce module permet de filtrer les requêtes contenant des éléments tels que certains critères d’injection et de quelle adresse IP il provient.
ce module est fourni par défaut dans de nombreuses distributions de paquets, mais peut nécessiter une activation. Aux fins de la journalisation, la directive FilterTrace publie des informations dans le journal des erreurs.,li> FilterDeclare
– déclare un filtre intelligent
FilterProtocol
– fait en sorte que le mod_filter gère correctement les en – têtes de réponseFilterProvider
– enregistre les fournisseurs de filtresFilterTrace
– permet de déboguer des informations de diagnostic dans un journal des erreurs avant le traitement du fournisseurl’exemple suivant applique le filtrage dans un conteneur de contexte VHost conditionnellement sur filter et include modules:
mod_unique_id:
ce module construit une variable d’environnement et un identifiant unique pour chaque requête., Il est souvent inclus dans les distributions de paquets mais peut nécessiter une activation. Cet identifiant unique est écrit dans le journal d’accès.
ce module a été remplacé par mod_log_forensic à des fins médico-légales, mais est toujours pris en charge pour d’autres.
contrairement à l’identifiant médico-légal, l’identifiant unique est transmis au gestionnaire d’application via la variable d’environnement UNIQUE_ID. Cela permet aux développeurs d’applications de tracer une demande via le serveur web vers le serveur d’applications. Il peut être utile pour déboguer une requête.,
Apache désactive les processus enfants pour gérer les requêtes, et une instance enfant traite plusieurs requêtes à la fois. Par conséquent, il est parfois souhaitable d’utiliser un identifiant unique pour identifier une seule requête sur plusieurs instances de serveur et processus enfants.
Une fois activé, le module fournit un identifiant par défaut au gestionnaire d’application.,
Par exemple:
UNIQUE_ID: Vaf3en8AAQEAAAtoQlAAAAAA
l’identifiant est construit à partir d’une adresse IP 32 bits, D’un ID de processus 32 bits, d’un horodatage 32 bits couplé à un compteur 16 bits pour une résolution plus serrée qu’un index de thread 32 bits d’une seule seconde. Le composant horodatage est UTC pour éviter les problèmes liés aux ajustements de l’heure d’été. Le gestionnaire d’application doit traiter l’identifiant comme un jeton opaque uniquement et non disséqué en constituants.
voir. L’analyser. L’inspecter. Résolvez-le
voyez ce qui compte.
commencer L’essai gratuit