Zpět na blog

Consensus voting v uptime monitoringu - proč dává smysl

· 10 min čtení

Klasický multi-region monitoring snižuje false negatives, ale zvyšuje false positives. Consensus voting řeší obojí. Edukační rozbor patternu.

Slabé místo single-region monitoringu

Single-region monitoring znamená, že váš checker běží v jedné lokaci. Pokud mezi touto lokací a vaším serverem dojde k síťovému problému (BGP flap, routing change, údržba ISP), monitor nahlásí DOWN, přestože server je v pořádku.

Jde o false positive. Dostanete alert, vzbudíte se ve tři ráno, otevřete laptop a zjistíte, že stránka funguje.

False positives škodí ze dvou důvodů:

  1. Alert fatigue. Pokud dostáváte notifikace, které se ukážou jako nepravdivé, postupně je začnete ignorovat. I ty skutečné.
  2. Ztráta důvěry v monitoring. Tým přestane reagovat na alerty, protože "to bude zase jen BGP".

Naivní multi-region řeší jeden problém, zhoršuje druhý

Běžný způsob, jak tento problém řešit, je multi-region monitoring. Checker běží z více lokací a alert se odešle pokaždé, když kterákoli z nich nahlásí DOWN.

Tím se zlepší detekce skutečných výpadků - když je server skutečně nedostupný, nezhasne jen jeden checker, ale více. To je v pořádku.

Jenže problém s false positives se zhorší. U jednoho checkeru jste měli nějaký poměr falešných alertů. U tří checkerů je matematicky pravděpodobnější, že alespoň jeden z nich falešně nahlásí DOWN. Dostáváte více falešných alertů, ne méně.

Consensus voting řeší obě strany problému

Consensus voting funguje jinak: při prvním DOWN signálu se neposílá alert. Nejdřív se zeptáte ostatních regionů. Pokud většina z nich také hlásí DOWN, jde o skutečný výpadek. Pokud ne, jde o síťovou anomálii v jednom regionu.

Pseudokód:

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'

Příklad situace:

primary  → DOWN  (jeden checker měl BGP flap)
region_a → UP    (ostatní regiony vidí server normálně)
region_b → UP

Výsledek: UP. Žádný alert. Záznam v debug logu.

A naopak při skutečném výpadku:

primary  → DOWN
region_a → DOWN
region_b → DOWN

Výsledek: DOWN. Alert jde přes Telegram/email/webhook.

Tradeoff: latence

Consensus voting má svou cenu - při DOWN signálu přidá pár sekund latence, než se stihnou udělat dotazy do dalších regionů. Pro většinu use-caseů (uptime monitoring s minutovým intervalem) je to zanedbatelné. Pro extrémně přísné SLA s detection time pod 30 sekund to může být kompromis.

Kdy je multi-region nesmyslný

  • Interní API na 192.168.x.x. Nikdo kromě vaší sítě se tam nedostane, takže multi-region z internetu nemá smysl. Pro LAN použijte pull-agent pattern - agent běží ve vaší síti, výsledky posílá přes HTTPS.
  • Single-customer interní aplikace. Pokud ji používá pár lidí a vy jste jeden z nich, dozvíte se o výpadku dřív než monitoring.
  • Service, který běží jen v jednom regionu světa. Pokud je vaše služba dostupná jen v EU a vidíte ji z US jako DOWN, není to false positive - je to očekávaný stav.

Jak to máme v ePulz.io

ePulz.io má consensus voting v architektuře. gather_multiregion() a combine_consensus() v monitoring.py implementují výše popsaný pattern. Threshold (kolik regionů musí potvrdit DOWN) je nastavitelný přes parametr min_down.

V tabulce Check se pro každý check zaznamenává pole consensus s CSV (např. "primary:up,region_a:up,region_b:down"), takže při debugu máte přesný záznam, jak se rozhodnutí udělalo.

Pro samohostování workeru v dalším regionu máme v admin panelu generátor WireGuard bundle - vytvoří tar.gz s konfigurací pro nový worker node a přidá ho do worker_urls.

Závěr

Consensus voting není magické řešení. Nedá vám zero false positives a nezachrání vás při skutečném výpadku. Ale je to lepší kompromis než single-region (vysoké false positives při network anomáliích) nebo naivní multi-region (multiplikace false positives).

Podívejte se na ePulz.io. 7denní zkušební doba, 3 monitory, bez kreditky.

Související


Vyzkoušejte ePulz.io zdarma - 7 dní bez kreditní karty.

Vytvořit účet