Sunucu Hata Kayıtları (Error Logs) Nasıl Okunur? web sitenizin veya uygulamanızın sağlığını anlamak, beklenmedik sorunları teşhis etmek ve potansiyel güvenlik tehditlerini tespit etmek için hayati bir beceridir. Sunucu tarafında gerçekleşen her türlü aksaklık, yanlış yapılandırma veya kritik olay, bu özel dosyalara bir iz bırakır. Bu kayıtları doğru bir şekilde analiz edebilmek, bir sistem yöneticisi veya geliştirici için reaktif sorun çözümünden proaktif sistem yönetimine geçişin anahtarıdır. Genellikle karmaşık ve şifreli görünen bu metin dosyaları, aslında sunucunuzun sizinle iletişim kurma şeklidir; doğru soruları sormayı öğrendiğinizde, size sisteminizin en derin sırlarını bile açabilirler.

Sunucu hata kayıtları, dijital operasyonların görünmez kahramanlarıdır. Bir web sitesi çöktüğünde veya bir uygulama beklenmedik şekilde davrandığında, ilk bakılması gereken yer bu kayıtlardır. Onları sadece birer metin dosyası olarak görmek, bir uçağın kara kutusunu sadece metal bir kutu olarak görmeye benzer. İçerdikleri bilgiler, felaketin nedenini anlamak ve gelecekte tekrarlanmasını önlemek için paha biçilmezdir.
Bir web sitesinin meşhur “Beyaz Sayfa Hatası” vermesi veya bir “500 Internal Server Error” ile yanıt vermesi durumunda, sorunun kaynağını bulmak samanlıkta iğne aramaya benzeyebilir. Hata kayıtları bu noktada bir yol haritası sunar. Hangi PHP betiğinin ölümcül bir hata verdiğini, hangi veritabanı sorgusunun başarısız olduğunu veya hangi modülün yanlış yapılandırıldığını net bir şekilde gösterirler. Örneğin, bir WordPress eklentisi güncellendikten sonra siteye erişilemiyorsa, hata kaydı muhtemelen güncellenen eklentinin belirli bir fonksiyonunda uyumsuzluk veya kod hatası olduğunu size söyleyecektir. Bu bilgi olmadan, sorunu çözmek saatler veya günler sürebilirken, kayıtlar sayesinde dakikalar içinde çözülebilir.
Hata kayıtları, aynı zamanda güçlü bir güvenlik izleme aracıdır. Yetkisiz erişim denemeleri, otomasyon araçları tarafından gerçekleştirilen parola deneme saldırıları (brute-force) ve web uygulaması güvenlik açıklarını hedef alan girişimler genellikle sunucu kayıtlarında belirgin izler bırakır. Örneğin, sürekli olarak yönetici giriş sayfanıza (wp-login.php gibi) farklı IP adreslerinden yapılan başarısız giriş denemeleri, bir saldırı altında olduğunuzun açık bir işaretidir. Benzer şekilde, URL’lerde veya form verilerinde şüpheli kod parçacıkları görmek, olası bir SQL Injection saldırı girişimini gösterebilir. Bu kayıtları düzenli olarak izlemek, saldırıları erken bir aşamada tespit edip engellemek için kritik öneme sahiptir.
Bir sitenin yavaş çalışması her zaman belirgin bir hatadan kaynaklanmaz. Bazen performans sorunları, tekrar eden küçük verimsizliklerin birikmesiyle ortaya çıkar. Hata kayıtları, bu tür sorunları da ortaya çıkarabilir. Örneğin, bir PHP betiğinin izin verilen bellek limitini sürekli aşması, kodda bir optimizasyon gerekliliğine işaret eder. Veritabanı sunucusunun hata kayıtlarında görülen “slow query” (yavaş sorgu) uyarıları, hangi veritabanı işlemlerinin web sitesini yavaşlattığını gösterir. Bu bilgileri kullanarak kodunuzu ve veritabanı yapınızı optimize edebilir, sunucu kaynaklarının daha verimli kullanılmasını sağlayabilir ve kullanıcı deneyimini iyileştirebilirsiniz.
Farklı sunucu yazılımları, hata kayıtlarını farklı formatlarda ve konumlarda tutar. Sorun gidermeye başlamadan önce doğru dosyayı nerede bulacağınızı bilmek önemlidir. Genellikle bu dosyalar Linux tabanlı sistemlerde `/var/log/` dizini altında bulunur.
* Apache Hata Kayıtları: En yaygın web sunucularından biri olan Apache, hata kayıtlarını genellikle `error_log` dosyasına yazar. CentOS/RHEL gibi sistemlerde bu dosya `/var/log/httpd/error_log` konumunda bulunurken, Debian/Ubuntu sistemlerinde `/var/log/apache2/error.log` konumundadır.
* Nginx Hata Kayıtları: Performans odaklı bir diğer popüler web sunucusu olan Nginx, hataları varsayılan olarak `/var/log/nginx/error.log` dosyasına kaydeder. Nginx kayıtları genellikle daha az ayrıntılıdır ancak `error_log` direktifini kullanarak detay seviyesi artırılabilir.
* PHP-FPM Hata Kayıtları: PHP betiklerinin çalıştırılmasıyla ilgili hatalar (syntax hataları, tanımsız fonksiyon çağrıları vb.) genellikle web sunucusunun hata kaydına yazılır. Ancak, PHP-FPM’in kendi hata günlüğü de olabilir ve bu genellikle `php-fpm.conf` dosyasında belirtilen bir konumda saklanır.
* MySQL/MariaDB Hata Kayıtları: Veritabanı sunucusunun kendisiyle ilgili sorunlar (başlatılamama, tabloların bozulması, erişim sorunları) bu kayıtlarda bulunur. Genellikle `/var/log/mysql/error.log` veya `/var/lib/mysql/hostname.err` gibi bir yolda bulunurlar. Uygulamanın veritabanına bağlanamaması farklı, veritabanı sunucusunun kendisinin çökmesi farklı bir sorundur ve bu kayıtlar ikincisini teşhis etmeye yarar.
İlk bakışta anlamsız bir karakter dizisi gibi görünen bir hata kaydı satırı, aslında oldukça yapılandırılmış bilgiler içerir. Tipik bir Apache hata kaydı satırını inceleyerek bu yapıyı anlayalım:
`[Wed Oct 26 10:30:00.123456 2023] [core:error] [pid 1234:tid 5678] [client 192.168.1.10:12345] AH00124: Request exceeded the limit of 10 internal redirects due to probable configuration error.`
Bu satırı bileşenlerine ayırdığımızda her bir parçanın ne anlama geldiğini görebiliriz.
| Bileşen | Örnek Değer | Açıklama |
|---|---|---|
| Timestamp (Zaman Damgası) | [Wed Oct 26 10:30:00.123456 2023] |
Hatanın tam olarak ne zaman meydana geldiğini gösterir. Sorunları belirli bir olayla (örneğin bir kod dağıtımı) ilişkilendirmek için kritiktir. |
| Module & Severity (Modül ve Önem Seviyesi) | [core:error] |
Hatanın hangi sunucu modülünden (burada Apache’nin çekirdeği ‘core’) kaynaklandığını ve önem derecesini (‘error’) belirtir. Diğer seviyeler ‘warn’, ‘info’, ‘debug’ olabilir. |
| Process & Thread ID (Süreç ve İş Parçacığı ID) | [pid 1234:tid 5678] |
İsteği işleyen spesifik sunucu sürecinin ve iş parçacığının kimliğini belirtir. Karmaşık sorunları ayıklarken belirli bir süreci izlemek için kullanılır. |
| Client Information (İstemci Bilgisi) | [client 192.168.1.10:12345] |
İsteği yapan istemcinin IP adresini ve kaynak portunu gösterir. Güvenlik analizi veya belirli bir kullanıcıdan kaynaklanan sorunları izlemek için önemlidir. |
| Error Message (Hata Mesajı) | AH00124: Request exceeded... |
Hatanın kendisini açıklayan metindir. ‘AH’ ile başlayan kod, Apache’ye özgü bir hata kodudur ve sorunun doğası hakkında ayrıntılı bilgi verir. |
Teorik bilgiyi pratiğe dökmek, bu kayıtları anlamanın en iyi yoludur. İşte sık karşılaşılan bazı hata türleri ve anlamları:
Kayıt: `[Mon Oct 30 14:15:00 2023] [php:error] [pid 1122] [client 203.0.113.5] PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 65536 bytes) in /var/www/html/wp-includes/some-plugin.php on line 50`
Yorum: Bu, en yaygın PHP hatalarından biridir. `/var/www/html/wp-includes/some-plugin.php` dosyasının 50. satırındaki bir betik, PHP için ayrılan 128MB (134217728 bytes) belleği tüketmeye çalışmış ve başarısız olmuştur. Bu durum genellikle kötü yazılmış bir kod döngüsünden, büyük bir veri setini işlemeye çalışmaktan veya basitçe sunucunun `php.ini` dosyasındaki `memory_limit` değerinin düşük olmasından kaynaklanır.
Kayıt: `[Tue Oct 31 09:00:10 2023] [core:error] [pid 1133] [client 203.0.113.10] AH00128: File does not exist: /var/www/html/images/background.jpg`
Yorum: Bu mesaj oldukça açıktır. Bir istemci, sunucuda bulunmayan `/images/background.jpg` dosyasını talep etmiştir. Bu durum, bozuk bir linkten, yanlış yazılmış bir dosya yolundan veya dosyanın sunucudan silinmiş olmasından kaynaklanabilir. Bu tür hatalar genellikle kritik olmasa da, çok sayıda tekrar etmeleri sitenin bozuk olduğunu gösterebilir ve SEO’yu olumsuz etkileyebilir.
Kayıt: `[Wed Nov 01 11:45:20 2023] [core:alert] [pid 1144] [client 203.0.113.15] /var/www/html/.htaccess: Invalid command ‘RewriteEngin’, perhaps misspelled or defined by a module not included in the server configuration`
Yorum: Bu hata, `.htaccess` dosyasında bir yazım hatası olduğunu gösterir. `RewriteEngine` komutu yanlışlıkla `RewriteEngin` olarak yazılmıştır. `.htaccess` dosyasındaki en küçük bir sözdizimi hatası bile genellikle sitenin tamamında “500 Internal Server Error” hatasına neden olur. Bu kayıt, sorunun tam olarak nerede olduğunu göstererek hızlı bir çözüm sağlar.
Büyük ve yoğun trafikli sunucularda hata kayıt dosyaları çok hızlı bir şekilde büyüyebilir ve manuel olarak incelenmesi zorlaşabilir. Neyse ki, bu süreci kolaylaştırmak için birçok araç ve teknik mevcuttur.
Linux komut satırı, kütük dosyası analizi için güçlü bir cephanelik sunar:
* `tail -f /path/to/error.log`: Dosyanın sonunu canlı olarak izlemenizi sağlar. Bir hatayı anında görmek için mükemmeldir.
* `grep “Fatal error” /path/to/error.log`: Dosya içinde yalnızca “Fatal error” içeren satırları filtreler. Belirli bir hata türünü aramak için kullanılır.
* `less /path/to/error.log`: Büyük dosyaları sayfa sayfa, ileri ve geri giderek rahatça okumanızı sağlar.
* `awk` ve `sed`: Belirli sütunları ayıklamak, metni yeniden biçimlendirmek ve karmaşık filtreleme işlemleri yapmak için kullanılan gelişmiş metin işleme araçlarıdır.

Etkili bir sistem yönetimi için hata kayıtlarını sadece okumak yeterli değildir; onları doğru bir şekilde yönetmek de gerekir. Log rotasyonu (logrotate gibi araçlarla), disk alanının dolmasını önlemek için eski kayıt dosyalarını periyodik olarak arşivleyen ve sıkıştıran bir süreçtir. Bu, hem sunucunun çalışır durumda kalmasını sağlar hem de geçmişe dönük analizler için kayıtların korunmasına olanak tanır. Büyük altyapılarda ise kayıtların merkezi bir sunucuda toplanması (centralized logging), tüm sistemlerdeki olayları tek bir yerden izlemeyi ve ilişkilendirmeyi kolaylaştırır.