Bloga geri dön

Uptime monitoringde consensus voting - neden anlamlı

· 10 dk okuma

Klasik çoklu bölge monitoring false negative oranını azaltır ama false positive oranını artırır. Consensus voting her ikisini de çözer. Bu desenin eğitici bir analizi.

Tek bölge monitoringinin zayıf noktası

Tek bölge monitoring, checker tek bir konumda çalışır. Bu konum ile sunucunuz arasındaki yolda ağ sorunu oluşursa (BGP flap, routing değişikliği, ISP bakımı), monitor sunucu sorunsuz olmasına rağmen DOWN olarak rapor eder.

Bu bir false positive olur. Uyarı alırsınız, gece 3'te uyanırsınız, dizüstünüzü açarsınız ve sitenin çalıştığını görürsünüz.

False positive iki nedenden dolayı zararlıdır:

  1. Alert fatigue. Yanlış çıkan bildirimler alırsanız, yavaş yavaş onları görmezden gelmeye başlarsınız. Gerçek olanları bile.
  2. Monitoringe olan güven kaybı. Ekip uyarılara yanıt vermeyi bırakır çünkü "muhtemelen yine BGP'dir".

Naive çoklu bölge bir sorunu çözer, diğerini kötüleştirir

Bu duruma yaygın yaklaşım çoklu bölge monitoringidir. Checker birden fazla konumdan çalışır ve herhangi biri DOWN raporladığında uyarı tetiklenir.

Bu gerçek outage tespitini iyileştirir - sunucu gerçekten erişilemez olduğunda, sadece bir checker değil birden fazlası kapanır. İyi.

Ama false positive sorunu kötüleşir. Tek checker ile belirli bir yanlış uyarı oranınız vardı. Üç checker ile en az birinin yanlış DOWN raporlama olasılığı matematiksel olarak daha yüksek. Daha fazla yanlış uyarı alırsınız, daha az değil.

Consensus voting her iki tarafı çözer

Consensus voting farklı çalışır: ilk DOWN sinyalinde uyarı tetiklemezsiniz. Önce diğer bölgelere sorarsınız. Eğer onların çoğunluğu da DOWN raporlarsa, bu gerçek bir outage. Değilse, bir bölgedeki ağ anomalisi.

Pseudokod:

result = check_http(monitor)  # primary region
if result.status == 'down':
    secondary_results = check_from_other_regions(monitor)
    if secondary_results:
        # Default rule: 2 of 3 regions must agree on DOWN
        if count_down(secondary_results) + 1 >= 2:
            result.status = 'down'
        else:
            result.status = 'up'
            result.note = 'consensus mismatch'

Örnek senaryo:

primary  -> DOWN  (bir checkerda BGP flap oldu)
region_a -> UP    (diğer bölgeler sunucuyu normal görüyor)
region_b -> UP

Sonuç: UP. Uyarı yok. Debug log'da kayıt.

Ve tersi, gerçek outage:

primary  -> DOWN
region_a -> DOWN
region_b -> DOWN

Sonuç: DOWN. Telegram/email/webhook üzerinden uyarı gider.

Tradeoff: gecikme

Consensus voting'in bir bedeli vardır - DOWN sinyalinde diğer bölgeleri sorgulamak için birkaç saniye gecikme ekler. Çoğu use case için (dakikalık aralıklı uptime monitoring) önemsizdir. Detection time 30 saniyenin altında olan son derece sıkı SLA'lar için bir uzlaşma olabilir.

Çoklu bölgenin anlamsız olduğu durumlar

  • 192.168.x.x üzerindeki dahili API'ler. Ağınızın dışından kimse erişemez, bu yüzden internetten çoklu bölge anlamsız. LAN için pull-agent desenini kullanın - agent ağınızda çalışır ve sonuçları HTTPS üzerinden gönderir.
  • Tek müşterili dahili uygulama. Sadece birkaç kişi kullanıyorsa ve sizden biri de onlardan biriyse, outage'ı monitoring'den önce bileceksiniz.
  • Dünyanın tek bir bölgesinde çalışan bir hizmet. Hizmetiniz sadece AB'de ise ve ABD'den DOWN görüyorsanız, bu false positive değil, beklenen davranış.

ePulz.io'da nasıl yapıyoruz

ePulz.io'nun mimarisinde consensus voting bulunur. monitoring.py içindeki gather_multiregion() ve combine_consensus() yukarıdaki deseni uygular. Eşik (kaç bölgenin DOWN'u doğrulaması gerektiği) min_down parametresi ile yapılandırılabilir.

Check tablosunda her satır bir consensus alanını CSV ile saklar (örn. "primary:up,region_a:up,region_b:down"), böylece debug için kararın nasıl alındığına dair kesin kayıt elde edersiniz.

Başka bir bölgede worker self-hosting için admin panelde WireGuard bundle generator vardır - yeni bir worker node için yapılandırma içeren tar.gz oluşturur ve worker_urls listesine ekler.

Sonuç

Consensus voting sihirli bir çözüm değildir. Size sıfır false positive vermez ve gerçek bir outage'da sizi kurtarmaz. Ama tek bölgeli (ağ anomalileri sırasında yüksek false positive oranı) veya naive çoklu bölge (false positive çarpanlama) çözümlerden daha iyi bir uzlaşmadır.

ePulz.io hizmetine bir göz atın. 7 günlük deneme, 3 monitor, kredi kartı gerekmez.

İlgili


ePulz.io'yu ücretsiz deneyin - 7 gün, kredi kartı gerekmez.

Hesap oluştur