<-
Apache > Serveur HTTP > Documentation > Version 2.4

Fichiers journaux

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

Pour v´┐Żritablement g´┐Żrer un serveur web, il est n´┐Żcessaire de disposer d'un retour d'informations ´┐Ż propos de l'activit´┐Ż et des performances du serveur, ainsi que de tout probl´┐Żme qui pourrait survenir. Le serveur HTTP Apache propose des fonctionnalit´┐Żs de journalisation souples et tr´┐Żs compl´┐Żtes. Ce document d´┐Żcrit comment configurer ces fonctionnalit´┐Żs de journalisation et interpr´┐Żter le contenu des journaux.

top

Vue d'ensemble

Le serveur HTTP Apache fournit toute une vari´┐Żt´┐Ż de m´┐Żcanismes diff´┐Żrents pour la journalisation de tout ce qui peut se passer au sein de votre serveur, depuis la requ´┐Żte initiale, en passant par le processus de mise en correspondance des URLs, et jusqu'´┐Ż la fermeture de la connexion, y compris toute erreur pouvant survenir au cours du traitement. De plus, certains modules tiers fournissent des fonctionnalit´┐Żs de journalisation ou ins´┐Żrent des entr´┐Żes dans les fichiers journaux existants, et les applications comme les programmes CGI, les scripts PHP ou autres gestionnaires peuvent envoyer des messages vers le journal des erreurs du serveur.

Ce document d´┐Żcrit le fonctionnement des modules de journalisation fournis en standard avec le serveur httpd.

top

Avertissement ´┐Ż propos de la s´┐Żcurit´┐Ż

Tout utilisateur qui a les droits en ´┐Żcriture sur le r´┐Żpertoire dans lequel Apache httpd ´┐Żcrit ses journaux pourra quasi certainement avoir acc´┐Żs ´┐Ż l'uid sous lequel le serveur est d´┐Żmarr´┐Ż, en l'occurrence habituellement root. N'accordez PAS aux utilisateurs l'acc´┐Żs en ´┐Żcriture au r´┐Żpertoire dans lequel les journaux sont stock´┐Żs sans savoir exactement quelles en seraient les cons´┐Żquences ; voir le document conseils sur la s´┐Żcurit´┐Ż pour plus de d´┐Żtails.

En outre, les journaux peuvent contenir des informations fournies directement par un client, sans caract´┐Żres d'´┐Żchappement. Des clients mal intentionn´┐Żs peuvent donc ins´┐Żrer des caract´┐Żres de contr´┐Żle dans les journaux, et il convient par cons´┐Żquent d'´┐Żtre tr´┐Żs prudent lors de la manipulation des journaux bruts.

top

Journal des erreurs

Le journal des erreurs du serveur, dont le nom et la localisation sont d´┐Żfinis par la directive ErrorLog, est le journal le plus important. C'est dans celui-ci que le d´┐Żmon Apache httpd va envoyer les informations de diagnostic et enregistrer toutes les erreurs qui surviennent lors du traitement des requ´┐Żtes. Lorsqu'un probl´┐Żme survient au d´┐Żmarrage du serveur ou pendant son fonctionnement, la premi´┐Żre chose ´┐Ż faire est de regarder dans ce journal, car il vous renseignera souvent sur le probl´┐Żme rencontr´┐Ż et la mani´┐Żre d'y rem´┐Żdier.

Le journal des erreurs est habituellement enregistr´┐Ż dans un fichier (en g´┐Żn´┐Żral error_log sur les syst´┐Żmes de type Unix et error.log sur Windows et OS/2). Sur les syst´┐Żmes de type Unix, le serveur peut aussi enregistrer ses erreurs dans syslog ou les rediriger vers un programme par l'interm´┐Żdiaire d'un tube de communication (pipe).

Le format par d´┐Żfaut du journal des erreurs est descriptif et de forme relativement libre. Certaines informations apparaissent cependant dans la plupart des entr´┐Żes du journal. Voici un message typique ´┐Ż titre d'exemple :

[Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1] client denied by server configuration: /export/home/live/ap/htdocs/test

