Yazılım geliştirmenin erken dönemlerinde bir sistemin "çalışıyor" olması, 500 hatası döndürmemesiyle eşdeğerdi. Dağıtık mikro servisler ve karmaşık bulut altyapıları ile bu tanım tehlikeli derecede yetersizdir. Gözlenebilirlik ve güvenilirlik sadece operasyonel lüksler değil; kullanıcı güveninin ve iş sürekliliğinin omurgasıdır. Bu yazı, yalnızca dayanıklı olmakla kalmayıp aynı zamanda şeffaf ve hata ayıklaması kolay sistemler inşa etmenin temel direklerini inceliyor.
Gözlenebilirliğin Üç Temeli
Gözlenebilirlik, sistemin iç durumuna dair faydalı içgörüler üretme derecenizdir ve bu durum sistemin dışsal çıktılarından elde edilir. Üç temel veri türüne dayanır:
1. **Loglar**: Belirli bir anda gerçekleşen kesikli olaylardır. Logları sisteminizin "siyah kutusu" olarak düşünün. Ne olduğunu söylerler, ancak nedenini her zaman açıklamazlar.
2. **Metrikler**: Zaman içindeki sistem davranışının nicel ölçümleridir. CPU kullanımı, istek gecikmesi ve hata oranları metriklerdir. Bunlar "sistem nasıl gidiyor?" sorusuna cevap verir.
3. **İzleme (Tracing)**: Bir isteğin dağıtık sisteminiz boyunca seyahat ederken oluşturduğu haritadır. İzlemeler logları ve metrikleri birbirine bağlayarak bireysel isteklere bağlam sağlar.
Geleneksel izleme, bir şeyin bozuk olup olmadığını söylerken; gözlenebilirlik, bunun nedenini anlamanıza yardımcı olur.
Veriden Eyleme: İzleme ve Uyarılar
Veri, eyleme dönüştürülmezse işe yaramaz. İzleme, veri toplama ve analiz etme pratiğidir; uyarılar ise eşiklerin aşıldığında mühendislere bildirimde bulunma mekanizmasıdır.
Yaygın bir tuzak, uyarı yorgunluğudur. PagerDuty'niz kritik olmayan sorunlar için saat 3'te uyarı verirse, mühendisler zamanla bunu görmezden gelecektir. Etkili uyarılar, yalnızca altyapı sağlığına değil, kullanıcı için önemli olan belirtilere dayanmalıdır. Örneğin, yüksek CPU kullanımına uyarı vermek yerine, kullanıcı beklentilerini aşan artan istek gecikmesine uyarı verin.
// Örnek: Kolay ayrıştırma için JSON formatında yapılandırılmış loglama
const logger = {
info: (msg, context) => {
console.log(JSON.stringify({
level: 'info',
message: msg,
timestamp: new Date().toISOString(),
...context
}));
}
};
logger.info('Kullanıcı girişi başarılı', {
userId: '12345',
sessionId: 'abc-xyz',
ip: '192.168.1.1'
});
SRE İlkeleri: SLI'lar, SLO'lar ve SLA'lar
Site Güvenilirlik Mühendisliği (SRE), yazılım mühendisliği pratiklerini operasyonlara getirir. SRE'nin merkezinde Hizmet Seviyesi Göstergeleri (SLI), Hizmet Seviyesi Hedefleri (SLO) ve Hizmet Seviyesi Anlaşmaları (SLA) kavramları yer alır.
* **SLI**: Sağlanan hizmet düzeyinin bazı yönlerinin nicel ölçümüdür (örn. gecikme, hatalar, çalışma süresi).
* **SLO**: Bir SLI ile ölçülen bir hizmet düzeyi için hedef değer veya değer aralığıdır. Bu dahili bir hedeftir.
* **SLA**: Müşteriye verilen bir taahhüttür; genellikle SLO'ya ulaşılamaması durumunda krediler veya cezalar içerir.
Net SLO'lar tanımlamak, ekiplerin güvenilirliği özellik hızıyla dengelemesini sağlar. Zamanınızın %100'ünü güvenilirliğe harcarsanız hiçbir şey yayınlamazsınız. Güvenilirliği görmezden gelirsinizse kullanıcı kaybedersiniz.
Olay Yanıtı ve Sonraki Analizler (Post-Mortem)
En iyi çabalarımıza rağmen olaylar gerçekleşecektir. Amaç tüm hataları önlemek değil, etkilerini en aza indirmek ve onlardan ders almaktır. Güçlü bir olay yanıt planı, net roller (Olay Komutanı, Yazıcı, İletişim Lideri) ve iletişim kanalları içerir.
Yangın söndürüldükten sonra, suçlamalardan arındırılmış bir sonraki analiz (blameless post-mortem) hayati önem taşır. Odak, insan hatası yerine süreç ve sistem hatalarında olmalıdır. "Neden" sorusunu beş kez sorarak ekipler kök nedenleri ortaya çıkarabilir ve tekrarını önleyecek düzeltmeler uygulayabilir.
Sonuç
Gözlenebilir ve güvenilir sistemler inşa etmek bir varış noktası değil, devam eden bir yolculuktur. Logları, metrikleri ve izlemeleri etkili bir şekilde kullanarak ve çabalarınızı SRE ilkelerine dayandırarak, iş ihtiyaçlarınızla birlikte gelişebilen, anlaşılabilir ve dayanıklı sistemler inşa edebilirsiniz. Küçük başlayın, SLO'larınızı tanımlayın ve iterasyon yapın. Gelecekteki siz ve kullanıcılarınız size minnettar olacaktır.