| <?xml version="1.0" encoding="UTF-8" ?> | |
| <!DOCTYPE manualpage SYSTEM "./style/manualpage.dtd"> | |
| <?xml-stylesheet type="text/xsl" href="./style/manual.tr.xsl"?> | |
| <!-- English Revision: 1300924:1935747 (outdated) --> | |
| <!-- ===================================================== | |
| Translated by: Nilgün Belma Bugüner <nilgun belgeler.org> | |
| Reviewed by: Orhan Berent <berent belgeler.org> | |
| ========================================================== --> | |
| <!-- | |
| Licensed to the Apache Software Foundation (ASF) under one or more | |
| contributor license agreements. See the NOTICE file distributed with | |
| this work for additional information regarding copyright ownership. | |
| The ASF licenses this file to You under the Apache License, Version 2.0 | |
| (the "License"); you may not use this file except in compliance with | |
| the License. You may obtain a copy of the License at | |
| http://www.apache.org/licenses/LICENSE-2.0 | |
| Unless required by applicable law or agreed to in writing, software | |
| distributed under the License is distributed on an "AS IS" BASIS, | |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
| See the License for the specific language governing permissions and | |
| limitations under the License. | |
| --> | |
| <manualpage metafile="logs.xml.meta"> | |
| <title>Günlük Dosyaları</title> | |
| <summary> | |
| <p>Bir HTTP sunucusunu verimli şekilde yönetebilmek için oluşabilecek | |
| sorunlardan başka sunucunun başarımı ve etkinliği hakkında da bazı geri | |
| bildirimler almak gerekir. Apache HTTP Sunucusu çok kapsamlı ve esnek | |
| bir günlükleme yeteneğine sahiptir. Bu belgede sunucunun günlükleme | |
| yeteneğini nasıl yapılandıracağınızdan ve günlük kayıtlarını nasıl | |
| yorumlayacağınızdan bahsedilecektir.</p> | |
| </summary> | |
| <section id="overview"> | |
| <title>Giriş</title> | |
| <related> | |
| <modulelist> | |
| <module>mod_log_config</module> | |
| <module>mod_log_forensic</module> | |
| <module>mod_logio</module> | |
| <module>mod_cgi</module> | |
| </modulelist> | |
| </related> | |
| <p>Apache HTTP Sunucusu, isteğin ilk alınışından itibaren, URL eşleme | |
| işlemleri, bağlantının son çözümlemesi ve bu işlemler sırasına ortaya çıkan | |
| hatalar da dahil olmak üzere sunucunuzda meydana gelen herşeyi günlüklemek | |
| için çok çeşitli mekanizmalar içerir. Buna ek olarak, günlükleme | |
| yetenekleri sağlayan üçüncü parti modüller de kullanılabilir veya mevcut | |
| günlük dosyalarına girdiler enjekte edilebilir. Ayrıca, CGI programları, | |
| PHP betikleri ve benzerleri sunucu hata günlüğüne kendi iletilerini | |
| gönderebilirler.</p> | |
| <p>Bu belgede Apache HTTP Sunucusunun standart parçası olan günlükleme | |
| modülleri hakkında bilgi verilecektir.</p> | |
| </section> | |
| <section id="security"> | |
| <title>Güvenlik Uyarısı</title> | |
| <p>Apache httpd'nin günlük dosyalarını yazdığı dizine yazabilen birinin sunucuyu | |
| başlatan kullanıcı kimliğine (bu genellikle root olur) erişim | |
| kazanabileceğine hemen hemen kesin gözüyle bakılabilir. Sonuçlarının | |
| neler olacağını kestiremiyorsanız günlüklerin yazıldığı dizinde <em>hiç | |
| kimseye</em> yazma erişimi vermeyin; ayrıntılı bilgi için <a | |
| href="misc/security_tips.html">güvenlik ipuçları</a> belgesine | |
| bakınız.</p> | |
| <p>Buna ilaveten, günlük dosyaları istemci tarafından sağlanmış bilgiler | |
| de içerebilir. Bu nedenle, kötü niyetli istemcilerin günlük dosyalarına | |
| denetim karakterleri girmeleri olasılığına karşı ham günlükler ele | |
| alınırken dikkatli olunmalıdır.</p> | |
| </section> | |
| <section id="errorlog"> | |
| <title>Hata Günlüğü</title> | |
| <related> | |
| <modulelist> | |
| <module>core</module> | |
| </modulelist> | |
| <directivelist> | |
| <directive module="core">ErrorLog</directive> | |
| <directive module="core">ErrorLogFormat</directive> | |
| <directive module="core">LogLevel</directive> | |
| </directivelist> | |
| </related> | |
| <p>İsmi ve yeri <directive module="core">ErrorLog</directive> yönergesi | |
| ile belirtilen sunucu hata günlüğü, en önemli günlük dosyasıdır. Apache | |
| httpd tarafından istekler işlenirken saptanan hatalar ve tanı bilgileri | |
| bu dosyaya gönderilir. Sunucuyu başlatırken veya sunucu çalışırken bir | |
| sorunla karşılaşıldığında, neyin yanlış gittiğini öğrenmek için | |
| bakılacak ilk yer burasıdır. Günlük kaydı çoğunlukla sorunun nasıl | |
| düzeltileceği ile ilgili ayrıntıları da içerir.</p> | |
| <p>Hata günlüğü normal olarak bir dosyaya yazılır (genellikle, dosyanın | |
| ismi Unix sistemlerinde <code>error_log</code>, OS/2 ve Windows'ta ise | |
| <code>error.log</code>'dur). Ayrıca, Unix sistemlerinde sunucunun | |
| hataları <code>syslog</code>'a veya <a href="#piped">borulamak suretiyle | |
| bir programa</a> aktarması da mümkündür.</p> | |
| <p>Hata günlüğünün biçemi <directive module="core" | |
| >ErrorLogFormat</directive> yönergesi ile belirlenir. Bu yönergeyi | |
| kullanarak günlüklenen değerleri özelleştirebilirsiniz. Bir biçem | |
| belirtmezseniz öntanımlı biçem kullanılır. Örnek tipik bir hata iletisi | |
| içermektedir:</p> | |
| <example> | |
| [Fri Sep 09 10:42:29.902022 2011] [core:error] [pid 35708:tid 4328636416] | |
| [client 72.15.99.187] Dosya yok: /usr/local/apache2/htdocs/favicon.ico | |
| </example> | |
| <p>Günlük girdisinin ilk öğesi iletinin yazıldığı tarih ve saatten oluşur. | |
| İkincisi iletiyi üreten modülün ismi (bu durumda: core) ile raporlanan | |
| bilginin önem derecesini belirtir. Bunu varsa sürecin kimliği ve yine | |
| varsa evre kimliği izler. Sonraki öğe hatanın üretilmesine sebep olan | |
| istemcinin IP adresini içerir. Kalanı iletinin kendisidir (duruma | |
| bakılırsa bir dosyaya yapılan istek yerine getirilememiş).</p> | |
| <p>Hata günlüğünde görünebilecek ileti çeşitliliği oldukça fazladır. Çoğu | |
| yukarıdaki örneğin benzeridir. Hata günlüğü ayrıca, CGI betiklerinin | |
| hata ayıklama çıktılarını da içerir. Bir CGI betiği tarafından standart | |
| hataya (<code>stderr</code>) yazılan her türlü bilgi doğrudan hata | |
| günlüğüne kopyalanır.</p> | |
| <p>Hata günlüğüne ve erişim günlüğüne <code>%L</code> dizgeciği konularak | |
| erişim günlüğündeki girdi ile hata günlüğündeki girdiyi ilişkilendirecek | |
| bir günlük girdisi kimliği oluşturulabilir. | |
| <module>mod_unique_id</module> yüklüyse günlük girdisi kimliği olarak | |
| onun eşsiz istek kimliği de kullanılır.</p> | |
| <p>Sunucuyu denerken olası sorunlara karşı hata günlüğünü sürekli | |
| izlemelisiniz. Unix sistemlerinde bunu şöyle bir komutla | |
| sağlayabilirsiniz:</p> | |
| <example> | |
| tail -f error_log | |
| </example> | |
| </section> | |
| <section id="permodule"> | |
| <title>Modüllere göre günlükleme</title> | |
| <p><directive module="core">LogLevel</directive> yönergesi, günlük | |
| iletisinin üretilmesine sebep olan modüle bağlı bir önem seviyesi | |
| belirleyebilmenizi sağlar. Bu yolla sorun yaşadığınız modülle ilgili | |
| günlük musluklarını sonuna kadar açabiliri ek olarak ilgilendiğiniz diğer | |
| modüllerle ilgili ayrıntıları da edinebilirsiniz. Özellikle | |
| <module>mod_proxy</module> veya <module>mod_rewrite</module> gibi | |
| modüllerde yapılmak isteneni denerken neler olup bittiğini ayrıntılarıyla | |
| bilmek istediğiniz durumlarda kullanışlıdır.</p> | |
| <p>Bunu <directive>LogLevel</directive> yönergesinde modülün ismini | |
| belirterek yapabilirsiniz:</p> | |
| <example> | |
| LogLevel info rewrite:trace5 | |
| </example> | |
| <p>Bu satırla ana <directive>LogLevel</directive> info'ya ayarlanırken | |
| <module>mod_rewrite</module> için musluk <code>trace5</code> seviyesine | |
| kadar açılmaktadır.</p> | |
| <note>Bu yönerge, Apache HTTP Sunucusunun evvelki sürümlerinde mevcut olan | |
| <code>RewriteLog</code> gibi günlükleme modüllerinin yerini almıştır. | |
| </note> | |
| </section> | |
| <section id="accesslog"> | |
| <title>Erişim Günlüğü</title> | |
| <related> | |
| <modulelist> | |
| <module>mod_log_config</module> | |
| <module>mod_setenvif</module> | |
| </modulelist> | |
| <directivelist> | |
| <directive module="mod_log_config">CustomLog</directive> | |
| <directive module="mod_log_config">LogFormat</directive> | |
| <directive module="mod_setenvif">SetEnvIf</directive> | |
| </directivelist> | |
| </related> | |
| <p>Sunucu erişim günlüğü sunucu tarafından işleme alınan tüm istekleri | |
| kaydeder. Erişim günlüğünün yeri ve içeriği <directive | |
| module="mod_log_config">CustomLog</directive> yönergesi ile belirlenir. | |
| <directive module="mod_log_config">LogFormat</directive> yönergesi ile | |
| günlük içeriğini kişiselleştirmek mümkündür. Bu bölümde sunucunun | |
| bilgileri erişim günlüğüne kaydetmesi için nasıl yapılandırılacağından | |
| bahsedilecektir.</p> | |
| <p>Şüphesiz, bilginin erişim günlüğünde saklanması günlük yönetiminde ilk | |
| adımı oluşturur. Sonraki adım yararlı istatistikleri üretmek için bu | |
| bilgiyi incelemektir. Günlük incelemesi bu belgenin kapsamına dahil | |
| değildir ve aslında bu işlem sunucunun yaptığı işlerden biri değildir. | |
| Bu konu ve günlük incelemesi yapan uygulamalar hakkında daha ayrıntılı | |
| bilgi edinmek için <a | |
| href="http://dmoz.org/Computers/Software/Internet/Site_Management/Log_analysis/" | |
| >dmoz.org</a> | |
| bakınız.</p> | |
| <p>Apache httpd'nin çeşitli sürümlerinde erişim günlüklerini denetlemek | |
| için kullanılan diğer modüller ve yönergeler arasında mod_log_referer, | |
| mod_log_agent modülleri ve <code>TransferLog</code> yönergesi | |
| sayılabilir. Artık, daha eski tüm diğer yönergelerin işlevselliklerini | |
| bir araya toplayan <directive module="mod_log_config" | |
| >CustomLog</directive> yönergesi kullanılmaktadır.</p> | |
| <p>Erişim günlüğünün girdi biçemi kolayca isteğe göre | |
| düzenlenebilmektedir. Biçemi belirtmekte kullanılan biçem dizgesi, C | |
| tarzı printf(1) biçem dizgesini andırır. Sonraki bölümlerde bazı | |
| örneklere yer verilmiştir. Biçem dizgesini oluşturan belirteçlerin tam | |
| listesi için <module>mod_log_config</module> belgesinin <a | |
| href="mod/mod_log_config.html#formats">Günlük Girdilerinin | |
| Kişiselleştirilmesi</a> bölümüne bakınız.</p> | |
| <section id="common"> | |
| <title>Ortak Günlük Biçemi (OGB)</title> | |
| <p>Erişim günlüğü için sıklıkla kullanılan bir yapılandırma:</p> | |
| <example> | |
| LogFormat "%h %l %u %t \"%r\" %>s %b" common<br /> | |
| CustomLog logs/access_log common | |
| </example> | |
| <p>İlk satırda belli bir biçem dizgesi için <code>common</code> diye bir | |
| <em>takma ad</em> tanımlanmaktadır. Biçem dizgesi, sunucuya hangi | |
| belli bir bilgi parçalarını günlükleyeceğini söyleyen % imli biçem | |
| belirteçlerinden oluşur. Biçem dizgesine ayrıca dizgesel sabitler de | |
| yerleştirilebilir ve bunlar erişim günlüğüne oldukları gibi | |
| kopyalanırlar. Biçem dizgesi içinde çift tırnak karakteri (") biçem | |
| dizgesini vaktinden önce sonlandırmaması için ters bölü çizgisi ile | |
| öncelenmelidir. Biçem dizgesi ayrıca, satır sonlarını belirtmek için | |
| "<code>\n</code>" ve sekmeleri belirtmek için "<code>\t</code>" | |
| denetim karakterlerini de içerebilir.</p> | |
| <p><directive module="mod_log_config">CustomLog</directive> yönergesi | |
| evvelce tanımlanmış bir <em>takma adı</em> kullanarak yeni bir günlük | |
| dosyası tanımlar. Erişim günlüğünün dosya ismi bölü çizgisi ile | |
| başlamadıkça dosya yolunun <directive module="core" | |
| >ServerRoot</directive> değerine göreli olduğu varsayılır.</p> | |
| <p>Yukarıdaki yapılandırma günlük dosyasına girdileri Ortak Günlük | |
| Biçemi (Common Log Format) adı verilen standart biçemde yazar. | |
| Bu standart biçem başka HTTP sunucuları tarafından da kullanılır ve | |
| çoğu günlük inceleme yazılımı tarafından tanınır. Ortak Günlük | |
| Biçeminde üretilen günlük girdileri şöyle görünür:</p> | |
| <example> | |
| 127.0.0.1 - frank [10/Oct/2000:13:55:36 -0700] "GET | |
| /apache_pb.gif HTTP/1.0" 200 2326 | |
| </example> | |
| <p>Bu günlük girdisini parça parça açıklayalım:</p> | |
| <dl> | |
| <dt><code>127.0.0.1</code> (<code>%h</code>)</dt> | |
| <dd>Bu, sunucuya istek yapan istemcinin (uzak konağın) IP adresidir. | |
| Eğer <directive module="core">HostnameLookups</directive> | |
| yönergesine <code>On</code> değeri atanmışsa sunucu bu IP adresi | |
| için DNS sorgusu yapacak ve IP adresi yerine bulduğu konak ismini | |
| yazmaya çalışacaktır. Bununla birlikte, bu işlem sunucuyu epeyce | |
| yavaşlattığından önerilmemektedir. Konak isimlerini saptamak için en | |
| iyisi günlük girdilerini <program>logresolve</program> gibi bir | |
| günlük işlemcisinden geçirmektir. Burada raporlanan IP adresi | |
| doğrudan istemcinin IP adresi olmayabilir. Eğer sunucu ile istemci | |
| arasında bir vekil sunucu varsa bu IP adresi, vekil sunucunun IP | |
| adresi olacaktır.</dd> | |
| <dt><code>-</code> (<code>%l</code>)</dt> | |
| <dd>Çıktıdaki bir "tire" imi istenen bilgi parçasının mevcut olmadığı | |
| anlamına gelir. Bu durumda, mevcut olmayan bilgi istemci makine | |
| üzerinde <code>identd</code> tarafından belirlenen istemcinin RFC | |
| 1413 kimliğidir. Bu bilgi oldukça güvenilmezdir ve sıkıca denetlenen | |
| iç ağlar haricinde hemen hemen asla kullanılmamalıdır. Apache, | |
| <directive module="mod_ident">IdentityCheck</directive> yönergesine | |
| <code>On</code> değeri atanmış olmadıkça bu bilgiyi saptamaya | |
| uğraşmaz.</dd> | |
| <dt><code>frank</code> (<code>%u</code>)</dt> | |
| <dd>Bu, belge isteğinde bulunan kişinin HTTP kimlik doğrulamasıyla | |
| saptanan kullanıcı kimliğidir. Bu değer CGI betiklerine | |
| <code>REMOTE_USER</code> ortam değişkeni ile sağlanır. Eğer istek | |
| için durum kodu 401 ise (aşağıya bakınız) henüz kullanıcının kimliği | |
| doğrulanmamış olacağından bu değere güvenilmemelidir. Eğer belge | |
| parola korumalı değilse günlüğün bu kısmı da yukarıdaki gibi | |
| "<code>-</code>" olacaktır.</dd> | |
| <dt><code>[10/Oct/2000:13:55:36 -0700]</code> | |
| (<code>%t</code>)</dt> | |
| <dd>İsteğin alındığı tarih ve saat. Biçemi şöyledir: | |
| <p class="indent"> | |
| <code>[gün/ay/yıl:saat:dakika:saniye dilim]<br /> | |
| gün = 2 hane<br /> | |
| ay = 3 harf<br /> | |
| yıl = 4 hane<br /> | |
| saat = 2 hane<br /> | |
| dakika = 2 hane<br /> | |
| saniye = 2 hane<br /> | |
| dilim = (`+' | `-') 4 hane</code> | |
| </p> | |
| <p>Günlük biçem dizgesinde zaman gösterim biçemini | |
| <code>%{<em>biçem</em>}t</code> şeklinde belirtmek de mümkündür. | |
| Buradaki <code><em>biçem</em></code> dizgesi, stardart C | |
| kütüphanesindeki <code>strftime(3)</code> işlevi için tanımlanmış | |
| biçem belirteçleriyle veya desteklenen özel belirteçlerle | |
| oluşturulabilir. Ayrıntılı bilgi için <module>mod_log_config</module> | |
| <a href="mod/mod_log_config.html#formats">biçem dizgelerine</a> | |
| bakın.</p> | |
| </dd> | |
| <dt><code>"GET /apache_pb.gif HTTP/1.0"</code> | |
| (<code>\"%r\"</code>)</dt> | |
| <dd>İstemciden alınan istek satırının çift tırnaklar arasında | |
| gösterilmesi istenmiştir. İstek satırı en yararlı bilgi parçalarını | |
| içerir. Birincisi, istemci tarafından kullanılan yöntem | |
| <code>GET</code>'miş. İkinci olarak istemci | |
| <code>/apache_pb.gif</code> dosyasını istemiş ve üçüncü olarak | |
| istemci <code>HTTP/1.0</code> protokolünü kullanmış. İstek satırının | |
| bazı parçalarını bağımsız olarak da günlüklemek mümkündür. Örneğin, | |
| "<code>%m %U%q %H</code>" dizgesi, yöntem, yol, sorgu dizgesi ve | |
| protokolü kaydedecektir; bu dizge "<code>%r</code>" biçem | |
| belirtecinin tek başına yaptığı işi yapar.</dd> | |
| <dt><code>200</code> (<code>%>s</code>)</dt> | |
| <dd>Bu, sunucunun istemciye gönderdiği durum kodudur. İsteğin | |
| başarıyla yerine getirilip getirilmediğini gösterdiği için bu bilgi | |
| çok değerlidir. Durum kodu 2 ile başlıyorsa istek başarıyla yerine | |
| getirilmiştir, 3 ile başlıyorsa yönlendirilmiştir, 4 ile başlıyorsa | |
| istemci tarafında bir hata oluşmuştur, 5 ile başlıyorsa sunucuda bir | |
| hata oluşmuştur. Olası hata kodlarının tam listesi <a | |
| href="http://www.w3.org/Protocols/rfc2616/rfc2616.txt">RFC2616 Hiper | |
| Metin Aktarım Protokolü</a>nün 10. bölümünde bulunabilir.</dd> | |
| <dt><code>2326</code> (<code>%b</code>)</dt> | |
| <dd>Son parça istemciye döndürülen nesnenin yanıt başlığı hariç | |
| uzunluğudur. Eğer istemciye bir içerik döndürülmemişse bu değer | |
| "<code>-</code>" olacaktır. Bunun yerine günlüğe "<code>0</code>" | |
| yazdırmak için <code>%B</code> belirtecini kullanınız.</dd> | |
| </dl> | |
| </section> | |
| <section id="combined"> | |
| <title>Birleşik Günlük Biçemi</title> | |
| <p>Sıklıkla kullanılan diğer bir biçem dizgesi Birleşik Günlük Biçemi | |
| (Combined Log Format) olup şöyle kullanılabilir:</p> | |
| <example> | |
| LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" | |
| \"%{User-agent}i\"" combined<br /> | |
| CustomLog log/access_log combined | |
| </example> | |
| <p>Bu biçem ilaveten 2 alan içermesi dışında Ortak Günlük Biçemi ile | |
| aynıdır. İlave alanların ikisi de <code>%{<em>başlık</em>}i</code> | |
| biçeminde olup buradaki <code><em>başlık</em></code>, HTTP isteğindeki | |
| başlık alanlarından biridir. Bu biçemin kullanıldığı bir erişim | |
| günlüğü girdisi şöyle olurdu:</p> | |
| <example> | |
| 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)" | |
| </example> | |
| <p>Ek alanlar:</p> | |
| <dl> | |
| <dt><code>"http://www.example.com/start.html"</code> | |
| (<code>\"%{Referer}i\"</code>)</dt> | |
| <dd>HTTP istek başlığı "Referer". İstemcinin raporladığı isteğin | |
| kaynaklandığı URI. (Bu isteğin yapılmasını sağlayan bağlantıyı | |
| içeren URL veya istek bir sayfanın bileşenleri ile ilgiliyse istenen | |
| sayfanın URL'si olabilir.)</dd> | |
| <dt><code>"Mozilla/4.08 [en] (Win98; I ;Nav)"</code> | |
| (<code>\"%{User-agent}i\"</code>)</dt> | |
| <dd>Tarayıcı kimliğini içeren HTTP istek başlığı. Bu istemcinin | |
| tarayıcısının raporladığı kendi tanıtım bilgisidir.</dd> | |
| </dl> | |
| </section> | |
| <section id="multiple"> | |
| <title>Çok Sayıda Erişim Günlüğü</title> | |
| <p>Yapılandırma dosyasında çok sayıda <directive | |
| module="mod_log_config">CustomLog</directive> yönergesi kullanarak çok | |
| sayıda erişim günlüğü kolayca oluşturulabilir. Örneğin aşağıdaki | |
| yönergelerle 3 tane erişim günlüğü oluşturulacaktır. İlki temel OGB | |
| bilgisini içerirken diğer ikisi isteğin kaynaklandığı yeri ve tarayıcı | |
| kimliğini içerir. Son iki <directive module="mod_log_config" | |
| >CustomLog</directive> satırı ayrıca, <code>ReferLog</code> ve | |
| <code>AgentLog</code> yönergelerinin etkilerinin nasıl taklit | |
| edileceğini de göstermektedir.</p> | |
| <example> | |
| LogFormat "%h %l %u %t \"%r\" %>s %b" common<br /> | |
| CustomLog logs/access_log common<br /> | |
| CustomLog logs/referer_log "%{Referer}i -> %U"<br /> | |
| CustomLog logs/agent_log "%{User-agent}i" | |
| </example> | |
| <p>Bu örnek ayrıca, <directive module="mod_log_config" | |
| >LogFormat</directive> yönergesi ile bir takma ad tanımlamanın şart | |
| olmadığını da göstermektedir. Günlük biçemi doğrudan <directive | |
| module="mod_log_config">CustomLog</directive> yönergesinde | |
| belirtilebilir.</p> | |
| </section> | |
| <section id="conditional"> | |
| <title>Şarta Bağlı Günlükler</title> | |
| <p>Bazı durumlarda istemcinin yaptığı isteğe bağlı olarak erişim | |
| günlüğünde belli girdilerin dışlanması gerekebilir. Bu, <a | |
| href="env.html" >ortam değişkenleri</a> sayesinde kolayca yerine | |
| getirilebilir. Önce isteğin belli koşulları sağladığını belirten bir | |
| ortam değişkeni ataması yapılır. Bu işlem <directive | |
| module="mod_setenvif">SetEnvIf</directive> yönergesi ile yapılır. | |
| Sonra da, ortam değişkenine bağlı olarak isteklerin günlüğe dahil | |
| edilip edilmeyeceği <directive | |
| module="mod_log_config">CustomLog</directive> yönergesinin | |
| <code>env=</code> deyimi kullanılarak belirtilir. Bazı örnekler:</p> | |
| <example> | |
| # yerel konaktan kaynaklanan istekleri imleyelim<br /> | |
| SetEnvIf Remote_Addr "127\.0\.0\.1" kaydetme<br /> | |
| # robots.txt dosyası isteklerini imleyelim<br /> | |
| SetEnvIf Request_URI "^/robots\.txt$" kaydetme<br /> | |
| # Kalanları günlüğe kaydedelim<br /> | |
| CustomLog logs/access_log common env=!kaydetme | |
| </example> | |
| <p>Başka bir örnek olarak, Türkçe belge isteklerini bir dosyaya diğer | |
| dillerdeki istekleri başka bir dosyaya kaydedelim.</p> | |
| <example> | |
| SetEnvIf Accept-Language "tr" turkce<br /> | |
| CustomLog logs/turkce_log common env=turkce<br /> | |
| CustomLog logs/diger_diller_log common env=!turkce | |
| </example> | |
| <p>Bir arabellkleme senaryosuna arabelleğin verimli kullanılıp | |
| kullanılmadığını bilmek isteyelim. Bu basitçe şöyle yapılabilir:</p> | |
| <example> | |
| SetEnv CACHE_MISS 1<br /> | |
| LogFormat "%h %l %u %t "%r " %>s %b %{CACHE_MISS}e" common-cache<br /> | |
| CustomLog logs/access_log common-cache | |
| </example> | |
| <p><module>mod_cache</module> önce <module>mod_env</module> modülünü | |
| çalıştıracak ve başarılı olunduğu takdirde içeriği onsuz teslim | |
| edecektir. Bu durumda arabellek kaybı <code>1</code> olarak | |
| günlüklenirken arabellek sunumu <code>-</code> olarak | |
| günlüklenecektir.</p> | |
| <p><code>env=</code> sözdizimine ek olarak, <directive | |
| module="mod_log_config">LogFormat</directive> HTTP yanıt kodudaki koşul | |
| değerlerini günlüklemeyi de destekler:</p> | |
| <example> | |
| LogFormat "%400,501{User-agent}i" browserlog<br /> | |
| LogFormat "%!200,304,302{Referer}i" refererlog | |
| </example> | |
| <p>Bu örnekte, HTTP durum kodu 400 veya 501 ise <code>User-agent</code> | |
| başlığı günlüklenecektir. Aksi takdirde, günlüğe bir "-" yazılacaktır. | |
| Benzer şekilde ikinci örnekte, HTTP durum kodu 200, 204 veya 302 | |
| <strong>değilse</strong> (durum kodlarının öncesindeki "!" imine | |
| dikkat) <code>Referer</code> başlığı günlüklenecektir.</p> | |
| <p>Koşulaa bağlı günlük kaydının çok esnek ve güçlü olabileceğini | |
| göstermiş olsak da günlük içeriğini denetlemenin tek yolu bu değildir. | |
| Günlük dosyaları sunucu etkinliğini eksiksiz olarak kaydedebildikleri | |
| takdirde daha yararlı olurlar. Günlük dosyalarını sonradan işleme tabi | |
| tutarak istenmeyen girdileri kaldırılmış bir kopya almak hem kolay hem | |
| de daha yararlıdır.</p> | |
| </section> | |
| </section> | |
| <section id="rotation"> | |
| <title>Günlük Çevrimi</title> | |
| <p>Yükü ağır sunucularda günlük dosyalarına kaydedilen bilginin miktarı | |
| çok büyük boyutlara ulaşabilir. 10.000 istek içeren bir erişim günlüğü | |
| yaklaşık 1MB yer kaplar. Etkin günlük dosyasını belirli aralıklarla | |
| değiştirmek veya silmek gerekebilir. Apache httpd çalışırken dosyayı sürekli | |
| açık tuttuğu ve yazdığı için bu işlem sunucu çalışırken yapılamaz. Bu | |
| bakımdan, günlük dosyası değiştirildikten veya silindikten sonra yeni | |
| dosyanın açılması için <a href="stopping.html">sunucunun yeniden | |
| başlatılması</a> gerekir.</p> | |
| <p><a href="stopping.html#graceful">Nazikçe yeniden başlatmak</a> | |
| suretiyle sunucunun, mevcut ve bekleyen bağlantıları kaybetmeden yeni | |
| günlük dosyalarını açması sağlanabilir. Bununla birlikte, bu işlem | |
| sırasında sunucunun eski isteklere sunumu bitirene kadar eski günlük | |
| dosyalarına yazmaya devam edebilmesi gerekir. Bu bakımdan, yeniden | |
| başlatmanın ardından eski günlük dosyaları üzerinde bir işlem yapmadan | |
| önce biraz beklemek gerekir. Günlük dosyalarını döndürürken kullanılan | |
| senaryolarda genellikle eski günlük dosyaları yer kazanmak için | |
| sıkıştırılırlar:</p> | |
| <example> | |
| mv access_log access_log.old<br /> | |
| mv error_log error_log.old<br /> | |
| apachectl graceful<br /> | |
| sleep 600<br /> | |
| gzip access_log.old error_log.old | |
| </example> | |
| <p>Günlük çevrimi yapmanın başka bir yolu da sonraki bölümde açıklandığı | |
| gibi <a href="#piped">borulu günlükler</a> kullanmaktır.</p> | |
| </section> | |
| <section id="piped"> | |
| <title>Borulu Günlükler</title> | |
| <p>Apache httpd hata ve erişim günlüklerini doğrudan bir dosyaya yazmak | |
| yerine bir boru üzerinden başka bir sürece yazabilir. Bu yetenek ana | |
| sunucuya herhangi bir kod eklemeksizin günlükleme esnekliğini şaşırtıcı | |
| derecede arttırır. Günlükler boruya yazılmak istenirse dosya ismini boru | |
| karakteriyle ("<code>|</code>") değiştirip ardına günlük girdilerini | |
| standart girdisinden kabul edecek programın ismini eklemek yeterlidir. | |
| Apache httpd başlatıldığı zaman borulu günlük işlemini de | |
| başlatacaktır. Eğer sunucu çalışırken günlükleri kabul eden süreç | |
| çökerse Apache httpd bu programı yeniden başlatır. (Bu son özelliği | |
| sebebiyle bu tekniğe "güvenilir borulu günlükleme" adını veriyoruz.)</p> | |
| <p>Borulu günlük süreçleri ana Apache httpd süreci tarafından başlatılır | |
| ve bu süreçler ana Apache httpd sürecinin kullanıcı kimliğini miras | |
| alırlar. Yani borulu günlükleme programları aslında root tarafından | |
| çalıştırılmış gibi olur. Bu bakımdan, bu programları basit ve güvenilir | |
| kılmak çok önemlidir.</p> | |
| <p>Borulu günlüklerin önemli kullanım alanlarından biri de sunucuyu | |
| yeniden başlatmak gerekmeksizin günlük çevrimini mümkün kılmaktır. | |
| Apache HTTP sunucusu bu amaçla kullanılmak üzere | |
| <program>rotatelogs</program> diye bir program içerir. Örneğin, | |
| günlükleri 24 saatte bir döndürmek isterseniz bunu şöyle | |
| yapabilirsiniz:</p> | |
| <example> | |
| CustomLog "|/usr/local/apache/bin/rotatelogs | |
| /var/log/access_log 86400" common | |
| </example> | |
| <p>Borunun diğer ucundaki süreci başlatacak komutun tırnak içine | |
| alındığına dikkat ediniz. Bu örnekler erişim günlüğü için verilmişse de | |
| aynı teknik hata günlüğü için de kullanılabilir.</p> | |
| <p>Hariçten bir uygulama olarak <a | |
| href="http://www.cronolog.org/">cronolog</a> isminde buna benzer ancak | |
| çok daha esnek bir program daha vardır.</p> | |
| <p>Borulu günlükler de şarta bağlı günlükleme kadar güçlü olmakla beraber | |
| çevrimdışı ardıl işlemler gibi daha basit çözümler için | |
| kullanılmamalıdır.</p> | |
| <p>Öntanımlı olarak borulu günlük süreci bir kabuk kullanmadan | |
| çalıştırılır. Kabuk kullanarak (genelde <code>/bin/sh -c</code> ile) | |
| yapılmak istenirse "<code>|</code>" yerine "<code>|$</code>" | |
| kullanılır:</p> | |
| <example> | |
| # Kabu kullanarak "rotatelogs" çalıştırmak<br /> | |
| CustomLog "|$/usr/local/apache/bin/rotatelogs | |
| /var/log/access_log 86400" common | |
| </example> | |
| <p>Bu, Apache 2.2 için öntanımlı davranıştı. Kabuk özelliklerine bağlı | |
| olarak, yeniden başlatma sırasındaki sinyal işleme sorunları ve günlük | |
| borulama uygulamasının yaşam süresi için ek bir kabuk süreci ile | |
| sonuçlanabilir. Apache 2.2 ile uyumluluk açısından "<code>||</code>" | |
| gösterimi de desteklenmekte olup "<code>|</code>" kullanımına | |
| eşdeğerdir.</p> | |
| </section> | |
| <section id="virtualhost"> | |
| <title>Sanal Konaklar</title> | |
| <p>Bir sunucu çok sayıda <a href="vhosts/">sanal konak</a> ile hizmet | |
| sunarken bunların günlük kayıtları için çeşitli seçenekler mevcuttur. | |
| İlk seçenekte, sanki sunucu tek bir konakla hizmet sunuyormuş gibi | |
| günlük kaydı yapılır. Günlükleme yönergelerini <directive module="core" | |
| type="section">VirtualHost</directive> bölümlerinin dışına, ana sunucu | |
| bağlamına yerleştirerek tüm isteklerin aynı erişim ve hata günlüğüne | |
| yazılmasını sağlamak olasıdır. Bu teknik, tek tek sanal konaklar için | |
| kolayca istatistik toplamaya izin vermez.</p> | |
| <p>Eğer <directive module="mod_log_config">CustomLog</directive> | |
| veya <directive module="core">ErrorLog</directive> yönergesi bir | |
| <directive module="core" type="section">VirtualHost</directive> bölümüne | |
| yerleştirilirse bu sanal konağa bütün erişimler veya hatalar belirtilen | |
| dosyaya günlüklenecektir. Böyle günlükleme yönergeleri içermeyen sanal | |
| konakların günlükleri hala ana sunucunun hata ve erişim günlüklerine | |
| yazılmaya devam edecektir. Bu teknik az sayıda sanal konak barındıran | |
| sunucular için çok kullanışlıdır. Fakat sanal konak sayısı çok fazlaysa | |
| bu teknikle günlük dosyalarını yönetmek çok karmaşık bir hal alabilir. | |
| Ayrıca, <a href="vhosts/fd-limits.html">yetersiz dosya tanıtıcısı</a> | |
| sorunlarıyla çok sık karşılaşılabilir.</p> | |
| <p>Erişim günlükleri için çok az bir fedakarlıkla çok iyi bir çözüm vardır. | |
| Günlük biçemine sanal konaklarla ilgili bilgi eklemek suretiyle tüm | |
| konakların aynı günlük dosyasını kullanmaları olasıdır. Böylece günlük | |
| dosyası sonradan her sanal konak için ayrı bir dosya oluşturmak üzere | |
| ayrıştırılabilir. Örneğin, bu işlem için şu yönergeler kullanılıyor | |
| olsun:</p> | |
| <example> | |
| LogFormat "%v %l %u %t \"%r\" %>s %b" | |
| ortaksankon<br /> | |
| CustomLog logs/access_log ortaksankon | |
| </example> | |
| <p><code>%v</code> belirteci isteği sunan sanal konağın ismini günlüğe | |
| yazmak için kullanılır. Daha sonra <a | |
| href="programs/other.html">split-logfile</a> gibi bir program | |
| kullanarak, bu dosyadan her sanal konak için ayrı birer dosya elde | |
| edilebilir.</p> | |
| </section> | |
| <section id="other"> | |
| <title>Diğer Günlük Dosyaları</title> | |
| <related> | |
| <modulelist> | |
| <module>mod_logio</module> | |
| <module>mod_log_config</module> | |
| <module>mod_log_forensic</module> | |
| <module>mod_cgi</module> | |
| </modulelist> | |
| <directivelist> | |
| <directive module="mod_log_config">LogFormat</directive> | |
| <directive module="mod_log_config">BufferedLogs</directive> | |
| <directive module="mod_log_forensic">ForensicLog</directive> | |
| <directive module="mpm_common">PidFile</directive> | |
| <directive module="mod_cgi">ScriptLog</directive> | |
| <directive module="mod_cgi">ScriptLogBuffer</directive> | |
| <directive module="mod_cgi">ScriptLogLength</directive> | |
| </directivelist> | |
| </related> | |
| <section> | |
| <title>Gönderilen ve alınan bayt sayısının günlüklenmesi</title> | |
| <p><module>mod_logio</module> modülü <directive | |
| module="mod_log_config">LogFormat</directive> yönergesinde kullanılan | |
| biçem belirteçlerine alınan ve gönderilen bayt sayıları için iki | |
| belirteç (%I ve %O) ekler.</p> | |
| </section> | |
| <section> | |
| <title>Adli Günlük</title> | |
| <p><module>mod_log_forensic</module> modülü istemci isteklerinin kanıt | |
| olarak kullanılmak amacıyla günlüklenmesini sağlar. Günlükleme her | |
| istek için isteğe hizmet sunmadan önce ve sonra olmak üzere iki defa | |
| yapılır. Böylece günlük dosyasında başarılı her istek için iki satır | |
| bulunur. Adli günlükleme çok sıkı kurallara tabi olup | |
| kişiselleştirilemez. Güvenlik ve hata ayıklama aracı olarak yararlı | |
| değildir.</p> | |
| </section> | |
| <section id="pidfile"> | |
| <title>PID Dosyası</title> | |
| <p>Apache httpd başlatıldığında, ana httpd sürecinin kimliği (PID) | |
| <code>logs/httpd.pid</code> dosyasına kaydedilir. Bu dosyanın ismi | |
| <directive module="mpm_common">PidFile</directive> yönergesi ile | |
| değiştirilebilir. Bu süreç kimliği sistem yöneticisi tarafından ana | |
| sürece sinyal göndererek artalan sürecini sonlandırmak veya yeniden | |
| başlatmak için kullanılır. Windows üzerinde bu işlem için | |
| <code>-k</code> komut satırı seçeneği kullanılır. Bu konuda daha | |
| ayrıntılı bilgi edinmek için <a href="stopping.html">Durdurma ve | |
| Yeniden Başlatma</a> belgesine bakınız.</p> | |
| </section> | |
| <section id="scriptlog"> | |
| <title>Betik Günlüğü</title> | |
| <p><directive module="mod_cgi">ScriptLog</directive> yönergesi CGI | |
| betiklerinin girdi ve çıktılarını kaydetmenizi mümkün kılmak suretiyle | |
| hata ayıklamaya yardımcı olur. Bu sadece deneysel amaçla kullanılmalı, | |
| asıl sunucuya uygulanmamalıdır. <a href="mod/mod_cgi.html">mod_cgi</a> | |
| belgesinde daha fazla bilgi bulunabilir.</p> | |
| </section> | |
| </section> | |
| </manualpage> |