Le premier champ de l'entr´┐Że du journal est la date et l'heure du message. Le second champ indique la s´┐Żv´┐Żrit´┐Ż de l'erreur rapport´┐Że. La directive LogLevel permet de restreindre le type des erreurs qui doivent ´┐Żtre enregistr´┐Żes dans le journal des erreurs en d´┐Żfinissant leur niveau de s´┐Żv´┐Żrit´┐Ż. Le troisi´┐Żme champ contient l'adresse IP du client qui a g´┐Żn´┐Żr´┐Ż l'erreur. Vient ensuite le message proprement dit, qui indique dans ce cas que le serveur a ´┐Żt´┐Ż configur´┐Ż pour interdire l'acc´┐Żs au client. Le serveur indique le chemin syst´┐Żme du document requis (et non son chemin web).

Une grande vari´┐Żt´┐Ż de messages diff´┐Żrents peuvent appara´┐Żtre dans le journal des erreurs. La plupart d'entre eux sont similaires ´┐Ż l'exemple ci-dessus. Le journal des erreurs peut aussi contenir des informations de d´┐Żbogage en provenance de scripts CGI. Toute information qu'un script CGI ´┐Żcrit sur la sortie d'erreurs standard stderr sera recopi´┐Że telle quelle dans le journal des erreurs.

La directive ErrorLogFormat vous permet de personnaliser le format du journal des erreurs, et de d´┐Żfinir les informations ´┐Ż journaliser. Si mod_unique_id est pr´┐Żsent, vous pouvez utiliser le drapeau %L ´┐Ż la fois dans le journal des erreurs et dans le journal des acc´┐Żs, ce qui aura pour effet de g´┐Żn´┐Żrer un identifiant d'entr´┐Że qui vous permettra de corr´┐Żler les entr´┐Żes du journal des erreurs avec celles du journal des acc´┐Żs.

Pendant la phase de test, il est souvent utile de visualiser en continu le journal des erreurs afin de d´┐Żtecter tout probl´┐Żme ´┐Żventuel. Sur les syst´┐Żmes de type Unix, ceci s'effectue ´┐Ż l'aide de la commande :

tail -f error_log

top

Journalisation par module

La directive LogLevel permet de sp´┐Żcifier un niveau de s´┐Żv´┐Żrit´┐Ż de journalisation pour chaque module. Vous pouvez ainsi r´┐Żsoudre un probl´┐Żme propre ´┐Ż un module particulier en augmentant son volume de journalisation sans augmenter ce volume pour les autres modules. Ceci est particuli´┐Żrement utile lorsque vous voulez obtenir des d´┐Żtails sur le fonctionnement de modules comme mod_proxy ou mod_rewrite.

Pour ce faire, vous devez sp´┐Żcifier le nom du module dans votre directive LogLevel :

LogLevel info rewrite:trace5

Dans cet exemple, le niveau de journalisation g´┐Żn´┐Żral est d´┐Żfini ´┐Ż info, et ´┐Ż trace5 pour mod_rewrite.

Cette directive remplace les directives de journalisation par module des versions pr´┐Żc´┐Żdentes du serveur, comme RewriteLog.
top

Journal des acc´┐Żs

Le journal des acc´┐Żs au serveur enregistre toutes les requ´┐Żtes que traite ce dernier. La localisation et le contenu du journal des acc´┐Żs sont d´┐Żfinis par la directive CustomLog. La directive LogFormat permet de simplifier la s´┐Żlection du contenu du journal. Cette section d´┐Żcrit comment configurer le serveur pour l'enregistrement des informations dans le journal des acc´┐Żs.

Bien ´┐Żvidemment, le stockage d'informations dans le journal des acc´┐Żs n'est que le point de d´┐Żpart de la gestion de la journalisation. L'´┐Żtape suivante consiste ´┐Ż analyser ces informations de fa´┐Żon ´┐Ż pouvoir en extraire des statistiques utiles. L'analyse de journaux en g´┐Żn´┐Żral est en dehors du sujet de ce document et ne fait pas vraiment partie int´┐Żgrante du travail du serveur web lui-m´┐Żme. Pour plus d'informations ´┐Ż propos de ce sujet et des applications d´┐Żdi´┐Żes ´┐Ż l'analyse de journaux, vous pouvez vous r´┐Żf´┐Żrer ´┐Ż Open Directory ou Yahoo.

