1 <?xml version="1.0" encoding="UTF-8" ?>
2 <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd">
3 <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?>
4 <!-- English Revision: 1657858:1739105 (outdated) -->
5 <!-- =====================================================
6 Translated by: Nilgün Belma Bugüner <nilgun belgeler.gen.tr>
7 Reviewed by: Orhan Berent <berent belgeler.gen.tr>
8 ========================================================== -->
11 Licensed to the Apache Software Foundation (ASF) under one or more
12 contributor license agreements. See the NOTICE file distributed with
13 this work for additional information regarding copyright ownership.
14 The ASF licenses this file to You under the Apache License, Version 2.0
15 (the "License"); you may not use this file except in compliance with
16 the License. You may obtain a copy of the License at
18 http://www.apache.org/licenses/LICENSE-2.0
20 Unless required by applicable law or agreed to in writing, software
21 distributed under the License is distributed on an "AS IS" BASIS,
22 WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
23 See the License for the specific language governing permissions and
24 limitations under the License.
27 <manualpage metafile="logs.xml.meta">
29 <title>Günlük Dosyaları</title>
32 <p>Bir HTTP sunucusunu verimli şekilde yönetebilmek için oluşabilecek
33 sorunlardan başka sunucunun başarımı ve etkinliği hakkında da bazı geri
34 bildirimler almak gerekir. Apache HTTP Sunucusu çok kapsamlı ve esnek
35 bir günlükleme yeteneğine sahiptir. Bu belgede sunucunun günlükleme
36 yeteneğini nasıl yapılandıracağınızdan ve günlük kayıtlarını nasıl
37 yorumlayacağınızdan bahsedilecektir.</p>
40 <section id="overview">
45 <module>mod_log_config</module>
46 <module>mod_log_forensic</module>
47 <module>mod_logio</module>
48 <module>mod_cgi</module>
52 <p>Apache HTTP Sunucusu, isteğin ilk alınışından itibaren, URL eşleme
53 işlemleri, bağlantının son çözümlemesi ve bu işlemler sırasına ortaya çıkan
54 hatalar da dahil olmak üzere sunucunuzda meydana gelen herşeyi günlüklemek
55 için çok çeşitli mekanizmalar içerir. Buna ek olarak, günlükleme
56 yetenekleri sağlayan üçüncü parti modüller de kullanılabilir veya mevcut
57 günlük dosyalarına girdiler enjekte edilebilir. Ayrıca, CGI programları,
58 PHP betikleri ve benzerleri sunucu hata günlüğüne kendi iletilerini
61 <p>Bu belgede Apache HTTP Sunucusunun standart parçası olan günlükleme
62 modülleri hakkında bilgi verilecektir.</p>
66 <section id="security">
67 <title>Güvenlik Uyarısı</title>
69 <p>Apache httpd’nin günlük dosyalarını yazdığı dizine yazabilen birinin sunucuyu
70 başlatan kullanıcı kimliğine (bu genellikle root olur) erişim
71 kazanabileceğine hemen hemen kesin gözüyle bakılabilir. Sonuçlarının
72 neler olacağını kestiremiyorsanız günlüklerin yazıldığı dizinde <em>hiç
73 kimseye</em> yazma erişimi vermeyin; ayrıntılı bilgi için <a
74 href="misc/security_tips.html">güvenlik ipuçları</a> belgesine
77 <p>Buna ilaveten, günlük dosyaları istemci tarafından sağlanmış bilgiler
78 de içerebilir. Bu nedenle, kötü niyetli istemcilerin günlük dosyalarına
79 denetim karakterleri girmeleri olasılığına karşı ham günlükler ele
80 alınırken dikkatli olunmalıdır.</p>
83 <section id="errorlog">
84 <title>Hata Günlüğü</title>
90 <directive module="core">ErrorLog</directive>
91 <directive module="core">ErrorLogFormat</directive>
92 <directive module="core">LogLevel</directive>
96 <p>İsmi ve yeri <directive module="core">ErrorLog</directive> yönergesi
97 ile belirtilen sunucu hata günlüğü, en önemli günlük dosyasıdır. Apache
98 httpd tarafından istekler işlenirken saptanan hatalar ve tanı bilgileri
99 bu dosyaya gönderilir. Sunucuyu başlatırken veya sunucu çalışırken bir
100 sorunla karşılaşıldığında, neyin yanlış gittiğini öğrenmek için
101 bakılacak ilk yer burasıdır. Günlük kaydı çoğunlukla sorunun nasıl
102 düzeltileceği ile ilgili ayrıntıları da içerir.</p>
104 <p>Hata günlüğü normal olarak bir dosyaya yazılır (genellikle, dosyanın
105 ismi Unix sistemlerinde <code>error_log</code>, OS/2 ve Windows’ta ise
106 <code>error.log</code>’dur). Ayrıca, Unix sistemlerinde sunucunun
107 hataları <code>syslog</code>’a veya <a href="#piped">borulamak suretiyle
108 bir programa</a> aktarması da mümkündür.</p>
110 <p>Hata günlüğünün biçemi <directive module="core"
111 >ErrorLogFormat</directive> yönergesi ile belirlenir. Bu yönergeyi
112 kullanarak günlüklenen değerleri özelleştirebilirsiniz. Bir biçem
113 belirtmezseniz öntanımlı biçem kullanılır. Örnek tipik bir hata iletisi
117 [Fri Sep 09 10:42:29.902022 2011] [core:error] [pid 35708:tid 4328636416]
118 [client 72.15.99.187] Dosya yok: /usr/local/apache2/htdocs/favicon.ico
121 <p>Günlük girdisinin ilk öğesi iletinin yazıldığı tarih ve saatten oluşur.
122 İkincisi iletiyi üreten modülün ismi (bu durumda: core) ile raporlanan
123 bilginin önem derecesini belirtir. Bunu varsa sürecin kimliği ve yine
124 varsa evre kimliği izler. Sonraki öğe hatanın üretilmesine sebep olan
125 istemcinin IP adresini içerir. Kalanı iletinin kendisidir (duruma
126 bakılırsa bir dosyaya yapılan istek yerine getirilememiş).</p>
128 <p>Hata günlüğünde görünebilecek ileti çeşitliliği oldukça fazladır. Çoğu
129 yukarıdaki örneğin benzeridir. Hata günlüğü ayrıca, CGI betiklerinin
130 hata ayıklama çıktılarını da içerir. Bir CGI betiği tarafından standart
131 hataya (<code>stderr</code>) yazılan her türlü bilgi doğrudan hata
132 günlüğüne kopyalanır.</p>
134 <p>Hata günlüğüne ve erişim günlüğüne <code>%L</code> dizgeciği konularak
135 erişim günlüğündeki girdi ile hata günlüğündeki girdiyi ilişkilendirecek
136 bir günlük girdisi kimliği oluşturulabilir.
137 <module>mod_unique_id</module> yüklüyse günlük girdisi kimliği olarak
138 onun eşsiz istek kimliği de kullanılır.</p>
140 <p>Sunucuyu denerken olası sorunlara karşı hata günlüğünü sürekli
141 izlemelisiniz. Unix sistemlerinde bunu şöyle bir komutla
142 sağlayabilirsiniz:</p>
149 <section id="permodule">
150 <title>Modüllere göre günlükleme</title>
152 <p><directive module="core">LogLevel</directive> yönergesi, günlük
153 iletisinin üretilmesine sebep olan modüle bağlı bir önem seviyesi
154 belirleyebilmenizi sağlar. Bu yolla sorun yaşadığınız modülle ilgili
155 günlük musluklarını sonuna kadar açabiliri ek olarak ilgilendiğiniz diğer
156 modüllerle ilgili ayrıntıları da edinebilirsiniz. Özellikle
157 <module>mod_proxy</module> veya <module>mod_rewrite</module> gibi
158 modüllerde yapılmak isteneni denerken neler olup bittiğini ayrıntılarıyla
159 bilmek istediğiniz durumlarda kullanışlıdır.</p>
161 <p>Bunu <directive>LogLevel</directive> yönergesinde modülün ismini
162 belirterek yapabilirsiniz:</p>
164 <highlight language="config">
165 LogLevel info rewrite:trace5
168 <p>Bu satırla ana <directive>LogLevel</directive> info'ya ayarlanırken
169 <module>mod_rewrite</module> için musluk <code>trace5</code> seviyesine
170 kadar açılmaktadır.</p>
172 <note>Bu yönerge, Apache HTTP Sunucusunun evvelki sürümlerinde mevcut olan
173 <code>RewriteLog</code> gibi günlükleme modüllerinin yerini almıştır.
177 <section id="accesslog">
178 <title>Erişim Günlüğü</title>
182 <module>mod_log_config</module>
183 <module>mod_setenvif</module>
186 <directive module="mod_log_config">CustomLog</directive>
187 <directive module="mod_log_config">LogFormat</directive>
188 <directive module="mod_setenvif">SetEnvIf</directive>
192 <p>Sunucu erişim günlüğü sunucu tarafından işleme alınan tüm istekleri
193 kaydeder. Erişim günlüğünün yeri ve içeriği <directive
194 module="mod_log_config">CustomLog</directive> yönergesi ile belirlenir.
195 <directive module="mod_log_config">LogFormat</directive> yönergesi ile
196 günlük içeriğini kişiselleştirmek mümkündür. Bu bölümde sunucunun
197 bilgileri erişim günlüğüne kaydetmesi için nasıl yapılandırılacağından
200 <p>Şüphesiz, bilginin erişim günlüğünde saklanması günlük yönetiminde ilk
201 adımı oluşturur. Sonraki adım yararlı istatistikleri üretmek için bu
202 bilgiyi incelemektir. Günlük incelemesi bu belgenin kapsamına dahil
203 değildir ve aslında bu işlem sunucunun yaptığı işlerden biri değildir.
204 Bu konu ve günlük incelemesi yapan uygulamalar hakkında daha ayrıntılı
205 bilgi edinmek için <a
206 href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_Analysis/"
207 >dmoz.org</a> bakınız.</p>
209 <p>Apache httpd’nin çeşitli sürümlerinde erişim günlüklerini denetlemek
210 için kullanılan diğer modüller ve yönergeler arasında mod_log_referer,
211 mod_log_agent modülleri ve <code>TransferLog</code> yönergesi
212 sayılabilir. Artık, daha eski tüm diğer yönergelerin işlevselliklerini
213 bir araya toplayan <directive module="mod_log_config"
214 >CustomLog</directive> yönergesi kullanılmaktadır.</p>
216 <p>Erişim günlüğünün girdi biçemi kolayca isteğe göre
217 düzenlenebilmektedir. Biçemi belirtmekte kullanılan biçem dizgesi, C
218 tarzı printf(1) biçem dizgesini andırır. Sonraki bölümlerde bazı
219 örneklere yer verilmiştir. Biçem dizgesini oluşturan belirteçlerin tam
220 listesi için <module>mod_log_config</module> belgesinin <a
221 href="mod/mod_log_config.html#formats">Günlük Girdilerinin
222 Kişiselleştirilmesi</a> bölümüne bakınız.</p>
224 <section id="common">
225 <title>Ortak Günlük Biçemi (OGB)</title>
227 <p>Erişim günlüğü için sıklıkla kullanılan bir yapılandırma:</p>
229 <highlight language="config">
230 LogFormat "%h %l %u %t \"%r\" %>s %b" common
231 CustomLog logs/access_log common
234 <p>İlk satırda belli bir biçem dizgesi için <code>common</code> diye bir
235 <em>takma ad</em> tanımlanmaktadır. Biçem dizgesi, sunucuya hangi
236 belli bir bilgi parçalarını günlükleyeceğini söyleyen % imli biçem
237 belirteçlerinden oluşur. Biçem dizgesine ayrıca dizgesel sabitler de
238 yerleştirilebilir ve bunlar erişim günlüğüne oldukları gibi
239 kopyalanırlar. Biçem dizgesi içinde çift tırnak karakteri (") biçem
240 dizgesini vaktinden önce sonlandırmaması için ters bölü çizgisi ile
241 öncelenmelidir. Biçem dizgesi ayrıca, satır sonlarını belirtmek için
242 "<code>\n</code>" ve sekmeleri belirtmek için "<code>\t</code>"
243 denetim karakterlerini de içerebilir.</p>
245 <p><directive module="mod_log_config">CustomLog</directive> yönergesi
246 evvelce tanımlanmış bir <em>takma adı</em> kullanarak yeni bir günlük
247 dosyası tanımlar. Erişim günlüğünün dosya ismi bölü çizgisi ile
248 başlamadıkça dosya yolunun <directive module="core"
249 >ServerRoot</directive> değerine göreli olduğu varsayılır.</p>
251 <p>Yukarıdaki yapılandırma günlük dosyasına girdileri Ortak Günlük
252 Biçemi (Common Log Format) adı verilen standart biçemde yazar.
253 Bu standart biçem başka HTTP sunucuları tarafından da kullanılır ve
254 çoğu günlük inceleme yazılımı tarafından tanınır. Ortak Günlük
255 Biçeminde üretilen günlük girdileri şöyle görünür:</p>
258 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
259 /apache_pb.gif HTTP/1.0" 200 2326
262 <p>Bu günlük girdisini parça parça açıklayalım:</p>
265 <dt><code>127.0.0.1</code> (<code>%h</code>)</dt>
267 <dd>Bu, sunucuya istek yapan istemcinin (uzak konağın) IP adresidir.
268 Eğer <directive module="core">HostnameLookups</directive>
269 yönergesine <code>On</code> değeri atanmışsa sunucu bu IP adresi
270 için DNS sorgusu yapacak ve IP adresi yerine bulduğu konak ismini
271 yazmaya çalışacaktır. Bununla birlikte, bu işlem sunucuyu epeyce
272 yavaşlattığından önerilmemektedir. Konak isimlerini saptamak için en
273 iyisi günlük girdilerini <program>logresolve</program> gibi bir
274 günlük işlemcisinden geçirmektir. Burada raporlanan IP adresi
275 doğrudan istemcinin IP adresi olmayabilir. Eğer sunucu ile istemci
276 arasında bir vekil sunucu varsa bu IP adresi, vekil sunucunun IP
277 adresi olacaktır.</dd>
279 <dt><code>-</code> (<code>%l</code>)</dt>
281 <dd>Çıktıdaki bir "tire" imi istenen bilgi parçasının mevcut olmadığı
282 anlamına gelir. Bu durumda, mevcut olmayan bilgi istemci makine
283 üzerinde <code>identd</code> tarafından belirlenen istemcinin RFC
284 1413 kimliğidir. Bu bilgi oldukça güvenilmezdir ve sıkıca denetlenen
285 iç ağlar haricinde hemen hemen asla kullanılmamalıdır. Apache,
286 <directive module="mod_ident">IdentityCheck</directive> yönergesine
287 <code>On</code> değeri atanmış olmadıkça bu bilgiyi saptamaya
290 <dt><code>frank</code> (<code>%u</code>)</dt>
292 <dd>Bu, belge isteğinde bulunan kişinin HTTP kimlik doğrulamasıyla
293 saptanan kullanıcı kimliğidir. Bu değer CGI betiklerine
294 <code>REMOTE_USER</code> ortam değişkeni ile sağlanır. Eğer istek
295 için durum kodu 401 ise (aşağıya bakınız) henüz kullanıcının kimliği
296 doğrulanmamış olacağından bu değere güvenilmemelidir. Eğer belge
297 parola korumalı değilse günlüğün bu kısmı da yukarıdaki gibi
298 "<code>-</code>" olacaktır.</dd>
300 <dt><code>[10/Oct/2000:13:55:36 -0700]</code>
301 (<code>%t</code>)</dt>
303 <dd>İsteğin alındığı tarih ve saat. Biçemi şöyledir:
306 <code>[gün/ay/yıl:saat:dakika:saniye dilim]<br />
311 dakika = 2 hane<br />
312 saniye = 2 hane<br />
313 dilim = (`+' | `-') 4 hane</code>
315 <p>Günlük biçem dizgesinde zaman gösterim biçemini
316 <code>%{<em>biçem</em>}t</code> şeklinde belirtmek de mümkündür.
317 Buradaki <code><em>biçem</em></code> dizgesi, stardart C
318 kütüphanesindeki <code>strftime(3)</code> işlevi için tanımlanmış
319 biçem belirteçleriyle veya desteklenen özel belirteçlerle
320 oluşturulabilir. Ayrıntılı bilgi için <module>mod_log_config</module>
321 <a href="mod/mod_log_config.html#formats">biçem dizgelerine</a>
325 <dt><code>"GET /apache_pb.gif HTTP/1.0"</code>
326 (<code>\"%r\"</code>)</dt>
328 <dd>İstemciden alınan istek satırının çift tırnaklar arasında
329 gösterilmesi istenmiştir. İstek satırı en yararlı bilgi parçalarını
330 içerir. Birincisi, istemci tarafından kullanılan yöntem
331 <code>GET</code>’miş. İkinci olarak istemci
332 <code>/apache_pb.gif</code> dosyasını istemiş ve üçüncü olarak
333 istemci <code>HTTP/1.0</code> protokolünü kullanmış. İstek satırının
334 bazı parçalarını bağımsız olarak da günlüklemek mümkündür. Örneğin,
335 "<code>%m %U%q %H</code>" dizgesi, yöntem, yol, sorgu dizgesi ve
336 protokolü kaydedecektir; bu dizge "<code>%r</code>" biçem
337 belirtecinin tek başına yaptığı işi yapar.</dd>
339 <dt><code>200</code> (<code>%>s</code>)</dt>
341 <dd>Bu, sunucunun istemciye gönderdiği durum kodudur. İsteğin
342 başarıyla yerine getirilip getirilmediğini gösterdiği için bu bilgi
343 çok değerlidir. Durum kodu 2 ile başlıyorsa istek başarıyla yerine
344 getirilmiştir, 3 ile başlıyorsa yönlendirilmiştir, 4 ile başlıyorsa
345 istemci tarafında bir hata oluşmuştur, 5 ile başlıyorsa sunucuda bir
346 hata oluşmuştur. Olası hata kodlarının tam listesi <a
347 href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC2616 Hiper
348 Metin Aktarım Protokolü</a>nün 10. bölümünde bulunabilir.</dd>
350 <dt><code>2326</code> (<code>%b</code>)</dt>
352 <dd>Son parça istemciye döndürülen nesnenin yanıt başlığı hariç
353 uzunluğudur. Eğer istemciye bir içerik döndürülmemişse bu değer
354 "<code>-</code>" olacaktır. Bunun yerine günlüğe "<code>0</code>"
355 yazdırmak için <code>%B</code> belirtecini kullanınız.</dd>
359 <section id="combined">
360 <title>Birleşik Günlük Biçemi</title>
362 <p>Sıklıkla kullanılan diğer bir biçem dizgesi Birleşik Günlük Biçemi
363 (Combined Log Format) olup şöyle kullanılabilir:</p>
365 <highlight language="config">
366 LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-agent}i\"" combined
367 CustomLog log/access_log combined
370 <p>Bu biçem ilaveten 2 alan içermesi dışında Ortak Günlük Biçemi ile
371 aynıdır. İlave alanların ikisi de <code>%{<em>başlık</em>}i</code>
372 biçeminde olup buradaki <code><em>başlık</em></code>, HTTP isteğindeki
373 başlık alanlarından biridir. Bu biçemin kullanıldığı bir erişim
374 günlüğü girdisi şöyle olurdu:</p>
377 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET
378 /apache_pb.gif HTTP/1.0" 200 2326
379 "http://www.example.com/start.html" "Mozilla/4.08 [en]
386 <dt><code>"http://www.example.com/start.html"</code>
387 (<code>\"%{Referer}i\"</code>)</dt>
389 <dd>HTTP istek başlığı "Referer". İstemcinin raporladığı isteğin
390 kaynaklandığı URI. (Bu isteğin yapılmasını sağlayan bağlantıyı
391 içeren URL veya istek bir sayfanın bileşenleri ile ilgiliyse istenen
392 sayfanın URL’si olabilir.)</dd>
394 <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code>
395 (<code>\"%{User-agent}i\"</code>)</dt>
397 <dd>Tarayıcı kimliğini içeren HTTP istek başlığı. Bu istemcinin
398 tarayıcısının raporladığı kendi tanıtım bilgisidir.</dd>
402 <section id="multiple">
403 <title>Çok Sayıda Erişim Günlüğü</title>
405 <p>Yapılandırma dosyasında çok sayıda <directive
406 module="mod_log_config">CustomLog</directive> yönergesi kullanarak çok
407 sayıda erişim günlüğü kolayca oluşturulabilir. Örneğin aşağıdaki
408 yönergelerle 3 tane erişim günlüğü oluşturulacaktır. İlki temel OGB
409 bilgisini içerirken diğer ikisi isteğin kaynaklandığı yeri ve tarayıcı
410 kimliğini içerir. Son iki <directive module="mod_log_config"
411 >CustomLog</directive> satırı ayrıca, <code>ReferLog</code> ve
412 <code>AgentLog</code> yönergelerinin etkilerinin nasıl taklit
413 edileceğini de göstermektedir.</p>
415 <highlight language="config">
416 LogFormat "%h %l %u %t \"%r\" %>s %b" common
417 CustomLog logs/access_log common
418 CustomLog logs/referer_log "%{Referer}i -> %U"
419 CustomLog logs/agent_log "%{User-agent}i"
422 <p>Bu örnek ayrıca, <directive module="mod_log_config"
423 >LogFormat</directive> yönergesi ile bir takma ad tanımlamanın şart
424 olmadığını da göstermektedir. Günlük biçemi doğrudan <directive
425 module="mod_log_config">CustomLog</directive> yönergesinde
429 <section id="conditional">
430 <title>Şarta Bağlı Günlükler</title>
432 <p>Bazı durumlarda istemcinin yaptığı isteğe bağlı olarak erişim
433 günlüğünde belli girdilerin dışlanması gerekebilir. Bu, <a
434 href="env.html" >ortam değişkenleri</a> sayesinde kolayca yerine
435 getirilebilir. Önce isteğin belli koşulları sağladığını belirten bir
436 ortam değişkeni ataması yapılır. Bu işlem <directive
437 module="mod_setenvif">SetEnvIf</directive> yönergesi ile yapılır.
438 Sonra da, ortam değişkenine bağlı olarak isteklerin günlüğe dahil
439 edilip edilmeyeceği <directive
440 module="mod_log_config">CustomLog</directive> yönergesinin
441 <code>env=</code> deyimi kullanılarak belirtilir. Bazı örnekler:</p>
443 <highlight language="config">
444 # yerel konaktan kaynaklanan istekleri imleyelim
445 SetEnvIf Remote_Addr "127\.0\.0\.1" kaydetme
446 # robots.txt dosyası isteklerini imleyelim
447 SetEnvIf Request_URI "^/robots\.txt$" kaydetme
448 # Kalanları günlüğe kaydedelim
449 CustomLog logs/access_log common env=!kaydetme
452 <p>Başka bir örnek olarak, Türkçe belge isteklerini bir dosyaya diğer
453 dillerdeki istekleri başka bir dosyaya kaydedelim.</p>
455 <highlight language="config">
456 SetEnvIf Accept-Language "tr" turkce
457 CustomLog logs/turkce_log common env=turkce
458 CustomLog logs/diger_diller_log common env=!turkce
461 <p>Bir arabellekleme senaryosuna arabelleğin verimli kullanılıp
462 kullanılmadığını bilmek isteyelim. Bu basitçe şöyle yapılabilir:</p>
464 <highlight language="config">
466 LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache
467 CustomLog logs/access_log common-cache
470 <p><module>mod_cache</module> önce <module>mod_env</module> modülünü
471 çalıştıracak ve başarılı olunduğu takdirde içeriği onsuz teslim
472 edecektir. Bu durumda arabellek kaybı <code>1</code> olarak
473 günlüklenirken arabellek sunumu <code>-</code> olarak
474 günlüklenecektir.</p>
476 <p><code>env=</code> sözdizimine ek olarak, <directive
477 module="mod_log_config">LogFormat</directive> HTTP yanıt kodudaki koşul
478 değerlerini günlüklemeyi de destekler:</p>
480 <highlight language="config">
481 LogFormat "%400,501{User-agent}i" browserlog
482 LogFormat "%!200,304,302{Referer}i" refererlog
485 <p>Bu örnekte, HTTP durum kodu 400 veya 501 ise <code>User-agent</code>
486 başlığı günlüklenecektir. Aksi takdirde, günlüğe bir "-" yazılacaktır.
487 Benzer şekilde ikinci örnekte, HTTP durum kodu 200, 204 veya 302
488 <strong>değilse</strong> (durum kodlarının öncesindeki "!" imine
489 dikkat) <code>Referer</code> başlığı günlüklenecektir.</p>
491 <p>Koşulaa bağlı günlük kaydının çok esnek ve güçlü olabileceğini
492 göstermiş olsak da günlük içeriğini denetlemenin tek yolu bu değildir.
493 Günlük dosyaları sunucu etkinliğini eksiksiz olarak kaydedebildikleri
494 takdirde daha yararlı olurlar. Günlük dosyalarını sonradan işleme tabi
495 tutarak istenmeyen girdileri kaldırılmış bir kopya almak hem kolay hem
496 de daha yararlıdır.</p>
500 <section id="rotation">
501 <title>Günlük Çevrimi</title>
503 <p>Yükü ağır sunucularda günlük dosyalarına kaydedilen bilginin miktarı
504 çok büyük boyutlara ulaşabilir. 10.000 istek içeren bir erişim günlüğü
505 yaklaşık 1MB yer kaplar. Etkin günlük dosyasını belirli aralıklarla
506 değiştirmek veya silmek gerekebilir. Apache httpd çalışırken dosyayı sürekli
507 açık tuttuğu ve yazdığı için bu işlem sunucu çalışırken yapılamaz. Bu
508 bakımdan, günlük dosyası değiştirildikten veya silindikten sonra yeni
509 dosyanın açılması için <a href="stopping.html">sunucunun yeniden
510 başlatılması</a> gerekir.</p>
512 <p><a href="stopping.html#graceful">Nazikçe yeniden başlatmak</a>
513 suretiyle sunucunun, mevcut ve bekleyen bağlantıları kaybetmeden yeni
514 günlük dosyalarını açması sağlanabilir. Bununla birlikte, bu işlem
515 sırasında sunucunun eski isteklere sunumu bitirene kadar eski günlük
516 dosyalarına yazmaya devam edebilmesi gerekir. Bu bakımdan, yeniden
517 başlatmanın ardından eski günlük dosyaları üzerinde bir işlem yapmadan
518 önce biraz beklemek gerekir. Günlük dosyalarını döndürürken kullanılan
519 senaryolarda genellikle eski günlük dosyaları yer kazanmak için
523 mv access_log access_log.old<br />
524 mv error_log error_log.old<br />
525 apachectl graceful<br />
527 gzip access_log.old error_log.old
530 <p>Günlük çevrimi yapmanın başka bir yolu da sonraki bölümde açıklandığı
531 gibi <a href="#piped">borulu günlükler</a> kullanmaktır.</p>
535 <title>Borulu Günlükler</title>
537 <p>Apache httpd hata ve erişim günlüklerini doğrudan bir dosyaya yazmak
538 yerine bir boru üzerinden başka bir sürece yazabilir. Bu yetenek ana
539 sunucuya herhangi bir kod eklemeksizin günlükleme esnekliğini şaşırtıcı
540 derecede arttırır. Günlükler boruya yazılmak istenirse dosya ismini boru
541 karakteriyle ("<code>|</code>") değiştirip ardına günlük girdilerini
542 standart girdisinden kabul edecek programın ismini eklemek yeterlidir.
543 Apache httpd başlatıldığı zaman borulu günlük işlemini de
544 başlatacaktır. Eğer sunucu çalışırken günlükleri kabul eden süreç
545 çökerse Apache httpd bu programı yeniden başlatır. (Bu son özelliği
546 sebebiyle bu tekniğe “güvenilir borulu günlükleme” adını veriyoruz.)</p>
548 <p>Borulu günlük süreçleri ana Apache httpd süreci tarafından başlatılır
549 ve bu süreçler ana Apache httpd sürecinin kullanıcı kimliğini miras
550 alırlar. Yani borulu günlükleme programları aslında root tarafından
551 çalıştırılmış gibi olur. Bu bakımdan, bu programları basit ve güvenilir
552 kılmak çok önemlidir.</p>
554 <p>Borulu günlüklerin önemli kullanım alanlarından biri de sunucuyu
555 yeniden başlatmak gerekmeksizin günlük çevrimini mümkün kılmaktır.
556 Apache HTTP sunucusu bu amaçla kullanılmak üzere
557 <program>rotatelogs</program> diye bir program içerir. Örneğin,
558 günlükleri 24 saatte bir döndürmek isterseniz bunu şöyle
561 <highlight language="config">
562 CustomLog "|/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
565 <p>Borunun diğer ucundaki süreci başlatacak komutun tırnak içine
566 alındığına dikkat ediniz. Bu örnekler erişim günlüğü için verilmişse de
567 aynı teknik hata günlüğü için de kullanılabilir.</p>
569 <p>Hariçten bir uygulama olarak <a
570 href="http://www.cronolog.org/">cronolog</a> isminde buna benzer ancak
571 çok daha esnek bir program daha vardır.</p>
573 <p>Borulu günlükler de şarta bağlı günlükleme kadar güçlü olmakla beraber
574 çevrimdışı ardıl işlemler gibi daha basit çözümler için
575 kullanılmamalıdır.</p>
577 <p>Öntanımlı olarak borulu günlük süreci bir kabuk kullanmadan
578 çalıştırılır. Kabuk kullanarak (genelde <code>/bin/sh -c</code> ile)
579 yapılmak istenirse "<code>|</code>" yerine "<code>|$</code>"
582 <highlight language="config">
583 # Kabuk kullanarak "rotatelogs" çalıştırmak
584 CustomLog "|$/usr/local/apache/bin/rotatelogs /var/log/access_log 86400" common
587 <p>Bu, Apache 2.2 için öntanımlı davranıştı. Kabuk özelliklerine bağlı
588 olarak, yeniden başlatma sırasındaki sinyal işleme sorunları ve günlük
589 borulama uygulamasının yaşam süresi için ek bir kabuk süreci ile
590 sonuçlanabilir. Apache 2.2 ile uyumluluk açısından "<code>||</code>"
591 gösterimi de desteklenmekte olup "<code>|</code>" kullanımına
594 <note><title>Windows'ta yığın alanı</title>
595 <p>Windows'ta çok sayıda borulu günlükleme süreci çalışırken ve özellikle
596 HTTPD bir hizmet olarak çalışıyorsa sorunlar baş gösterebilir. Bunun
597 başlıca sebebi masaüstü yığın alanının (heap) dışına taşılmasıdır. Her
598 hizmete ayrılan masüstü yığın alanı, kayıt defterindeki
599 HKEY_LOCAL_MACHINE\System\CurrentControlSet\Control\SessionManager\SubSystems\Windows
600 kaydındaki üçüncü değiştirge olan <code>SharedSection</code>
601 değeridir. <strong>Bu değeri değiştirirken çok dikkatli olun</strong>;
602 bu, Windows kayıt defterini değiştirirken verilen normal
603 uyarılardandır, fakat eğer bu değer çok yüksek olursa masaüstü yığın
604 alanının tükenebileceği dikkate alınmalıdır.</p>
608 <section id="virtualhost">
609 <title>Sanal Konaklar</title>
611 <p>Bir sunucu çok sayıda <a href="vhosts/">sanal konak</a> ile hizmet
612 sunarken bunların günlük kayıtları için çeşitli seçenekler mevcuttur.
613 İlk seçenekte, sanki sunucu tek bir konakla hizmet sunuyormuş gibi
614 günlük kaydı yapılır. Günlükleme yönergelerini <directive module="core"
615 type="section">VirtualHost</directive> bölümlerinin dışına, ana sunucu
616 bağlamına yerleştirerek tüm isteklerin aynı erişim ve hata günlüğüne
617 yazılmasını sağlamak olasıdır. Bu teknik, tek tek sanal konaklar için
618 kolayca istatistik toplamaya izin vermez.</p>
620 <p>Eğer <directive module="mod_log_config">CustomLog</directive>
621 veya <directive module="core">ErrorLog</directive> yönergesi bir
622 <directive module="core" type="section">VirtualHost</directive> bölümüne
623 yerleştirilirse bu sanal konağa bütün erişimler veya hatalar belirtilen
624 dosyaya günlüklenecektir. Böyle günlükleme yönergeleri içermeyen sanal
625 konakların günlükleri hala ana sunucunun hata ve erişim günlüklerine
626 yazılmaya devam edecektir. Bu teknik az sayıda sanal konak barındıran
627 sunucular için çok kullanışlıdır. Fakat sanal konak sayısı çok fazlaysa
628 bu teknikle günlük dosyalarını yönetmek çok karmaşık bir hal alabilir.
629 Ayrıca, <a href="vhosts/fd-limits.html">yetersiz dosya tanıtıcısı</a>
630 sorunlarıyla çok sık karşılaşılabilir.</p>
632 <p>Erişim günlükleri için çok az bir fedakarlıkla çok iyi bir çözüm vardır.
633 Günlük biçemine sanal konaklarla ilgili bilgi eklemek suretiyle tüm
634 konakların aynı günlük dosyasını kullanmaları olasıdır. Böylece günlük
635 dosyası sonradan her sanal konak için ayrı bir dosya oluşturmak üzere
636 ayrıştırılabilir. Örneğin, bu işlem için şu yönergeler kullanılıyor
639 <highlight language="config">
640 LogFormat "%v %l %u %t \"%r\" %>s %b" ortaksankon
641 CustomLog logs/access_log ortaksankon
644 <p><code>%v</code> belirteci isteği sunan sanal konağın ismini günlüğe
645 yazmak için kullanılır. Daha sonra <a
646 href="programs/split-logfile.html">split-logfile</a> gibi bir program
647 kullanarak, bu dosyadan her sanal konak için ayrı birer dosya elde
652 <title>Diğer Günlük Dosyaları</title>
656 <module>mod_logio</module>
657 <module>mod_log_config</module>
658 <module>mod_log_forensic</module>
659 <module>mod_cgi</module>
663 <directive module="mod_log_config">LogFormat</directive>
664 <directive module="mod_log_config">BufferedLogs</directive>
665 <directive module="mod_log_forensic">ForensicLog</directive>
666 <directive module="mpm_common">PidFile</directive>
667 <directive module="mod_cgi">ScriptLog</directive>
668 <directive module="mod_cgi">ScriptLogBuffer</directive>
669 <directive module="mod_cgi">ScriptLogLength</directive>
674 <title>Gönderilen ve alınan bayt sayısının günlüklenmesi</title>
676 <p><module>mod_logio</module> modülü <directive
677 module="mod_log_config">LogFormat</directive> yönergesinde kullanılan
678 biçem belirteçlerine alınan ve gönderilen bayt sayıları için iki
679 belirteç (%I ve %O) ekler.</p>
683 <title>Adli Günlük</title>
685 <p><module>mod_log_forensic</module> modülü istemci isteklerinin kanıt
686 olarak kullanılmak amacıyla günlüklenmesini sağlar. Günlükleme her
687 istek için isteğe hizmet sunmadan önce ve sonra olmak üzere iki defa
688 yapılır. Böylece günlük dosyasında başarılı her istek için iki satır
689 bulunur. Adli günlükleme çok sıkı kurallara tabi olup
690 kişiselleştirilemez. Güvenlik ve hata ayıklama aracı olarak yararlı
694 <section id="pidfile">
695 <title>PID Dosyası</title>
697 <p>Apache httpd başlatıldığında, ana httpd sürecinin kimliği (PID)
698 <code>logs/httpd.pid</code> dosyasına kaydedilir. Bu dosyanın ismi
699 <directive module="mpm_common">PidFile</directive> yönergesi ile
700 değiştirilebilir. Bu süreç kimliği sistem yöneticisi tarafından ana
701 sürece sinyal göndererek artalan sürecini sonlandırmak veya yeniden
702 başlatmak için kullanılır. Windows üzerinde bu işlem için
703 <code>-k</code> komut satırı seçeneği kullanılır. Bu konuda daha
704 ayrıntılı bilgi edinmek için <a href="stopping.html">Durdurma ve
705 Yeniden Başlatma</a> belgesine bakınız.</p>
708 <section id="scriptlog">
709 <title>Betik Günlüğü</title>
711 <p><directive module="mod_cgi">ScriptLog</directive> yönergesi CGI
712 betiklerinin girdi ve çıktılarını kaydetmenizi mümkün kılmak suretiyle
713 hata ayıklamaya yardımcı olur. Bu sadece deneysel amaçla kullanılmalı,
714 asıl sunucuya uygulanmamalıdır. <a href="mod/mod_cgi.html">mod_cgi</a>
715 belgesinde daha fazla bilgi bulunabilir.</p>