| <?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:1897300 (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> |