
Bir sayfa üç saniyede açılıyor. Web sunucusu günlüğü "istek 3 saniye sürdü" diyor. Peki bu üç saniye nerede geçti — veritabanında mı, dış serviste mi, şablon üretiminde mi? Günlükler bunu söylemiyor.
Bu yazı, istek bazında iz sürmeyi ele alıyor.
Günlükten Farkı
| Araç | Sorduğu soru |
|---|---|
| Günlük | Ne oldu? |
| Metrik | Ne kadar, ne sıklıkla? |
| İz | Zaman nerede geçti? |
Üçüncü satır diğer ikisinin cevaplayamadığı soruyu çözer: iz sürme, tek bir isteğin geçtiği her aşamayı süre bilgisiyle birlikte kaydeder — böylece yavaşlığın hangi adımda olduğu tahmin edilmez, görülür.
Metrikler ortalama gösterir, iz tek bir isteğin gerçek hikâyesini gösterir.
Bu üçü birbirinin alternatifi değildir; birlikte kullanılır.
Temel Kavramlar
- İz: Bir isteğin tamamı.
- Aralık: İz içindeki tek bir işlem.
- Bağlam: İz kimliğinin taşınması.
- Etiket: Aralığa eklenen bilgi.
Üçüncü madde sistemin çalışmasını sağlayan mekanizmadır: iz kimliği, bir servisten diğerine yapılan her çağrıda başlık olarak taşınır — böylece farklı sunucularda oluşan kayıtlar tek bir iz altında birleşir.
Bu taşıma yapılmazsa her servis kendi ayrı izini üretir ve bütün görünmez.
İkinci madde ise ayrıntı seviyesini belirler. Bir veritabanı sorgusu, bir dış servis çağrısı veya bir şablon üretimi ayrı birer aralık olabilir.
İz Neyi Gösterir?
Tipik bir web isteğinin dökümü:
- İstek karşılama ve yönlendirme.
- Kimlik doğrulama.
- Veritabanı sorguları.
- Önbellek erişimleri.
- Dış servis çağrıları.
- Şablon üretimi.
Bu döküm çoğu zaman şaşırtıcı sonuçlar verir: yavaş sanılan bir sayfada süre genellikle beklenen yerde geçmez — geliştiriciler veritabanını suçlarken sürenin çoğu bir dış servis çağrısında beklemekte geçer.
Üçüncü maddede bir başka klasik bulgu ortaya çıkar: aynı sorgunun döngü içinde yüzlerce kez çalıştırılması.
Bu desen kodu okuyarak fark edilmez ama izde açıkça görünür.
Örnekleme Kararı
Her isteği kaydetmek pahalıdır:
| Strateji | Değerlendirme |
|---|---|
| Hepsini kaydet | Düşük trafikte uygun |
| Sabit oranda örnekle | Öngörülebilir maliyet |
| Yavaş olanları kaydet | En değerli veri |
| Hatalıları kaydet | Teşhis için ideal |
Üçüncü ve dördüncü satırlar birlikte en verimli yaklaşımı oluşturur: hızlı ve başarılı isteklerin izleri neredeyse hiç incelenmez — asıl değer yavaş ve hatalı isteklerin izlerindedir.
Bu strateji, veri hacmini düşürürken yararlı bilgiyi korur.
İkinci satır ise trafiğin genel profilini görmek için gereklidir; yalnızca sorunluları kaydederseniz normalin nasıl göründüğünü bilemezsiniz.
Pratik bir karma yaklaşım: tüm hatalı ve yavaş istekleri, normal isteklerin ise küçük bir oranını kaydetmek.
Tek Sunucuda Değer Var mı?
İz sürme dağıtık sistemler için tasarlandı ama tek sunucuda da işe yarar:
- Veritabanı sorgu sayısını gösterir.
- Dış servis sürelerini ayırır.
- Kod içi darboğazları bulur.
Birinci madde tek başına yatırımı karşılar: tek bir sayfa isteğinde kaç veritabanı sorgusu çalıştığını görmek, çoğu uygulamada beklenenden kat kat yüksek bir sayı ortaya çıkarır.
Bu sayı genellikle nesne ilişkisel eşleme katmanının gizlediği döngüsel sorgulardan gelir.
Sorunu görmek, çözmenin yarısıdır; ilgili veriler tek sorguda birlikte çekilerek düzeltilir.
Kurulum Yaklaşımı
- Otomatik araçlandırma ile başlayın.
- Çerçeve ve sürücüler kendiliğinden izlenir.
- Kritik iş adımlarını elle ekleyin.
- Anlamlı etiketler koyun.
Birinci madde en hızlı sonucu verir: otomatik araçlandırma, koda tek satır yazmadan HTTP istekleri, veritabanı sorguları ve dış çağrılar için iz üretmeye başlar — ilk faydayı dakikalar içinde görürsünüz.
Üçüncü madde ise iş mantığını görünür kılar. "Ödeme doğrulama" veya "stok kontrolü" gibi adımların ayrı aralıklar olması, teknik dökümü anlamlı hâle getirir.
Dördüncü maddede dikkat gerekir: etiketlere kişisel veri veya sır yazılmamalıdır.
Hataları İzle Bağlamak
| Bağlantı | Kazanç |
|---|---|
| Günlüklere iz kimliği ekleyin | İki dünya birleşir |
| Hata sayfasında gösterin | Kullanıcı bildirimi eşleşir |
| Hata izleme aracına iletin | Tam bağlam |
Birinci satır teşhis hızını kat kat artırır: her günlük satırına iz kimliği eklemek, bir izde gördüğünüz yavaş adımın günlüklerini tek aramayla bulmanızı sağlar.
Bu bağlantı olmadan iki sistem arasında elle eşleştirme yapmak gerekir ve bu neredeyse imkânsızdır.
İkinci satır ise destek süreçlerini dönüştürür. Kullanıcı hata sayfasındaki numarayı bildirdiğinde, o isteğin tam yolculuğunu saniyeler içinde görürsünüz.
Maliyet ve Yük
- İz toplama işlemci tüketir.
- Veri hacmi hızla büyür.
- Saklama süresi belirlenmelidir.
- Gönderim asenkron olmalıdır.
Dördüncü madde kritik bir uygulama detayıdır: iz verisini istek içinde senkron göndermek, izleme sisteminiz yavaşladığında sitenizin de yavaşlamasına yol açar — izleme aracı hiçbir zaman uygulamanın performansını etkilememelidir.
Doğru yaklaşım, verileri bir tampona yazıp arka planda göndermektir.
Üçüncü madde ise depolama maliyetini yönetir. İzler genellikle birkaç gün saklanır; daha eskisi nadiren incelenir.
İzleme altyapısını kendi sunucunuzda çalıştırmak da mümkündür; VDS barındırma çözümleri üzerinde iz toplama ve görüntüleme servisleri kurabilirsiniz.
Sonuç
İz sürme, günlük ve metriklerin cevaplayamadığı tek soruyu çözer: zaman nerede geçti? Ve cevap genellikle şaşırtıcıdır — geliştiriciler veritabanını suçlarken sürenin çoğu bir dış servis çağrısında beklemekte geçer. Tek sunucuda bile değerlidir; tek bir sayfa isteğinde kaç veritabanı sorgusu çalıştığını görmek çoğu uygulamada beklenenden kat kat yüksek bir sayı ortaya çıkarır. Günlüklerinize iz kimliği eklemeyi ihmal etmeyin.
Sıkça Sorulan Sorular (SSS)
Günlük tutuyorum, iz sürmeye gerek var mı?
Günlük "ne oldu", metrik "ne kadar" sorusuna cevap verir; ikisi de "zaman nerede geçti" sorusunu cevaplayamaz. İz sürme tek bir isteğin geçtiği her aşamayı süre bilgisiyle kaydeder, böylece yavaşlığın hangi adımda olduğu tahmin edilmez görülür.
Tek sunucum var, yine de faydalı mı?
Evet. Tek bir sayfa isteğinde kaç veritabanı sorgusu çalıştığını görmek çoğu uygulamada beklenenden kat kat yüksek bir sayı ortaya çıkarır — genellikle eşleme katmanının gizlediği döngüsel sorgular. Bu desen kodu okuyarak fark edilmez ama izde açıkça görünür.
Her isteği kaydetmeli miyim?
Gerekmez. Hızlı ve başarılı isteklerin izleri neredeyse hiç incelenmez; asıl değer yavaş ve hatalı isteklerdedir. Pratik yaklaşım: tüm hatalı ve yavaş istekleri, normal isteklerin ise küçük bir oranını kaydetmek. Normal profili görmek için o küçük oran gereklidir.
İz sürme sitemi yavaşlatır mı?
Yanlış kurulursa evet. İz verisini istek içinde senkron göndermek, izleme sisteminiz yavaşladığında sitenizin de yavaşlamasına yol açar. Verileri bir tampona yazıp arka planda gönderin — izleme aracı hiçbir zaman uygulamanın performansını etkilememelidir.