]> granicus.if.org Git - apache/blob - docs/manual/logs.xml.fr
xforms
[apache] / docs / manual / logs.xml.fr
1 <?xml version="1.0" encoding="ISO-8859-1" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.fr.xsl"?>
4 <!-- French translation : Lucien GENTIS -->
5 <!-- Reviewed by : Vincent Deffontaines -->
6 <!-- English Revision : 1330883 -->
7
8 <!--
9  Licensed to the Apache Software Foundation (ASF) under one or more
10  contributor license agreements.  See the NOTICE file distributed with
11  this work for additional information regarding copyright ownership.
12  The ASF licenses this file to You under the Apache License, Version 2.0
13  (the "License"); you may not use this file except in compliance with
14  the License.  You may obtain a copy of the License at
15
16      http://www.apache.org/licenses/LICENSE-2.0
17
18  Unless required by applicable law or agreed to in writing, software
19  distributed under the License is distributed on an "AS IS" BASIS,
20  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
21  See the License for the specific language governing permissions and
22  limitations under the License.
23 -->
24
25 <manualpage metafile="logs.xml.meta">
26
27   <title>Fichiers journaux</title>
28
29   <summary>
30     <p>Pour v&eacute;ritablement g&eacute;rer un serveur web,
31     il est n&eacute;cessaire de disposer d'un
32     retour d'informations &agrave; propos de l'activit&eacute; et des performances du
33     serveur, ainsi que de tout probl&egrave;me qui pourrait survenir. Le serveur HTTP
34     Apache propose des fonctionnalit&eacute;s de journalisation souples et tr&egrave;s
35     compl&egrave;tes. Ce document d&eacute;crit comment configurer ces fonctionnalit&eacute;s de
36     journalisation et interpr&eacute;ter le contenu des journaux.</p>
37   </summary>
38
39   <section id="overview">
40     <title>Vue d'ensemble</title>
41
42   <related>
43       <modulelist>
44         <module>mod_log_config</module>
45         <module>mod_log_forensic</module>
46         <module>mod_logio</module>
47         <module>mod_cgi</module>
48       </modulelist>
49   </related>
50
51   <p>
52   Le serveur HTTP Apache fournit toute une vari&eacute;t&eacute; de m&eacute;canismes
53   diff&eacute;rents pour la journalisation de tout ce qui peut se passer au
54   sein de votre serveur, depuis la requ&ecirc;te initiale, en passant par le
55   processus de mise en correspondance des URLs, et jusqu'&agrave; la fermeture
56   de la connexion, y compris toute erreur pouvant survenir au cours du
57   traitement. De plus, certains modules tiers fournissent des
58   fonctionnalit&eacute;s de journalisation ou ins&egrave;rent des entr&eacute;es dans les
59   fichiers journaux existants, et les applications comme les programmes
60   CGI, les scripts PHP ou autres gestionnaires peuvent envoyer des
61   messages vers le journal des erreurs du serveur.
62   </p>
63
64   <p>
65   Ce document d&eacute;crit le fonctionnement des modules de journalisation
66   fournis en standard avec le serveur httpd.
67   </p>
68
69   </section>
70
71   <section id="security">
72     <title>Avertissement &agrave; propos de la s&eacute;curit&eacute;</title>
73
74     <p>Tout utilisateur qui a les droits en &eacute;criture sur le r&eacute;pertoire dans
75     lequel Apache httpd &eacute;crit ses journaux pourra quasi
76     certainement avoir acc&egrave;s &agrave; l'uid sous lequel le serveur est d&eacute;marr&eacute;, en
77     l'occurrence habituellement root. N'accordez <em>PAS</em> aux utilisateurs
78     l'acc&egrave;s en &eacute;criture au r&eacute;pertoire dans lequel les journaux sont stock&eacute;s
79     sans savoir exactement quelles en seraient les cons&eacute;quences ; voir le
80     document <a href="misc/security_tips.html">conseils sur la s&eacute;curit&eacute;</a>
81     pour plus de d&eacute;tails.</p>
82
83     <p>En outre, les journaux peuvent contenir des informations fournies
84     directement par un client, sans caract&egrave;res d'&eacute;chappement. Des clients mal
85     intentionn&eacute;s peuvent donc ins&eacute;rer des caract&egrave;res de contr&ocirc;le dans les
86     journaux, et il convient par cons&eacute;quent d'&ecirc;tre tr&egrave;s prudent lors de la
87     manipulation des journaux bruts.</p>
88   </section>
89
90   <section id="errorlog">
91     <title>Journal des erreurs</title>
92
93     <related>
94       <modulelist>
95         <module>core</module>
96       </modulelist>
97       <directivelist>
98         <directive module="core">ErrorLog</directive>
99         <directive module="core">LogLevel</directive>
100       </directivelist>
101     </related>
102
103     <p>Le journal des erreurs du serveur, dont le nom et la localisation sont
104     d&eacute;finis par la directive <directive module="core">ErrorLog</directive>,
105     est le journal le plus important. C'est dans celui-ci
106     que le d&eacute;mon Apache httpd va envoyer les informations de diagnostic et
107     enregistrer toutes les erreurs qui surviennent lors du traitement des
108     requ&ecirc;tes. Lorsqu'un probl&egrave;me survient au d&eacute;marrage du serveur ou pendant
109     son fonctionnement, la premi&egrave;re chose &agrave; faire est de regarder dans ce
110     journal, car il vous renseignera souvent sur le probl&egrave;me rencontr&eacute; et
111     la mani&egrave;re d'y rem&eacute;dier.</p>
112
113     <p>Le journal des erreurs est habituellement enregistr&eacute; dans un fichier
114     (en g&eacute;n&eacute;ral <code>error_log</code> sur les syst&egrave;mes de type Unix et
115     <code>error.log</code> sur Windows et OS/2). Sur les syst&egrave;mes de type Unix,
116     le serveur peut aussi enregistrer ses erreurs dans
117     <code>syslog</code> ou les
118     <a href="#piped">rediriger vers un programme</a> par l'interm&eacute;diaire d'un
119     tube de communication (pipe).</p>
120
121     <p>Le format par d&eacute;faut du journal des erreurs est descriptif et de forme
122     relativement libre. Certaines informations apparaissent cependant dans la
123     plupart des entr&eacute;es du journal. Voici un message typique
124     &agrave; titre d'exemple : </p>
125
126     <example>
127       [Wed Oct 11 14:32:52 2000] [error] [client 127.0.0.1]
128       client denied by server configuration:
129       /export/home/live/ap/htdocs/test
130     </example>
131
132     <p>Le premier champ de l'entr&eacute;e du journal est la date et l'heure du
133     message. Le second champ indique la s&eacute;v&eacute;rit&eacute; de l'erreur rapport&eacute;e. La
134     directive <directive module="core">LogLevel</directive> permet de
135     restreindre le type des erreurs qui doivent &ecirc;tre enregistr&eacute;es
136     dans le journal des erreurs en d&eacute;finissant leur niveau de s&eacute;v&eacute;rit&eacute;. Le
137     troisi&egrave;me champ contient l'adresse IP du client qui a g&eacute;n&eacute;r&eacute; l'erreur.
138     Vient ensuite le message proprement dit, qui indique dans ce cas que le
139     serveur a &eacute;t&eacute; configur&eacute; pour interdire l'acc&egrave;s au client. Le serveur
140     indique le chemin syst&egrave;me du document requis (et non
141     son chemin web).</p>
142
143     <p>Une grande vari&eacute;t&eacute; de messages diff&eacute;rents peuvent appara&icirc;tre dans le
144     journal des erreurs. La plupart d'entre eux sont similaires &agrave; l'exemple
145     ci-dessus. Le journal des erreurs peut aussi contenir des informations de
146     d&eacute;bogage en provenance de scripts CGI. Toute information qu'un script CGI
147     &eacute;crit sur la sortie d'erreurs standard <code>stderr</code> sera recopi&eacute;e
148     telle quelle dans le journal des erreurs.</p>
149
150     <p>La directive <directive module="core">ErrorLogFormat</directive>
151     vous permet de personnaliser le format du journal des erreurs, et de
152     d&eacute;finir les informations &agrave; journaliser. Si
153     <module>mod_unique_id</module> est pr&eacute;sent, vous pouvez utiliser le
154     drapeau <code>%L</code> &agrave; la fois dans le journal des erreurs et
155     dans le
156     journal des acc&egrave;s, ce qui aura pour effet de g&eacute;n&eacute;rer un identifiant
157     d'entr&eacute;e qui vous permettra de corr&eacute;ler les entr&eacute;es du journal des
158     erreurs avec celles du journal des acc&egrave;s.</p>
159
160     <p>Pendant la phase de test, il est souvent utile de visualiser en continu
161     le journal des erreurs afin de d&eacute;tecter tout probl&egrave;me &eacute;ventuel. Sur les
162     syst&egrave;mes de type Unix, ceci s'effectue &agrave; l'aide de la commande :</p>
163
164     <example>
165       tail -f error_log
166     </example>
167   </section>
168
169   <section id="permodule">
170     <title>Journalisation par module</title>
171
172     <p>La directive <directive module="core">LogLevel</directive> permet
173     de sp&eacute;cifier un niveau de s&eacute;v&eacute;rit&eacute; de journalisation pour chaque
174     module. Vous pouvez ainsi r&eacute;soudre un probl&egrave;me propre &agrave; un module particulier
175     en augmentant son volume de journalisation sans augmenter ce volume
176     pour les autres modules. Ceci est particuli&egrave;rement utile lorsque
177     vous voulez obtenir des d&eacute;tails sur le fonctionnement de modules
178     comme <module>mod_proxy</module> ou <module>mod_rewrite</module>.</p>
179
180     <p>Pour ce faire, vous devez sp&eacute;cifier le nom du module dans votre
181     directive <directive>LogLevel</directive> :</p>
182
183     <highlight language="config">
184     LogLevel info rewrite:trace5
185     </highlight>
186
187     <p>Dans cet exemple, le niveau de journalisation g&eacute;n&eacute;ral est d&eacute;fini
188     &agrave; info, et &agrave; <code>trace5</code> pour <module>mod_rewrite</module>.</p>
189
190     <note>Cette directive remplace les directives de journalisation par
191     module des versions pr&eacute;c&eacute;dentes du serveur, comme
192     <code>RewriteLog</code>.</note>
193  </section>
194
195
196   <section id="accesslog">
197     <title>Journal des acc&egrave;s</title>
198
199     <related>
200       <modulelist>
201         <module>mod_log_config</module>
202         <module>mod_setenvif</module>
203       </modulelist>
204       <directivelist>
205         <directive module="mod_log_config">CustomLog</directive>
206         <directive module="mod_log_config">LogFormat</directive>
207         <directive module="mod_setenvif">SetEnvIf</directive>
208       </directivelist>
209     </related>
210
211     <p>Le journal des acc&egrave;s au serveur
212     enregistre toutes les requ&ecirc;tes que traite
213     ce dernier. La localisation et le contenu du journal des acc&egrave;s sont d&eacute;finis
214     par la directive <directive module="mod_log_config">CustomLog</directive>.
215     La directive <directive module="mod_log_config">LogFormat</directive>
216     permet de simplifier la s&eacute;lection du contenu du journal. Cette section
217     d&eacute;crit comment configurer le serveur pour l'enregistrement des informations
218     dans le journal des acc&egrave;s.</p>
219
220     <p>Bien &eacute;videmment, le stockage d'informations dans le journal des acc&egrave;s
221     n'est que le point de d&eacute;part de la gestion de la journalisation. L'&eacute;tape
222     suivante consiste &agrave; analyser ces informations de fa&ccedil;on &agrave; pouvoir en
223     extraire des statistiques utiles. L'analyse de journaux en g&eacute;n&eacute;ral est en
224     dehors du sujet de ce document et ne fait pas vraiment partie int&eacute;grante
225     du travail du serveur web lui-m&ecirc;me. Pour plus d'informations &agrave; propos de ce
226     sujet et des applications d&eacute;di&eacute;es &agrave; l'analyse de journaux, vous pouvez vous
227     r&eacute;f&eacute;rer &agrave; <a href="http://dmoz.org/Computers/Software/Internet/
228     Site_Management/Log_analysis/">Open Directory</a> ou
229     <a href="http://dir.yahoo.com/Computers_and_Internet/Software/
230     Internet/World_Wide_Web/Servers/Log_Analysis_Tools/">Yahoo</a>.</p>
231
232     <p>Diff&eacute;rentes versions du d&eacute;mon Apache httpd utilisaient d'autres modules
233     et directives pour contr&ocirc;ler la journalisation des acc&egrave;s, &agrave; l'instar de
234     mod_log_referer, mod_log_agent, et de la directive
235     <code>TransferLog</code>. La directive
236     <directive  module="mod_log_config">CustomLog</directive> rassemble
237     d&eacute;sormais les fonctionnalit&eacute;s de toutes les anciennes directives.</p>
238
239     <p>Le format du journal des acc&egrave;s est hautement configurable. Il est
240     d&eacute;fini &agrave; l'aide d'une cha&icirc;ne de format qui ressemble sensiblement &agrave; la
241     cha&icirc;ne de format de style langage C de printf(1). Vous trouverez quelques
242     exemples dans les sections suivantes. Pour une liste exhaustive de ce que
243     peut contenir une cha&icirc;ne de format, vous pouvez vous r&eacute;f&eacute;rer au chapitre
244     <a href="mod/mod_log_config.html#formats">cha&icirc;nes de format</a> de la
245     documentation du module <module>mod_log_config</module>.</p>
246
247     <section id="common">
248       <title>Format habituel du journal</title>
249
250       <p>Voici une configuration typique pour le journal des acc&egrave;s :</p>
251
252       <highlight language="config">
253 LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common
254 CustomLog logs/access_log common
255       </highlight>
256
257       <p>Ici est d&eacute;finie l'<em>identit&eacute;</em> <code>common</code> qui est
258       ensuite associ&eacute;e &agrave; une cha&icirc;ne de format de journalisation particuli&egrave;re.
259       La cha&icirc;ne de format est constitu&eacute;e de directives d&eacute;butant par le
260       caract&egrave;re %, chacune d'entre elles indiquant au serveur d'enregistrer
261       un &eacute;l&eacute;ment particulier d'information. Des caract&egrave;res litt&eacute;raux peuvent
262       aussi &ecirc;tre ins&eacute;r&eacute;s dans la cha&icirc;ne de format ; il seront copi&eacute;s tels
263       quels dans le flux de sortie destin&eacute; &agrave; la journalisation.
264       Les guillemets (<code>"</code>) doivent &ecirc;tre &eacute;chapp&eacute;es en les faisant
265       pr&eacute;c&eacute;der d'un anti-slash (<code>\</code>) afin qu'elles ne soient pas
266       interpr&eacute;t&eacute;es comme la fin de la cha&icirc;ne de format. La cha&icirc;ne de format
267       peut aussi contenir les caract&egrave;res de contr&ocirc;le sp&eacute;ciaux
268       "<code>\n</code>" et "<code>\t</code>" pour ins&eacute;rer respectivement
269       un passage &agrave; la ligne et une tabulation.</p>
270
271       <p>La directive <directive module="mod_log_config">CustomLog</directive>
272       d&eacute;finit un nouveau fichier journal en l'associant &agrave; l'identit&eacute;
273       pr&eacute;c&eacute;demment d&eacute;finie. Le chemin du nom de fichier associ&eacute; au journal
274       des acc&egrave;s est relatif au chemin d&eacute;fini par la directive
275       <directive module="core">ServerRoot</directive>, sauf s'il
276       d&eacute;bute par un slash.</p>
277
278       <p>La configuration ci-dessus va enregistrer les entr&eacute;es de
279       journalisation selon un format connu sous le nom de
280       Common Log Format (CLF) pour "Format de journalisation standard".
281       Ce format standard peut &ecirc;tre produit par de nombreux serveurs web
282       diff&eacute;rents et lu par de nombreux programmes d'analyse de journaux.
283       Les entr&eacute;es de fichier journal g&eacute;n&eacute;r&eacute;es selon le format CLF
284       ressemblent &agrave; ceci :</p>
285
286       <example>
287         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
288         /apache_pb.gif HTTP/1.0" 200 2326
289       </example>
290
291       <p>Chaque partie de cette entr&eacute;e de journal est d&eacute;crite
292       dans ce qui suit.</p>
293
294       <dl>
295         <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
296
297         <dd>Il s'agit de l'adresse IP du client (l'h&ocirc;te distant) qui a envoy&eacute;
298         la requ&ecirc;te au serveur. Si la directive
299         <directive module="core">HostnameLookups</directive> est positionn&eacute;e &agrave;
300         <code>On</code>, le serveur va essayer de d&eacute;terminer le nom de l'h&ocirc;te
301         et de l'enregistrer &agrave; la place de l'adresse IP. Cette configuration
302         n'est cependant pas recommand&eacute;e car elle peut ralentir le serveur de
303         mani&egrave;re significative. Il est par cons&eacute;quent pr&eacute;f&eacute;rable d'utiliser un
304         processeur d'analyse de journaux a posteriori
305         tel que <program>logresolve</program>
306         pour d&eacute;terminer les noms d'h&ocirc;te. L'adresse IP indiqu&eacute;e ici n'est pas
307         n&eacute;cessairement l'adresse IP de la machine devant laquelle se trouve
308         l'utilisateur. Si un serveur mandataire s'intercale entre le serveur
309         et l'utilisateur, l'adresse indiqu&eacute;e sera celle du mandataire et non
310         celle de la machine &agrave; l'origine de la requ&ecirc;te.</dd>
311
312         <dt><code>-</code> (<code>%l</code>)</dt>
313
314         <dd>Le "trait d'union" indique que la portion d'information
315         correspondante n'est pas disponible. Dans le cas pr&eacute;sent, l'information
316         non disponible est l'identit&eacute; (RFC 1413) du client telle que d&eacute;termin&eacute;e
317         par <code>identd</code> sur la machine cliente. Cette information est
318         tr&egrave;s peu fiable et ne devrait jamais &ecirc;tre utilis&eacute;e, sauf dans le cas
319         de r&eacute;seaux internes &eacute;troitement contr&ocirc;l&eacute;s. Le d&eacute;mon httpd ne cherchera
320         d'ailleurs &agrave; obtenir cette information que si la directive
321         <directive module="mod_ident">IdentityCheck</directive> est positionn&eacute;e
322         &agrave; <code>On</code>.</dd>
323
324         <dt><code>frank</code> (<code>%u</code>)</dt>
325
326         <dd>Il s'agit de l'identifiant utilisateur de la personne qui a
327         demand&eacute; le document, issu d'une authentification HTTP.
328         Ce m&ecirc;me identifiant est en g&eacute;n&eacute;ral fourni aux scripts CGI par
329         l'interm&eacute;diaire de la valeur de la variable d'environnement
330         <code>REMOTE_USER</code>. Si le statut de la requ&ecirc;te (voir plus loin)
331         est 401, cette identifiant n'est pas fiable car l'utilisateur n'est
332         pas encore authentifi&eacute;. Si le document n'est pas prot&eacute;g&eacute; par
333         mot de passe, cette partie d'information sera repr&eacute;sent&eacute;e par
334         "<code>-</code>", comme la partie pr&eacute;c&eacute;dente.</dd>
335
336         <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
337         (<code>%t</code>)</dt>
338
339         <dd>
340           L'heure &agrave; laquelle la requ&ecirc;te a &eacute;t&eacute; re&ccedil;ue.
341           Le format est le suivant :
342
343           <p class="indent">
344             <code>[jour/mois/ann&eacute;e:heure:minutes:secondes zone]<br />
345              jour = 2*chiffre<br />
346              mois = 3*lettre<br />
347              ann&eacute;e = 4*chiffre<br />
348              heure = 2*chiffre<br />
349              minutes = 2*chiffre<br />
350              secondes = 2*chiffre<br />
351              zone = (`+' | `-') 4*chiffre</code>
352           </p>Il est possible de modifier le format d'affichage de l'heure
353           en sp&eacute;cifiant <code>%{format}t</code> dans la cha&icirc;ne de format du
354           journal, o&ugrave; <code>format</code> est une cha&icirc;ne de format
355           de la forme de celle de la fonction <code>strftime(3)</code>
356           de la biblioth&egrave;que C standard, ou choisie parmi les
357           formats sp&eacute;ciaux support&eacute;s. Pour plus de d&eacute;tails,
358           reportez-vous aux. <a
359           href="mod/mod_log_config.html#formats">cha&icirc;nes de format</a>
360           de <module>mod_log_config</module>.
361         </dd>
362
363         <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
364         (<code>\"%r\"</code>)</dt>
365
366         <dd>La ligne de la requ&ecirc;te du client est plac&eacute;e entre guillemets.
367         Elle contient de nombreuses informations utiles. Tout d'abord, la
368         m&eacute;thode utilis&eacute;e par le client est <code>GET</code>. Ensuite, le
369         client a demand&eacute; la ressource <code>/apache_pb.gif</code>, et enfin,
370         le client a utilis&eacute; le protocole <code>HTTP/1.0</code>. Il est aussi
371         possible d'enregistrer s&eacute;par&eacute;ment une ou plusieurs parties de la
372         requ&ecirc;te. Par exemple, la cha&icirc;ne de format "<code>%m %U %q %H</code>"
373         va enregistrer la m&eacute;thode, le chemin, la cha&icirc;ne de la requ&ecirc;te et le
374         protocole, ce qui donnera le m&ecirc;me r&eacute;sultat que
375         "<code>%r</code>".</dd>
376
377         <dt><code>200</code> (<code>%&gt;s</code>)</dt>
378
379         <dd>C'est le code de statut que le serveur retourne au client. Cette
380         information est tr&egrave;s importante car elle indique si la requ&ecirc;te a fait
381         l'objet d'une r&eacute;ponse positive (codes commen&ccedil;ant par 2), une
382         redirection (codes commen&ccedil;ant par 3), une erreur due au client (codes
383         commen&ccedil;ant par 4), ou une erreur due au serveur (codes commen&ccedil;ant
384         par 5). Vous trouverez la liste compl&egrave;te des codes de statut possibles
385         dans la <a href="http://www.w3.org/Protocols/rfc2616/
386         rfc2616.txt">specification HTTP</a> (RFC2616 section 10).</dd>
387
388         <dt><code>2326</code> (<code>%b</code>)</dt>
389
390         <dd>La derni&egrave;re partie indique la taille de l'objet retourn&eacute; au client,
391         en-t&ecirc;tes non compris. Si aucun contenu n'a &eacute;t&eacute; retourn&eacute; au client, cette
392         partie contiendra "<code>-</code>". Pour indiquer l'absence de contenu
393         par "<code>0</code>", utilisez <code>%B</code> au lieu de
394         <code>%b</code>.</dd>
395       </dl>
396     </section>
397
398     <section id="combined">
399       <title>Combined Log Format (Format de journalisation combin&eacute;)</title>
400
401       <p>Une autre cha&icirc;ne de format couramment utilis&eacute;e est le
402       "Combined Log Format" (Format de journalisation combin&eacute;). Il s'utilise
403       comme suit :</p>
404
405       <highlight language="config">
406 LogFormat "%h %l %u %t \"%r\" %&gt;s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
407 CustomLog log/access_log combined
408       </highlight>
409
410       <p>Ce format est identique au Common Log Format, avec deux champs
411       suppl&eacute;mentaires. Chacun de ces deux champs utilise la directive
412       commen&ccedil;ant par le caract&egrave;re "%" <code>%{<em>header</em>}i</code>,
413       o&ugrave; <em>header</em> peut &ecirc;tre n'importe quel en-t&ecirc;te de requ&ecirc;te HTTP.
414       Avec ce format, le journal des acc&egrave;s se pr&eacute;sentera comme suit :</p>
415
416       <example>
417         127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
418         /apache_pb.gif HTTP/1.0" 200 2326
419         "http://www.example.com/start.html" "Mozilla/4.08 [en]
420         (Win98; I ;Nav)"
421       </example>
422
423       <p>Les champs suppl&eacute;mentaires sont :</p>
424
425       <dl>
426         <dt><code>"http://www.example.com/start.html"</code>
427         (<code>\"%{Referer}i\"</code>)</dt>
428
429         <dd>L'en-t&ecirc;te "Referer" (sic) de la requ&ecirc;te HTTP. Il indique le site
430         depuis lequel le client pr&eacute;tend avoir lanc&eacute; sa requ&ecirc;te. (Ce doit &ecirc;tre
431         la page qui contient un lien vers <code>/apache_pb.gif</code> ou
432         inclut ce dernier fichier).</dd>
433
434         <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
435         (<code>\"%{User-agent}i\"</code>)</dt>
436
437         <dd>L'en-t&ecirc;te User-Agent de la requ&ecirc;te HTTP. C'est une information
438         d'identification que le navigateur du client envoie &agrave; propos
439         de lui-m&ecirc;me.</dd>
440       </dl>
441     </section>
442
443     <section id="multiple">
444       <title>Journaux d'acc&egrave;s multiples</title>
445
446       <p>Plusieurs journaux d'acc&egrave;s peuvent &ecirc;tre cr&eacute;&eacute;s en sp&eacute;cifiant tout
447       simplement plusieurs directives
448       <directive module="mod_log_config">CustomLog</directive> dans le
449       fichier de configuration. Par exemple, les directives suivantes vont
450       cr&eacute;er trois journaux d'acc&egrave;s. Le premier contiendra les informations
451       de base CLF, le second les informations du Referer, et le troisi&egrave;me
452       les informations sur le navigateur. Les deux derni&egrave;res directives
453       <directive module="mod_log_config">CustomLog</directive> montrent
454       comment simuler les effets des directives <code>ReferLog</code> et
455       <code>AgentLog</code>.</p>
456
457       <highlight language="config">
458 LogFormat "%h %l %u %t \"%r\" %&gt;s %b" common
459 CustomLog logs/access_log common
460 CustomLog logs/referer_log "%{Referer}i -&gt; %U"
461 CustomLog logs/agent_log "%{User-agent}i"
462       </highlight>
463
464       <p>Cet exemple montre aussi qu'il n'est pas obligatoire d'associer
465       une cha&icirc;ne de format &agrave; un alias au moyen de la directive
466       <directive module="mod_log_config">LogFormat</directive>. Elle peut
467       &ecirc;tre d&eacute;finie directement dans la ligne de la directive
468       <directive module="mod_log_config">CustomLog</directive>.</p>
469     </section>
470
471     <section id="conditional">
472       <title>Journalisation conditionnelle</title>
473
474       <p>Il est parfois souhaitable d'exclure certaines entr&eacute;es des journaux
475       d'acc&egrave;s en fonction des caract&eacute;ristiques de la requ&ecirc;te du client. On
476       peut ais&eacute;ment accomplir ceci &agrave; l'aide des
477       <a href="env.html">variables d'environnement</a>. Tout d'abord, une
478       variable d'environnement doit &ecirc;tre d&eacute;finie pour indiquer que la
479       requ&ecirc;te remplit certaines conditions. Pour ceci, on utilise en g&eacute;n&eacute;ral
480       la directive <directive module="mod_setenvif">SetEnvIf</directive>,
481       puis la clause <code>env=</code> de la directive
482       <directive module="mod_log_config">CustomLog</directive> pour inclure
483       ou exclure les requ&ecirc;tes pour lesquelles
484       la variable d'environnement est d&eacute;finie.
485       Quelques exemples :</p>
486
487       <highlight language="config">
488 # Marque les requ&ecirc;tes en provenance de l'interface loop-back
489 SetEnvIf Remote_Addr "127\.0\.0\.1" dontlog
490 # Marque les requ&ecirc;tes pour le fichier robots.txt
491 SetEnvIf Request_URI "^/robots\.txt$" dontlog
492 # Journalise toutes les autres requ&ecirc;tes
493 CustomLog logs/access_log common env=!dontlog
494       </highlight>
495
496       <p>Autre exemple, imaginons l'enregistrement des requ&ecirc;tes en provenance
497       d'utilisateurs de langue anglaise dans un journal, et celles des autres
498       utilisateurs dans un autre journal.</p>
499
500       <highlight language="config">
501         SetEnvIf Accept-Language "en" english<br />
502         CustomLog logs/english_log common env=english<br />
503         CustomLog logs/non_english_log common env=!english
504       </highlight>
505
506         <p>Dans le contexte d'une mise en cache, il peut &ecirc;tre
507         int&eacute;ressant de conna&icirc;tre l'efficacit&eacute; du cache. Pour y parvenir,
508         on pourrait utiliser cette m&eacute;thode simple :</p>
509
510       <highlight language="config">
511 SetEnv CACHE_MISS 1
512 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
513 CustomLog logs/access_log common-cache
514       </highlight>
515
516       <p><module>mod_cache</module> va s'ex&eacute;cuter avant
517       <module>mod_env</module>, et si son action est couronn&eacute;e de
518       succ&egrave;s, il d&eacute;livrera le contenu sans faire appel &agrave; ce dernier. Si
519       l'URL se trouve dans le cache, la valeur journalis&eacute;e sera alors
520       <code>-</code>, tandis que dans le cas contraire elle sera
521       <code>1</code>.</p>
522
523       <p>En plus de la syntaxe <code>env=</code>, la directive <directive
524       module="mod_log_config">LogFormat</directive> supporte les
525       valeurs de journalisation conditionnelles bas&eacute;es sur le code de la
526       r&eacute;ponse HTTP :</p>
527
528       <highlight language="config">
529 LogFormat "%400,501{User-agent}i" browserlog
530 LogFormat "%!200,304,302{Referer}i" refererlog
531       </highlight>
532
533       <p>Dans le premier exemple, le <code>User-agent</code> sera
534       enregistr&eacute; si le code d'&eacute;tat HTTP est 400 ou 501. Dans le cas
535       contraire, c'est un caract&egrave;re "-" qui sera enregistr&eacute; &agrave; la place.
536       Dans le second exemple, le <code>Referer</code> sera enregistr&eacute; si
537       le code d'&eacute;tat HTTP n'est <strong>pas</strong> 200, 204, ou 302
538       (remarquez le caract&egrave;re "!" avant les codes d'&eacute;tat).</p>
539
540       <p>Bien que nous venions de montrer que la journalisation conditionnelle
541       est souple et tr&egrave;s puissante, cette m&eacute;thode de contr&ocirc;le du contenu des
542       journaux n'est pas la seule. Les fichiers journaux sont plus utiles
543       quand ils contiennent un enregistrement complet de l'activit&eacute; du serveur,
544       et il est souvent plus ais&eacute; de simplement traiter &agrave; posteriori les fichiers
545       journaux pour supprimer les requ&ecirc;tes que vous ne voulez pas y voir
546       appara&icirc;tre.</p>
547     </section>
548   </section>
549
550   <section id="rotation">
551     <title>Rotation des journaux</title>
552
553     <p>M&ecirc;me dans le cas d'un serveur mod&eacute;r&eacute;ment sollicit&eacute;, la quantit&eacute;
554     d'informations stock&eacute;es dans les fichiers journaux est tr&egrave;s importante.
555     Le fichier journal des acc&egrave;s grossit en g&eacute;n&eacute;ral d'1 Mo ou plus toutes
556     les 10000 requ&ecirc;tes. Il est par cons&eacute;quent n&eacute;cessaire d'effectuer
557     p&eacute;riodiquement la rotation des journaux en d&eacute;pla&ccedil;ant ou supprimant les
558     fichiers correspondants. On ne peut pas le faire pendant que le serveur
559     est en cours d'ex&eacute;cution, car Apache httpd va continuer &agrave; &eacute;crire dans l'ancien
560     fichier journal aussi longtemps qu'il le maintiendra ouvert.
561     C'est pourquoi le serveur doit &ecirc;tre
562     <a href="stopping.html">red&eacute;marr&eacute;</a> apr&egrave;s le d&eacute;placement ou la
563     suppression des fichiers journaux de fa&ccedil;on &agrave; ce qu'il en ouvre
564     de nouveaux.</p>
565
566     <p>Avec un red&eacute;marrage <em>graceful</em>, on peut faire en sorte que le
567     serveur ouvre de nouveaux fichiers journaux sans perdre de connexions
568     existantes ou en cours avec les clients. Cependant, pour que ceci soit
569     possible, le serveur doit continuer &agrave; &eacute;crire dans les anciens fichiers
570     journaux pendant qu'il termine le traitement des requ&ecirc;tes en cours.
571     Il est donc n&eacute;cessaire d'attendre un certain temps apr&egrave;s le r&eacute;d&eacute;marrage
572     avant d'effectuer tout traitement sur les fichiers journaux. Voici un
573     sc&eacute;nario typique dans lequel on effectue une simple rotation des
574     journaux en compressant les anciens fichiers correspondants afin
575     de gagner de l'espace disque :</p>
576
577     <example>
578       mv access_log access_log.old<br />
579       mv error_log error_log.old<br />
580       apachectl graceful<br />
581       sleep 600<br />
582       gzip access_log.old error_log.old
583     </example>
584
585     <p>La section suivante pr&eacute;sente une autre m&eacute;thode de rotation des journaux
586     qui consiste &agrave; utiliser les
587     <a href="#piped">journaux redirig&eacute;s</a>.</p>
588   </section>
589
590   <section id="piped">
591     <title>Journaux redirig&eacute;s</title>
592
593     <p>Nous avons vu que le d&eacute;mon httpd &eacute;crivait les informations de
594     journalisation des erreurs et des acc&egrave;s dans un fichier journal ;
595     il peut aussi
596     rediriger ces informations vers un autre processus par l'interm&eacute;diaire d'un
597     tube de communication (pipe). Cette fonctionnalit&eacute; am&eacute;liore
598     consid&eacute;rablement la souplesse de la journalisation, sans ajouter de code
599     au serveur principal. Pour rediriger les informations de journalisation
600     vers un tube de communication, remplacez simplement le nom de fichier
601     journal par
602     le caract&egrave;re pipe "<code>|</code>", suivi du nom de l'ex&eacute;cutable qui va
603     recueillir les entr&eacute;es de journal sur son entr&eacute;e
604     standard. Le serveur va
605     lancer le processus de redirection des journaux au moment du d&eacute;marrage du
606     serveur, et le relancera s'il cesse de fonctionner
607     pendant l'ex&eacute;cution du serveur.
608     (Nous d&eacute;nommons cette technique "journalisation
609     redirig&eacute;e fiable" gr&acirc;ce &agrave; cette derni&egrave;re fonctionnalit&eacute;.)</p>
610
611     <p>Les processus de journalisation redirig&eacute;e sont lanc&eacute;s par le processus
612     httpd parent, et h&eacute;ritent de l'UID de ce dernier. Cela signifie que les
613     programmes de journalisation dirig&eacute;e s'ex&eacute;cutent g&eacute;n&eacute;ralement en tant que
614     root. Il est donc tr&egrave;s important que ces programmes soient simples et
615     s&eacute;curis&eacute;s.</p>
616
617     <p>Un des grands avantages de la journalisation redirig&eacute;e est la possibilit&eacute;
618     d'effectuer la rotation des journaux sans avoir &agrave; red&eacute;marrer le serveur. Pour
619     accomplir cette t&acirc;che, le serveur HTTP Apache fournit un programme simple
620     appel&eacute; <program>rotatelogs</program>. Par exemple, pour une rotation des
621     journaux toutes les 24 heures, ajoutez ces lignes :</p>
622
623     <highlight language="config">
624       CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
625     </highlight>
626
627     <p>Notez que l'ensemble de la commande qui sera appel&eacute;e par le tube de
628     communication a &eacute;t&eacute; plac&eacute;e entre guillemets. Bien que cet exemple
629     concerne le journal des acc&egrave;s, la m&ecirc;me technique peut &ecirc;tre utilis&eacute;e
630     pour le journal des erreurs.</p>
631
632     <p>Il existe un autre programme de rotation des journaux similaire mais
633     beaucoup plus souple : il s'agit de "cronolog", non fourni par Apache,
634     mais disponible <a href="http://www.cronolog.org/">ici</a>.</p>
635
636     <p>Comme la journalisation conditionnelle, la journalisation redirig&eacute;e est
637     un outil tr&egrave;s puissant, mais si elle existe, il est pr&eacute;f&eacute;rable d'utiliser
638     une solution plus simple comme le traitement &agrave; posteriori hors ligne.</p>
639
640
641   <p>Par d&eacute;faut, le processus de redirection du journal est lanc&eacute; sans
642   invoquer un shell. Pour invoquer un shell, utilisez "<code>|$</code>"
643   au lieu de "<code>|</code>" (en g&eacute;n&eacute;ral avec <code>/bin/sh -c</code>)
644   :</p>
645
646     <highlight language="config">
647 # Invocation de "rotatelogs" en utilisant un shell
648 CustomLog "|$/usr/local/apache/bin/rotatelogs   /var/log/access_log 86400" common
649     </highlight>
650
651
652     <p>Il s'agissait du comportement par d&eacute;faut sous Apache 2.2. Selon
653     les sp&eacute;cificit&eacute;s du shell, ceci peut g&eacute;n&eacute;rer un processus shell
654     suppl&eacute;mentaire pour toute la dur&eacute;e du programme de redirection du
655     journal, et induire des probl&egrave;mes de gestion de signaux au cours du
656     red&eacute;marrage. La notation "<code>||</code>" est aussi support&eacute;e pour
657     des raisons de compatibilit&eacute; avec Apache 2.2 et est &eacute;quivalente &agrave;
658     "<code>|</code>".</p>
659     </section>
660
661   <section id="virtualhost">
662     <title>H&ocirc;tes virtuels</title>
663
664     <p>Lorsqu'un serveur poss&egrave;de plusieurs <a href
665     ="vhosts/">h&ocirc;tes virtuels</a>, il existe de nombreuses solutions pour g&eacute;rer
666     les fichiers journaux. Par exemple, on peut utiliser les journaux comme
667     s'il s'agissait d'un serveur avec un seul h&ocirc;te. Il suffit pour cela de
668     placer les directives de journalisation en dehors des sections
669     <directive module="core" type="section">VirtualHost</directive> au niveau
670     du serveur principal, ce qui a pour effet de journaliser toutes les
671     requ&ecirc;tes dans le m&ecirc;me journal des acc&egrave;s et des erreurs. Cette technique
672     est cependant inappropri&eacute;e pour recueillir des statistiques sur chaque
673     h&ocirc;te virtuel individuellement.</p>
674
675     <p>Si des directives <directive module=
676     "mod_log_config">CustomLog</directive> ou
677     <directive module="core">ErrorLog</directive> sont plac&eacute;es dans une section
678     <directive module="core" type="section">VirtualHost</directive>, toutes les
679     requ&ecirc;tes ou erreurs pour cet h&ocirc;te virtuel ne seront enregistr&eacute;es que dans
680     le fichier sp&eacute;cifi&eacute;. Tout h&ocirc;te virtuel qui ne poss&egrave;de pas de directives de
681     journalisation verra ses requ&ecirc;tes enregistr&eacute;es dans le journal du serveur
682     principal. Cette technique est appropri&eacute;e pour un petit nombre d'h&ocirc;tes
683     virtuels, mais si ce nombre est important, elle peut devenir compliqu&eacute;e &agrave;
684     g&eacute;rer. En outre, des probl&egrave;mes de <a
685     href="vhosts/fd-limits.html">nombre de descripteurs
686     de fichiers insuffisant</a> peuvent rapidement appara&icirc;tre.</p>
687
688     <p>Il existe un tr&egrave;s bon compromis pour le journal des acc&egrave;s. En int&eacute;grant
689     les informations &agrave; propos de l'h&ocirc;te virtuel &agrave; la cha&icirc;ne de format du
690     journal, il est possible de journaliser tous les h&ocirc;tes dans le m&ecirc;me
691     journal, puis de s&eacute;parer ult&eacute;rieurement le journal en plusieurs journaux
692     individuels. Consid&eacute;rons par exemple les directives suivantes :</p>
693
694     <highlight language="config">
695 LogFormat "%v %l %u %t \"%r\" %&gt;s %b" comonvhost
696 CustomLog logs/access_log comonvhost
697     </highlight>
698
699     <p>Le champ <code>%v</code> sert &agrave; enregistrer le nom de l'h&ocirc;te virtuel qui
700     traite la requ&ecirc;te. Un programme tel que <a
701     href="programs/other.html">split-logfile</a> peut ensuite &ecirc;tre utilis&eacute;
702     pour g&eacute;n&eacute;rer "&agrave; froid" autant de journaux que d'h&ocirc;tes virtuels.</p>
703   </section>
704
705   <section id="other">
706     <title>Autres fichiers journaux</title>
707
708     <related>
709       <modulelist>
710         <module>mod_logio</module>
711         <module>mod_log_config</module>
712         <module>mod_log_forensic</module>
713         <module>mod_cgi</module>
714       </modulelist>
715       <directivelist>
716         <directive module="mod_log_config">LogFormat</directive>
717         <directive module="mod_log_config">BufferedLogs</directive>
718         <directive module="mod_log_forensic">ForensicLog</directive>
719         <directive module="mpm_common">PidFile</directive>
720         <directive module="mod_cgi">ScriptLog</directive>
721         <directive module="mod_cgi">ScriptLogBuffer</directive>
722         <directive module="mod_cgi">ScriptLogLength</directive>
723       </directivelist>
724     </related>
725
726     <section>
727       <title>Enregistrement du nombre r&eacute;el d'octets envoy&eacute;s et re&ccedil;us</title>
728
729       <p>Le module <module>mod_logio</module> fournit deux champs
730       <directive module="mod_log_config">LogFormat</directive> suppl&eacute;mentaires
731       (%I et %O) qui permettent d'enregistrer le nombre r&eacute;el d'octets re&ccedil;us et
732       envoy&eacute;s sur le r&eacute;seau.</p>
733     </section>
734
735     <section>
736       <title>Journalisation de style investigation judiciaire (forensic logging)</title>
737
738       <p>Le module <module>mod_log_forensic</module> permet la journalisation
739       &agrave; des fins d'investigation judiciaire des requ&ecirc;tes des clients. La
740       journalisation est effectu&eacute;e avant et apr&egrave;s le traitement de la requ&ecirc;te,
741       qui fait donc l'objet de deux entr&eacute;es dans le journal. Le g&eacute;n&eacute;rateur de
742       journaux d'investigation est tr&egrave;s strict et ne permet aucune
743       personnalisation. C'est un inestimable outil de d&eacute;bogage et de s&eacute;curit&eacute;.</p>
744     </section>
745
746     <section id="pidfile">
747       <title>Fichier PID</title>
748
749       <p>Au d&eacute;marrage, le d&eacute;mon httpd Apache enregistre l'identifiant du
750       processus httpd parent dans le fichier <code>logs/httpd.pid</code>.
751       Le nom de ce fichier peut &ecirc;tre modifi&eacute; &agrave; l'aide de la directive
752       <directive module="mpm_common">PidFile</directive>. Cet identifiant
753       permet &agrave; l'administrateur de red&eacute;marrer et arr&ecirc;ter le d&eacute;mon en
754       envoyant des signaux au processus parent ; sous Windows, vous devez
755       utiliser l'option de ligne de commande -k. Pour plus de d&eacute;tails,
756       consulter la page <a href="stopping.html">Arr&ecirc;t et red&eacute;marrage</a>.</p>
757     </section>
758
759     <section id="scriptlog">
760       <title>Journal des scripts</title>
761
762       <p>Afin de faciliter le d&eacute;bogage, la directive
763       <directive module="mod_cgi">ScriptLog</directive> vous permet
764       d'enregistrer les entr&eacute;es et sorties des scripts CGI. Elle ne doit &ecirc;tre
765       utilis&eacute;e que pendant la phase de test, et en aucun cas sur un
766       serveur en production. Vous trouverez plus d'informations dans la
767       documentation du module <a href="mod/mod_cgi.html">mod_cgi</a>.</p>
768     </section>
769
770     <section id="rewritelog">
771       <title>Journal de r&eacute;&eacute;criture</title>
772
773       <p>Lorsqu'on utilise les fonctionnalit&eacute;s puissantes et complexes du
774       module <a href="mod/mod_rewrite.html">mod_rewrite</a>, il est presque
775       toujours n&eacute;cessaire d'utiliser la directive
776       <directive module="mod_rewrite">RewriteLog</directive> afin de
777       faciliter le d&eacute;bogage. Ce fichier journal fournit une analyse d&eacute;taill&eacute;e
778       de la transformation des requ&ecirc;tes par le moteur de r&eacute;&eacute;criture. Le niveau
779       de d&eacute;tail est contr&ocirc;l&eacute; par la directive
780       <directive module="mod_rewrite">RewriteLogLevel</directive>.</p>
781     </section>
782   </section>
783 </manualpage>
784
785
786
787