Web sunucusunun günlükleri, bir sorunun ne zaman başladığını ve kimi etkilediğini söyleyen en doğrudan kaynaktır. Çoğu ortamda toplanır ama okunmaz — genelde de öntanımlı biçimde bırakıldığı için okunacak bilgiyi içermezler.
İki ayrı günlük
Karıştırılmamaları gerekir.
Erişim günlüğü, gelen her isteği kaydeder: kim, ne zaman, hangi yolu istedi, hangi durum kodu döndü. Sorun olmasa da yazılır.
Hata günlüğü, sunucunun kendi sorunlarını kaydeder: yapılandırma hataları, arka uca bağlanamama, izin sorunları.
Teşhis genelde ikisinin birlikte okunmasıyla ilerler. Erişim günlüğü ne zaman ve kime olduğunu, hata günlüğü neden olduğunu söyler.
Öntanımlı biçim yetersizdir
Standart günlük satırı birkaç alan içerir ve arıza ararken en çok ihtiyaç duyulan iki şey içinde yoktur.
Yanıt süresi. Eklenmesi tek satırlık bir yapılandırmadır ve günlüğün değerini kat kat artırır. Onsuz, “sistem yavaşladı” iddiasını doğrulayacak hiçbir veri yoktur.
Gerçek istemci adresi. Önde bir vekil ya da CDN varsa, günlükteki adres onlara aittir. Doğru başlığın kaydedilmesi gerekir; nedeni ters vekil nedir yazısında.
Yanına iki alan daha eklenmelidir: arka uca harcanan süre — toplam süreden ayrı olarak — ve isteği ilişkilendiren bir kimlik.
İlişkilendirme kimliği
Modern bir istek birden çok bileşenden geçer: vekil, uygulama, veritabanı, dış servis. Her biri kendi günlüğünü tutar.
Bir kullanıcı “saat 14:32’de hata aldım” dediğinde, o isteği tüm bu günlüklerde bulmak bir arama işine dönüşür.
Çözüm basittir: öndeki katman her isteğe benzersiz bir kimlik atar, bunu arka uca iletir ve günlüğe yazar. Uygulama da aynı kimliği kendi günlüklerine yazar.
Bundan sonra tek bir aramayla isteğin tüm yolculuğu görülür. Aynı fikrin gözlemlenebilirlikteki genel karşılığı metrik, günlük ve iz yazısında.
Bir adım daha ileri gitmek, hata sayfasında bu kimliği kullanıcıya göstermektir. Kullanıcı destek çağrısında kodu söyler ve arama saniyeler sürer.
Gürültüyü ayıklamak
İnternete açık bir sunucunun erişim günlüğünün büyük bölümü, gerçek kullanıcılardan gelmez.
Üç kaynak vardır: arama motoru tarayıcıları, güvenlik tarayıcıları ve bilinen açıkları deneyen otomatik istekler. Sonuncusu, olmayan yolları ısrarla ister ve günlüğü 404’lerle doldurur.
Bu gürültü iki şekilde zarar verir. Gerçek sorunları görünmez kılar ve trafik istatistiklerini şişirir.
Ayıklamanın pratik yolu, tarayıcı isteklerini ayrı bir günlüğe yönlendirmek ya da analiz sırasında süzmektir. Süzme ölçütü, bilinen tarayıcı imzaları ve olmayan yolları ısrarla isteyen adreslerdir.
Neyin saklanıp neyin atılacağı kararının genel çerçevesi günlük toplama: her şeyi saklamak da bir hata yazısında.
Teşhis sırası
Bir olay geldiğinde günlükten hızlı sonuç almanın sırası şudur.
Önce zaman aralığını daraltın. Sorunun başladığı dakikayı bulun; hata oranındaki sıçrama bunu gösterir.
Sonra durum kodu dağılımına bakın. 5xx mi arttı, 4xx mi? Ayrımı HTTP durum kodları yazısında; 502 ile 504 farkı burada doğrudan yön verir.
Ardından yola göre gruplayın. Tek bir uç nokta mı etkilenmiş, yoksa her şey mi? Tek uç noktaysa sorun uygulamada belirli bir işlevde; her şeyse altyapıdadır.
Son olarak yanıt süresi dağılımına bakın. Ortalamaya değil yüzdelik dilimlere bakın; birkaç çok yavaş istek ortalamada kaybolur. Nedeni SLA, SLO ve SLI farkı yazısında.
Günlükte aranan sessiz sinyaller
Hata üretmeyen ama sorun anlatan üç kalıp vardır.
Aynı adresten çok sayıda 404. Bir bağlantı bozulmuş olabilir; ya da bir tarama sürüyordur.
Aynı kullanıcının aynı isteği tekrar tekrar göndermesi. Kullanıcı yanıt alamıyor ve yeniliyordur. Hata kodu görünmese de deneyim bozuktur.
İstemcinin bağlantıyı kapatması. Sunucu yanıtı hazırlarken istemci beklemeyi bırakmıştır. Hiçbir hata sayacına yansımayan, en gerçek yavaşlık kanıtıdır.
Saklama ve kişisel veri
Erişim günlükleri IP adresi içerir ve bu, kişisel veri sayılabilecek bir alandır.
İki sonuç doğar: saklama süresi belirlenmeli ve süresi dolan kayıtlar gerçekten silinmelidir. Ayrıca günlüklere erişimin kimlerde olduğu tanımlı olmalıdır.
Süresiz saklanan günlük, bir gün bir ihlalde sızacak veri yığınının parçasıdır.
Kısaca
Öntanımlı günlük biçimi arıza aramaya yetmez; yanıt süresi, gerçek istemci adresi ve bir ilişkilendirme kimliği eklenmelidir.
Okurken önce zamanı daraltın, sonra durum kodu dağılımına bakın. Ve tarayıcı gürültüsünü ayıklamadan yapılan her analiz, gerçek kullanıcıların yaşadığını değil botların ürettiğini ölçer.