Web sunucularında log kayıtları, sistem performansını izleme, güvenlik olaylarını tespit etme ve kullanıcı davranışlarını analiz etme açısından kritik öneme sahiptir.
Web sunucularında log kayıtları, sistem performansını izleme, güvenlik olaylarını tespit etme ve kullanıcı davranışlarını analiz etme açısından kritik öneme sahiptir. Standart log formatları temel bilgileri sunsa da, özelleştirilmiş log formatları sayesinde belirli ihtiyaçlara göre daha detaylı ve anlamlı veriler elde edilebilir. Bu makalede, web sunucusu log formatlarını özelleştirmenin yöntemlerini, avantajlarını ve pratik uygulama adımlarını ele alacağız. Özellikle Apache ve Nginx gibi popüler sunucular için adım adım rehberlik sağlayarak, IT ekiplerinizin log yönetimini optimize etmenize yardımcı olacağız.
Log formatları, sunucunun her istek için kaydettiği verilerin yapısını belirler. Standart formatlar genellikle IP adresi, istek zamanı, HTTP metodu ve yanıt kodunu içerir, ancak bu bilgiler her zaman yeterli olmayabilir. Özelleştirme ile response süresi, kullanıcı ajanını veya özel header’ları ekleyerek logları daha işlevsel hale getirebilirsiniz. Bu yaklaşım, log analizi araçlarının (örneğin ELK Stack) verimliliğini artırır ve sorun gidermeyi hızlandırır.
Özelleştirmenin temel avantajları arasında veri hacmini azaltma, gizlilik uyumluluğunu sağlama (GDPR gibi) ve özel metrikler oluşturma yer alır. Örneğin, bir e-ticaret sitesinde sepet terk etme oranlarını izlemek için cookie verilerini log’a dahil edebilirsiniz. Bu işlem, sunucu konfigürasyon dosyalarında basit direktiflerle gerçekleştirilir ve sunucuyu yeniden başlatmadan uygulanabilir.
Apache’nin Combined formatı (%h %l %u %t “%r” %>s %b “%{Referer}i” “%{User-agent}i”) veya Nginx’in default formatı ($remote_addr – $remote_user [$time_local] “$request” $status $body_bytes_sent “$http_referer” “$http_user_agent”), genel kullanım için uygundur. Ancak, bu formatlar response süresini veya GeoIP bilgisini içermez. Yüksek trafikli sitelerde, bu eksiklikler analiz zorluğu yaratır. Özelleştirme ile $request_time gibi değişkenleri ekleyerek, yavaş sorguları hızlıca tespit edebilirsiniz. Pratikte, log boyutunu %20-30 oranında küçültebilir ve arama süresini kısaltabilirsiniz.
Format belirlerken, log dosyasının büyüme hızını ve depolama maliyetlerini göz önünde bulundurun. Her ek alan, diski daha hızlı doldurur. Ayrıca, hassas verileri (örneğin kişisel IP’leri) maskeleyerek (örneğin %h yerine anonymized IP) uyumluluğu sağlayın. Test ortamında konfigürasyonu doğrulayın ve tail -f ile gerçek zamanlı izleyin. Bu adımlar, üretim ortamında kesinti riskini minimize eder ve log kalitesini yükseltir.
Apache’de log özelleştirmesi, httpd.conf veya sites-available konfigürasyon dosyalarında yapılır. LogFormat direktifi ile yeni bir format tanımlanır, ardından CustomLog ile atanır. Bu yöntem, virtual host bazında farklı formatlar kullanmanızı sağlar. Özelleştirme sonrası, /var/log/apache2/access.log gibi dosyalarda yeni yapı görünür hale gelir.
Bu adımlar, 5 dakikada tamamlanır ve anında etkili olur. %D parametresi milisaniye cinsinden response süresini ekler, bu sayede yavaş sayfaları optimize edebilirsiniz.
Apache, zengin parametre seti sunar: %h (uzak host), %t (zaman damgası), %r (istek satırı), %>s (final status), %b (body bytes), %{Referer}i (referer). Özelleştirilmiş bir örnek: LogFormat “%v %h %t %r %s %b %{Duration}X” perf_log. Burada %v sanal host adını, %{Duration}X custom header’ı ekler. Bu format, performans izleme için idealdir ve Logstash gibi araçlarla parse edilmesi kolaydır. Gerçek bir senaryoda, mobil trafiği ayırmak için %{User-Agent}i regex ile filtreleyebilirsiniz.
Konfigürasyonu ekledikten sonra, curl -H “User-Agent: Test” http://example.com ile test isteği gönderin. Log dosyasını grep ile kontrol edin: grep “Test” /var/log/custom.log. Hata durumunda error_log’u inceleyin. Üretimde, logrotate ile rotasyonu ayarlayın (/etc/logrotate.d/apache2). Bu süreç, log yönetimini profesyonelleştirir ve ekip analizini hızlandırır, örneğin ortalama response süresini hesaplamak için awk script’leri kullanabilirsiniz.
Nginx’te log_format direktifi http bloğunda tanımlanır ve access_log ile server bloğunda kullanılır. Varsayılan formatı genişleterek, $upstream_response_time gibi metrikler ekleyebilirsiniz. Konfigürasyon /etc/nginx/nginx.conf veya sites-enabled dosyalarında yapılır. Değişiklik sonrası nginx -t ile syntax kontrolü ve nginx -s reload ile uygulanır.
Örnek bir custom format: log_format custom ‘$remote_addr – $remote_user [$time_local] “$request” $status $bytes_sent $request_time $upstream_response_time “$http_referer” “$http_user_agent”‘. Bu, upstream sunucu yanıtlarını izlemenize olanak tanır, load balancer’larda vazgeçilmezdir.
Nginx değişkenleri $remote_addr (istemci IP), $time_local (yerel zaman), $request (tam istek), $status (HTTP kodu), $request_time (istek işleme süresi). GeoIP modülü yüklüyse $geoip_country_code ekleyin. Bir e-ticaret örneği: log_format ecommerce ‘$remote_addr – $http_x_forwarded_for [$time_local] “$request” $status $bytes_sent $request_time “cookie:$http_cookie”‘. Bu, kullanıcı oturumlarını takip eder ve terk oranlarını hesaplamanıza yardımcı olur. Değişkenleri birleştirerek JSON-like loglar üretin: log_format json escape=json ‘{ “time”: “$time_iso8601”, “status”: $status }’.
http bloğuna log_format main_custom … ekleyin, server bloğunda access_log /var/log/nginx/custom.access main_custom buffer=32k flush=5m; kullanın. Buffer, I/O’yu azaltır. Test için nginx -T ile tam konfig gösterin. Yüksek trafikte, gzip compression ile log sıkıştırması uygulayın. Sonuçta, özelleştirilmiş loglar Splunk veya Grafana entegrasyonu için hazır hale gelir, sistem sağlığını proaktif yönetmenizi sağlar.
Web sunucusu log formatlarını özelleştirmek, operasyonel verimliliği artıran stratejik bir adımdır. Bu rehberdeki adımları uygulayarak, ekipleriniz daha hızlı kararlar alabilir ve potansiyel sorunları önleyebilir. Düzenli inceleme ve iterasyon ile loglarınızı sürekli iyileştirin, böylece dijital altyapınız en üst düzeyde performans göstersin.