Yeşil gösterge panosu, çalışmayan ürün

Bütün sunucu metrikleri normal ama kullanıcı bağlanamıyor. Bu çelişkinin sebebi ölçüm eksikliği değil — yanlış şeyi, yanlış tarafından ölçmek.

Bir kullanıcı "bağlanamıyorum" diye yazdı. Panoya baktım: CPU normal, bellek normal, hata oranı düşük, gecikme iyi. Her şey yeşil.

Kullanıcı haklıydı, pano da yanlış değildi. İkisi farklı şeyleri ölçüyordu.

Ortalama en çok yalan söyleyen sayı

En yaygın hata gecikmeyi ortalama olarak izlemek.

Bin istekten dokuz yüz doksanı elli milisaniyede dönüyor, onu on saniye sürüyor. Ortalama hâlâ iyi görünüyor. Ama o on kişi ürünü kullanamıyor, ve gün içinde her seferinde farklı on kişi oluyor.

Yüzdelik dilimler bunu düzeltiyor. Medyan tipik deneyimi, doksan dokuzuncu dilim ise en kötü deneyimi gösteriyor — ve ürünün gerçekten nasıl hissettirdiğini belirleyen ikincisi. Bir sohbet uygulamasında mesajların yüzde birinin geç gitmesi, kullanıcının "bu uygulama takılıyor" demesi için fazlasıyla yeterli.

Sunucuyu değil, isteği izle

İkinci hata, altyapı metriklerini ürün metriği sanmak.

CPU ve bellek kapasiteyi planlamak için gerekli, ama kullanıcının ne yaşadığı hakkında neredeyse hiçbir şey söylemiyor. Sunucu boşta oturuyorken de ürün bozuk olabiliyor — bağlantı kurulamıyorsa, sunucuya yük hiç gelmiyor zaten.

Buradaki asıl fark şu: başarısızlığı sistemin gördüğü yerden değil, kullanıcının durduğu yerden saymak. Kaç oturum kurulmaya çalışıldı, kaçı kuruldu. Kaç mesaj gönderilmek istendi, kaçı karşı tarafa ulaştı. Kaç ödeme başlatıldı, kaçı tamamlandı.

Ölçmediğin başarısızlık, olmayan başarısızlık değil. Sadece kullanıcıdan öğreneceğin başarısızlık.

Ulaşamayan istek görünmez

Kenar katmanı yazısında değindiğim noktanın metrik tarafı bu.

Uygulama günlükleri sadece uygulamaya varan istekleri görüyor. TLS el sıkışmasında düşen, zaman aşımına uğrayan, ağ tarafından engellenen bağlantılar oraya hiç ulaşmıyor. Yani en kötü hata sınıfı, gösterge panonda hiç görünmüyor.

Bizim durumumuzda bu somut: bir kullanıcının ağı UDP 443'ü filtreliyorsa gerçek zamanlı bağlantı hiç kurulmuyor ve uygulamada tek satır iz kalmıyor. Bunu ancak kenarda, kurulamayan oturumları sayarak görüyorsun. O sayı olmadan "fallback yazmadık" kararını savunmak mümkün değil — savunduğun şeyin maliyetini bilmiyorsun.

Alarm ile grafik farklı şeyler

Dördüncüsü: her metrik alarm olmak zorunda değil.

Alarm bir kişiyi uyandırıyor. Uyandırılan kişi bir şey yapabiliyorsa alarm doğru; yapamıyorsa alarm gürültü. Ve gürültü, alarm yorgunluğu yaratıyor — üç hafta boyunca boşuna çalan bir alarm, dördüncü haftada gerçekten çaldığında susturuluyor.

Bizde ayrım şöyle: alarm yalnızca kullanıcı etkisi olan ve müdahale gerektiren durumlar için. Disk yüzde yetmişte diye kimse uyanmıyor; ödeme mutabakatı fark verdiğinde uyanıyor.

En değerli metrik en sıkıcı olanı

Ve en çok işe yarayan şey karmaşık bir gösterge değil, mutabakat oldu.

Kendi defterinde yazan ile ödeme sağlayıcısının kayıtlarında yazanı düzenli karşılaştırmak. Stok hareketlerinin toplamı ile sayımdaki adedi karşılaştırmak. İki kaynağın aynı gerçeği söyleyip söylemediğine bakmak.

Bu tür bir kontrol, bir metriğin gösteremeyeceği şeyi gösteriyor: sistemin kendi içinde tutarsız olduğu anı. Gecikme iyi, hata oranı düşük, her şey yeşil — ama rakamlar tutmuyor. O fark, bir hatanın en erken ve en ucuz hâli.