Go 1.25'te Flight Recorder: Sorun Anında Trace Yakalama
Go 1.25 ile gelen flight recorder, uzun süre çalışan servislerde performans sorunlarını son saniyelere ait execution trace ile teşhis etmeyi sağlıyor.
Go ekibi, 2024'te tanıttığı gelişmiş execution tracer altyapısını temel alarak Go 1.25'te flight recorder özelliğini kullanıma sundu. Bu araç, runtime/trace paketi üzerinden çalışır ve klasik Start/Stop yaklaşımının aksine, trace verisini sürekli olarak bellekte döngüsel bir tampon içinde tutar. Bir sorun tespit edildiğinde, programın o ana kadar biriktirdiği son birkaç saniyelik trace verisi anlık olarak dosyaya yazılabilir; böylece haftalarca çalışan web servislerinde bile hatanın kök nedenine ışık tutan veriler kaybolmadan yakalanabilir.
Makale, bu özelliği somutlaştırmak için basit bir "sayı tahmin et" HTTP servisi örneği kullanıyor. Servis normalde mikrosaniyeler içinde yanıt verirken, bazı isteklerin 100 milisaniyeyi aşan gecikmelerle sonuçlandığı gözlemleniyor. Geliştiriciler, trace.NewFlightRecorder ile MinAge (verinin güvenilir şekilde saklanacağı süre) ve MaxBytes (tampon boyutu, bellek kullanımını sınırlamak için) parametrelerini yapılandırarak recorder'ı başlatıyor; yavaş bir yanıt tespit edildiğinde WriteTo çağrısıyla trace anlık görüntüsü dosyaya aktarılıyor.
Bu yaklaşım, üretim ortamındaki ara sıra oluşan ve yeniden üretilmesi zor performans sorunlarının teşhisinde büyük kolaylık sağlıyor. Fleet genelinde rastgele örnekleme yapmanın gerektirdiği ağır altyapı yükü olmadan, tam olarak sorunun yaşandığı zaman penceresine odaklanan hedefli veri toplama imkânı sunuyor. Bu da Go ile yazılmış uzun ömürlü servislerde gözlemlenebilirlik araç setini önemli ölçüde güçlendiriyor.