Diff´┐Żrentes versions du d´┐Żmon Apache httpd utilisaient d'autres modules et directives pour contr´┐Żler la journalisation des acc´┐Żs, ´┐Ż l'instar de mod_log_referer, mod_log_agent, et de la directive TransferLog. La directive CustomLog rassemble d´┐Żsormais les fonctionnalit´┐Żs de toutes les anciennes directives.

Le format du journal des acc´┐Żs est hautement configurable. Il est d´┐Żfini ´┐Ż l'aide d'une cha´┐Żne de format qui ressemble sensiblement ´┐Ż la cha´┐Żne de format de style langage C de printf(1). Vous trouverez quelques exemples dans les sections suivantes. Pour une liste exhaustive de ce que peut contenir une cha´┐Żne de format, vous pouvez vous r´┐Żf´┐Żrer au chapitre cha´┐Żnes de format de la documentation du module mod_log_config.

Format habituel du journal

Voici une configuration typique pour le journal des acc´┐Żs :

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common

Ici est d´┐Żfinie l'identit´┐Ż common qui est ensuite associ´┐Że ´┐Ż une cha´┐Żne de format de journalisation particuli´┐Żre. La cha´┐Żne de format est constitu´┐Że de directives d´┐Żbutant par le caract´┐Żre %, chacune d'entre elles indiquant au serveur d'enregistrer un ´┐Żl´┐Żment particulier d'information. Des caract´┐Żres litt´┐Żraux peuvent aussi ´┐Żtre ins´┐Żr´┐Żs dans la cha´┐Żne de format ; il seront copi´┐Żs tels quels dans le flux de sortie destin´┐Ż ´┐Ż la journalisation. Les guillemets (") doivent ´┐Żtre ´┐Żchapp´┐Żes en les faisant pr´┐Żc´┐Żder d'un anti-slash (\) afin qu'elles ne soient pas interpr´┐Żt´┐Żes comme la fin de la cha´┐Żne de format. La cha´┐Żne de format peut aussi contenir les caract´┐Żres de contr´┐Żle sp´┐Żciaux "\n" et "\t" pour ins´┐Żrer respectivement un passage ´┐Ż la ligne et une tabulation.

La directive CustomLog d´┐Żfinit un nouveau fichier journal en l'associant ´┐Ż l'identit´┐Ż pr´┐Żc´┐Żdemment d´┐Żfinie. Le chemin du nom de fichier associ´┐Ż au journal des acc´┐Żs est relatif au chemin d´┐Żfini par la directive ServerRoot, sauf s'il d´┐Żbute par un slash.

La configuration ci-dessus va enregistrer les entr´┐Żes de journalisation selon un format connu sous le nom de Common Log Format (CLF) pour "Format de journalisation standard". Ce format standard peut ´┐Żtre produit par de nombreux serveurs web diff´┐Żrents et lu par de nombreux programmes d'analyse de journaux. Les entr´┐Żes de fichier journal g´┐Żn´┐Żr´┐Żes selon le format CLF ressemblent ´┐Ż ceci :

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326

Chaque partie de cette entr´┐Że de journal est d´┐Żcrite dans ce qui suit.

127.0.0.1 (%h)
Il s'agit de l'adresse IP du client (l'h´┐Żte distant) qui a envoy´┐Ż la requ´┐Żte au serveur. Si la directive HostnameLookups est positionn´┐Że ´┐Ż On, le serveur va essayer de d´┐Żterminer le nom de l'h´┐Żte et de l'enregistrer ´┐Ż la place de l'adresse IP. Cette configuration n'est cependant pas recommand´┐Że car elle peut ralentir le serveur de mani´┐Żre significative. Il est par cons´┐Żquent pr´┐Żf´┐Żrable d'utiliser un processeur d'analyse de journaux a posteriori tel que logresolve pour d´┐Żterminer les noms d'h´┐Żte. L'adresse IP indiqu´┐Że ici n'est pas n´┐Żcessairement l'adresse IP de la machine devant laquelle se trouve l'utilisateur. Si un serveur mandataire s'intercale entre le serveur et l'utilisateur, l'adresse indiqu´┐Że sera celle du mandataire et non celle de la machine ´┐Ż l'origine de la requ´┐Żte.
- (%l)
Le "trait d'union" indique que la portion d'information correspondante n'est pas disponible. Dans le cas pr´┐Żsent, l'information non disponible est l'identit´┐Ż (RFC 1413) du client telle que d´┐Żtermin´┐Że par identd sur la machine cliente. Cette information est tr´┐Żs peu fiable et ne devrait jamais ´┐Żtre utilis´┐Że, sauf dans le cas de r´┐Żseaux internes ´┐Żtroitement contr´┐Żl´┐Żs. Le d´┐Żmon httpd ne cherchera d'ailleurs ´┐Ż obtenir cette information que si la directive IdentityCheck est positionn´┐Że ´┐Ż On.
frank (%u)
Il s'agit de l'identifiant utilisateur de la personne qui a demand´┐Ż le document, issu d'une authentification HTTP. Ce m´┐Żme identifiant est en g´┐Żn´┐Żral fourni aux scripts CGI par l'interm´┐Żdiaire de la valeur de la variable d'environnement REMOTE_USER. Si le statut de la requ´┐Żte (voir plus loin) est 401, cette identifiant n'est pas fiable car l'utilisateur n'est pas encore authentifi´┐Ż. Si le document n'est pas prot´┐Żg´┐Ż par mot de passe, cette partie d'information sera repr´┐Żsent´┐Że par "-", comme la partie pr´┐Żc´┐Żdente.
[10/Oct/2000:13:55:36 -0700] (%t)
L'heure ´┐Ż laquelle la requ´┐Żte a ´┐Żt´┐Ż re´┐Żue. Le format est le suivant :

[jour/mois/ann´┐Że:heure:minutes:secondes zone]
jour = 2*chiffre
mois = 3*lettre
ann´┐Że = 4*chiffre
heure = 2*chiffre
minutes = 2*chiffre
secondes = 2*chiffre
zone = (`+' | `-') 4*chiffre

Il est possible de modifier le format d'affichage de l'heure en sp´┐Żcifiant %{format}t dans la cha´┐Żne de format du journal, o´┐Ż format est une cha´┐Żne de format de la forme de celle de la fonction strftime(3) de la biblioth´┐Żque C standard, ou choisie parmi les formats sp´┐Żciaux support´┐Żs. Pour plus de d´┐Żtails, reportez-vous aux. cha´┐Żnes de format de mod_log_config.
"GET /apache_pb.gif HTTP/1.0" (\"%r\")
La ligne de la requ´┐Żte du client est plac´┐Że entre guillemets. Elle contient de nombreuses informations utiles. Tout d'abord, la m´┐Żthode utilis´┐Że par le client est GET. Ensuite, le client a demand´┐Ż la ressource /apache_pb.gif, et enfin, le client a utilis´┐Ż le protocole HTTP/1.0. Il est aussi possible d'enregistrer s´┐Żpar´┐Żment une ou plusieurs parties de la requ´┐Żte. Par exemple, la cha´┐Żne de format "%m %U %q %H" va enregistrer la m´┐Żthode, le chemin, la cha´┐Żne de la requ´┐Żte et le protocole, ce qui donnera le m´┐Żme r´┐Żsultat que "%r".
200 (%>s)
C'est le code de statut que le serveur retourne au client. Cette information est tr´┐Żs importante car elle indique si la requ´┐Żte a fait l'objet d'une r´┐Żponse positive (codes commen´┐Żant par 2), une redirection (codes commen´┐Żant par 3), une erreur due au client (codes commen´┐Żant par 4), ou une erreur due au serveur (codes commen´┐Żant par 5). Vous trouverez la liste compl´┐Żte des codes de statut possibles dans la specification HTTP (RFC2616 section 10).
2326 (%b)
La derni´┐Żre partie indique la taille de l'objet retourn´┐Ż au client, en-t´┐Żtes non compris. Si aucun contenu n'a ´┐Żt´┐Ż retourn´┐Ż au client, cette partie contiendra "-". Pour indiquer l'absence de contenu par "0", utilisez %B au lieu de %b.

Combined Log Format (Format de journalisation combin´┐Ż)

Une autre cha´┐Żne de format couramment utilis´┐Że est le "Combined Log Format" (Format de journalisation combin´┐Ż). Il s'utilise comme suit :

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
CustomLog log/access_log combined

Ce format est identique au Common Log Format, avec deux champs suppl´┐Żmentaires. Chacun de ces deux champs utilise la directive commen´┐Żant par le caract´┐Żre "%" %{header}i, o´┐Ż header peut ´┐Żtre n'importe quel en-t´┐Żte de requ´┐Żte HTTP. Avec ce format, le journal des acc´┐Żs se pr´┐Żsentera comme suit :

127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET /apache_pb.gif HTTP/1.0" 200 2326 "http://www.example.com/start.html" "Mozilla/4.08 [en] (Win98; I ;Nav)"

Les champs suppl´┐Żmentaires sont :

"http://www.example.com/start.html" (\"%{Referer}i\")
L'en-t´┐Żte "Referer" (sic) de la requ´┐Żte HTTP. Il indique le site depuis lequel le client pr´┐Żtend avoir lanc´┐Ż sa requ´┐Żte. (Ce doit ´┐Żtre la page qui contient un lien vers /apache_pb.gif ou inclut ce dernier fichier).
"Mozilla/4.08 [en] (Win98; I ;Nav)" (\"%{User-agent}i\")
L'en-t´┐Żte User-Agent de la requ´┐Żte HTTP. C'est une information d'identification que le navigateur du client envoie ´┐Ż propos de lui-m´┐Żme.

Journaux d'acc´┐Żs multiples

Plusieurs journaux d'acc´┐Żs peuvent ´┐Żtre cr´┐Ż´┐Żs en sp´┐Żcifiant tout simplement plusieurs directives CustomLog dans le fichier de configuration. Par exemple, les directives suivantes vont cr´┐Żer trois journaux d'acc´┐Żs. Le premier contiendra les informations de base CLF, le second les informations du Referer, et le troisi´┐Żme les informations sur le navigateur. Les deux derni´┐Żres directives CustomLog montrent comment simuler les effets des directives ReferLog et AgentLog.

LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog logs/access_log common
CustomLog logs/referer_log "%{Referer}i -> %U"
CustomLog logs/agent_log "%{User-agent}i"

Cet exemple montre aussi qu'il n'est pas obligatoire d'associer une cha´┐Żne de format ´┐Ż un alias au moyen de la directive LogFormat. Elle peut ´┐Żtre d´┐Żfinie directement dans la ligne de la directive CustomLog.

Journalisation conditionnelle

Il est parfois souhaitable d'exclure certaines entr´┐Żes des journaux d'acc´┐Żs en fonction des caract´┐Żristiques de la requ´┐Żte du client. On peut ais´┐Żment accomplir ceci ´┐Ż l'aide des variables d'environnement. Tout d'abord, une variable d'environnement doit ´┐Żtre d´┐Żfinie pour indiquer que la requ´┐Żte remplit certaines conditions. Pour ceci, on utilise en g´┐Żn´┐Żral la directive SetEnvIf, puis la clause env= de la directive CustomLog pour inclure ou exclure les requ´┐Żtes pour lesquelles la variable d'environnement est d´┐Żfinie. Quelques exemples :

# Marque les requ´┐Żtes en provenance de l'interface loop-back
SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
# Marque les requ´┐Żtes pour le fichier robots.txt
SetEnvIf Request_URI "^/robots\.txt$" dontlog
# Journalise toutes les autres requ´┐Żtes
CustomLog logs/access_log common env=!dontlog

Autre exemple, imaginons l'enregistrement des requ´┐Żtes en provenance d'utilisateurs de langue anglaise dans un journal, et celles des autres utilisateurs dans un autre journal.

        SetEnvIf Accept-Language "en" english
CustomLog logs/english_log common env=english
CustomLog logs/non_english_log common env=!english

Dans le contexte d'une mise en cache, il peut ´┐Żtre int´┐Żressant de conna´┐Żtre l'efficacit´┐Ż du cache. Pour y parvenir, on pourrait utiliser cette m´┐Żthode simple :

SetEnv CACHE_MISS 1
LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
CustomLog logs/access_log common-cache

mod_cache va s'ex´┐Żcuter avant mod_env, et si son action est couronn´┐Że de succ´┐Żs, il d´┐Żlivrera le contenu sans faire appel ´┐Ż ce dernier. Si l'URL se trouve dans le cache, la valeur journalis´┐Że sera alors -, tandis que dans le cas contraire elle sera 1.

En plus de la syntaxe env=, la directive LogFormat supporte les valeurs de journalisation conditionnelles bas´┐Żes sur le code de la r´┐Żponse HTTP :

LogFormat "%400,501{User-agent}i" browserlog
LogFormat "%!200,304,302{Referer}i" refererlog

Dans le premier exemple, le User-agent sera enregistr´┐Ż si le code d'´┐Żtat HTTP est 400 ou 501. Dans le cas contraire, c'est un caract´┐Żre "-" qui sera enregistr´┐Ż ´┐Ż la place. Dans le second exemple, le Referer sera enregistr´┐Ż si le code d'´┐Żtat HTTP n'est pas 200, 204, ou 302 (remarquez le caract´┐Żre "!" avant les codes d'´┐Żtat).

Bien que nous venions de montrer que la journalisation conditionnelle est souple et tr´┐Żs puissante, cette m´┐Żthode de contr´┐Żle du contenu des journaux n'est pas la seule. Les fichiers journaux sont plus utiles quand ils contiennent un enregistrement complet de l'activit´┐Ż du serveur, et il est souvent plus ais´┐Ż de simplement traiter ´┐Ż posteriori les fichiers journaux pour supprimer les requ´┐Żtes que vous ne voulez pas y voir appara´┐Żtre.

top

Rotation des journaux

M´┐Żme dans le cas d'un serveur mod´┐Żr´┐Żment sollicit´┐Ż, la quantit´┐Ż d'informations stock´┐Żes dans les fichiers journaux est tr´┐Żs importante. Le fichier journal des acc´┐Żs grossit en g´┐Żn´┐Żral d'1 Mo ou plus toutes les 10000 requ´┐Żtes. Il est par cons´┐Żquent n´┐Żcessaire d'effectuer p´┐Żriodiquement la rotation des journaux en d´┐Żpla´┐Żant ou supprimant les fichiers correspondants. On ne peut pas le faire pendant que le serveur est en cours d'ex´┐Żcution, car Apache httpd va continuer ´┐Ż ´┐Żcrire dans l'ancien fichier journal aussi longtemps qu'il le maintiendra ouvert. C'est pourquoi le serveur doit ´┐Żtre red´┐Żmarr´┐Ż apr´┐Żs le d´┐Żplacement ou la suppression des fichiers journaux de fa´┐Żon ´┐Ż ce qu'il en ouvre de nouveaux.

Avec un red´┐Żmarrage graceful, on peut faire en sorte que le serveur ouvre de nouveaux fichiers journaux sans perdre de connexions existantes ou en cours avec les clients. Cependant, pour que ceci soit possible, le serveur doit continuer ´┐Ż ´┐Żcrire dans les anciens fichiers journaux pendant qu'il termine le traitement des requ´┐Żtes en cours. Il est donc n´┐Żcessaire d'attendre un certain temps apr´┐Żs le r´┐Żd´┐Żmarrage avant d'effectuer tout traitement sur les fichiers journaux. Voici un sc´┐Żnario typique dans lequel on effectue une simple rotation des journaux en compressant les anciens fichiers correspondants afin de gagner de l'espace disque :

mv access_log access_log.old
mv error_log error_log.old
apache2ctl graceful
sleep 600
gzip access_log.old error_log.old

La section suivante pr´┐Żsente une autre m´┐Żthode de rotation des journaux qui consiste ´┐Ż utiliser les journaux redirig´┐Żs.

top

Journaux redirig´┐Żs

Nous avons vu que le d´┐Żmon httpd ´┐Żcrivait les informations de journalisation des erreurs et des acc´┐Żs dans un fichier journal ; il peut aussi rediriger ces informations vers un autre processus par l'interm´┐Żdiaire d'un tube de communication (pipe). Cette fonctionnalit´┐Ż am´┐Żliore consid´┐Żrablement la souplesse de la journalisation, sans ajouter de code au serveur principal. Pour rediriger les informations de journalisation vers un tube de communication, remplacez simplement le nom de fichier journal par le caract´┐Żre pipe "|", suivi du nom de l'ex´┐Żcutable qui va recueillir les entr´┐Żes de journal sur son entr´┐Że standard. Le serveur va lancer le processus de redirection des journaux au moment du d´┐Żmarrage du serveur, et le relancera s'il cesse de fonctionner pendant l'ex´┐Żcution du serveur. (Nous d´┐Żnommons cette technique "journalisation redirig´┐Że fiable" gr´┐Żce ´┐Ż cette derni´┐Żre fonctionnalit´┐Ż.)

Les processus de journalisation redirig´┐Że sont lanc´┐Żs par le processus httpd parent, et h´┐Żritent de l'UID de ce dernier. Cela signifie que les programmes de journalisation dirig´┐Że s'ex´┐Żcutent g´┐Żn´┐Żralement en tant que root. Il est donc tr´┐Żs important que ces programmes soient simples et s´┐Żcuris´┐Żs.

Un des grands avantages de la journalisation redirig´┐Że est la possibilit´┐Ż d'effectuer la rotation des journaux sans avoir ´┐Ż red´┐Żmarrer le serveur. Pour accomplir cette t´┐Żche, le serveur HTTP Apache fournit un programme simple appel´┐Ż rotatelogs. Par exemple, pour une rotation des journaux toutes les 24 heures, ajoutez ces lignes :

CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common

Notez que l'ensemble de la commande qui sera appel´┐Że par le tube de communication a ´┐Żt´┐Ż plac´┐Że entre guillemets. Bien que cet exemple concerne le journal des acc´┐Żs, la m´┐Żme technique peut ´┐Żtre utilis´┐Że pour le journal des erreurs.

Il existe un autre programme de rotation des journaux similaire mais beaucoup plus souple : il s'agit de "cronolog", non fourni par Apache, mais disponible ici.

Comme la journalisation conditionnelle, la journalisation redirig´┐Że est un outil tr´┐Żs puissant, mais si elle existe, il est pr´┐Żf´┐Żrable d'utiliser une solution plus simple comme le traitement ´┐Ż posteriori hors ligne.

Par d´┐Żfaut, le processus de redirection du journal est lanc´┐Ż sans invoquer un shell. Pour invoquer un shell, utilisez "|$" au lieu de "|" (en g´┐Żn´┐Żral avec /bin/sh -c) :

# Invocation de "rotatelogs" en utilisant un shell
CustomLog "|$/usr/local/apache/bin/rotatelogs   /var/log/access_log 86400" common

Il s'agissait du comportement par d´┐Żfaut sous Apache 2.2. Selon les sp´┐Żcificit´┐Żs du shell, ceci peut g´┐Żn´┐Żrer un processus shell suppl´┐Żmentaire pour toute la dur´┐Że du programme de redirection du journal, et induire des probl´┐Żmes de gestion de signaux au cours du red´┐Żmarrage. La notation "||" est aussi support´┐Że pour des raisons de compatibilit´┐Ż avec Apache 2.2 et est ´┐Żquivalente ´┐Ż "|".

top

H´┐Żtes virtuels

Lorsqu'un serveur poss´┐Żde plusieurs h´┐Żtes virtuels, il existe de nombreuses solutions pour g´┐Żrer les fichiers journaux. Par exemple, on peut utiliser les journaux comme s'il s'agissait d'un serveur avec un seul h´┐Żte. Il suffit pour cela de placer les directives de journalisation en dehors des sections <VirtualHost> au niveau du serveur principal, ce qui a pour effet de journaliser toutes les requ´┐Żtes dans le m´┐Żme journal des acc´┐Żs et des erreurs. Cette technique est cependant inappropri´┐Że pour recueillir des statistiques sur chaque h´┐Żte virtuel individuellement.

Si des directives CustomLog ou ErrorLog sont plac´┐Żes dans une section <VirtualHost>, toutes les requ´┐Żtes ou erreurs pour cet h´┐Żte virtuel ne seront enregistr´┐Żes que dans le fichier sp´┐Żcifi´┐Ż. Tout h´┐Żte virtuel qui ne poss´┐Żde pas de directives de journalisation verra ses requ´┐Żtes enregistr´┐Żes dans le journal du serveur principal. Cette technique est appropri´┐Że pour un petit nombre d'h´┐Żtes virtuels, mais si ce nombre est important, elle peut devenir compliqu´┐Że ´┐Ż g´┐Żrer. En outre, des probl´┐Żmes de nombre de descripteurs de fichiers insuffisant peuvent rapidement appara´┐Żtre.

Il existe un tr´┐Żs bon compromis pour le journal des acc´┐Żs. En int´┐Żgrant les informations ´┐Ż propos de l'h´┐Żte virtuel ´┐Ż la cha´┐Żne de format du journal, il est possible de journaliser tous les h´┐Żtes dans le m´┐Żme journal, puis de s´┐Żparer ult´┐Żrieurement le journal en plusieurs journaux individuels. Consid´┐Żrons par exemple les directives suivantes :

LogFormat "%v %l %u %t \"%r\" %>s %b" comonvhost
CustomLog logs/access_log comonvhost

Le champ %v sert ´┐Ż enregistrer le nom de l'h´┐Żte virtuel qui traite la requ´┐Żte. Un programme tel que split-logfile peut ensuite ´┐Żtre utilis´┐Ż pour g´┐Żn´┐Żrer "´┐Ż froid" autant de journaux que d'h´┐Żtes virtuels.

top

Autres fichiers journaux

Enregistrement du nombre r´┐Żel d'octets envoy´┐Żs et re´┐Żus

Le module mod_logio fournit deux champs LogFormat suppl´┐Żmentaires (%I et %O) qui permettent d'enregistrer le nombre r´┐Żel d'octets re´┐Żus et envoy´┐Żs sur le r´┐Żseau.

Journalisation de style investigation judiciaire (forensic logging)

Le module mod_log_forensic permet la journalisation ´┐Ż des fins d'investigation judiciaire des requ´┐Żtes des clients. La journalisation est effectu´┐Że avant et apr´┐Żs le traitement de la requ´┐Żte, qui fait donc l'objet de deux entr´┐Żes dans le journal. Le g´┐Żn´┐Żrateur de journaux d'investigation est tr´┐Żs strict et ne permet aucune personnalisation. C'est un inestimable outil de d´┐Żbogage et de s´┐Żcurit´┐Ż.

Fichier PID

Au d´┐Żmarrage, le d´┐Żmon httpd Apache enregistre l'identifiant du processus httpd parent dans le fichier logs/httpd.pid. Le nom de ce fichier peut ´┐Żtre modifi´┐Ż ´┐Ż l'aide de la directive PidFile. Cet identifiant permet ´┐Ż l'administrateur de red´┐Żmarrer et arr´┐Żter le d´┐Żmon en envoyant des signaux au processus parent ; sous Windows, vous devez utiliser l'option de ligne de commande -k. Pour plus de d´┐Żtails, consulter la page Arr´┐Żt et red´┐Żmarrage.

Journal des scripts

Afin de faciliter le d´┐Żbogage, la directive ScriptLog vous permet d'enregistrer les entr´┐Żes et sorties des scripts CGI. Elle ne doit ´┐Żtre utilis´┐Że que pendant la phase de test, et en aucun cas sur un serveur en production. Vous trouverez plus d'informations dans la documentation du module mod_cgi.

Langues Disponibles:  en  |  fr  |  ja  |  ko  |  tr 

top

Commentaires

Notice:
This is not a Q&A section. Comments placed here should be pointed towards suggestions on improving the documentation or server, and may be removed again by our moderators if they are either implemented or considered invalid/off-topic. Questions on how to manage the Apache HTTP Server should be directed at either our IRC channel, #httpd, on Freenode, or sent to our mailing lists.