Späť na blog

Consensus voting v uptime monitoringu - prečo dáva zmysel

· 10 min čítania

Klasický multi-region monitoring znižuje false negatives ale zvyšuje false positives. Consensus voting rieši oboje. Edukačný rozbor patternu.

Slabé miesto single-region monitoringu

Single-region monitoring znamená, že váš checker beží v jednej lokácii. Ak medzi touto lokáciou a vaším serverom dôjde k sieťovému problému (BGP flap, routing change, údržba ISP), monitor nahlási DOWN, hoci server je v poriadku.

Je to false positive. Dostanete alert, zobudíte sa o tretej ráno, otvoríte laptop a zistíte, že stránka funguje.

False positives škodia z dvoch dôvodov:

  1. Alert fatigue. Ak dostávate notifikácie, ktoré sa ukážu ako nepravdivé, postupne ich začnete ignorovať. Aj tie skutočné.
  2. Strata dôvery v monitoring. Tím prestane reagovať na alerty, lebo "to bude zase len BGP".

Naivný multi-region rieši jeden problém, zhoršuje druhý

Bežný spôsob, ako tento problém riešiť, je multi-region monitoring. Checker beží z viacerých lokácií a alert sa odošle vždy, keď ktorákoľvek z nich nahlási DOWN.

Tým sa zlepší detekcia skutočných výpadkov - keď je server naozaj nedostupný, nezhasne len jeden checker, ale viac. To je v poriadku.

Lenže problém s false positives sa zhorší. Pri jednom checkeri ste mali nejaký pomer falošných alertov. Pri troch checkeroch je matematicky pravdepodobnejšie, že aspoň jeden z nich falošne nahlási DOWN. Dostávate viac falošných alertov, nie menej.

Consensus voting rieši obe stránky problému

Consensus voting funguje inak: pri prvom DOWN signáli sa neposiela alert. Najprv sa opýtate ostatných regiónov. Ak väčšina z nich tiež hlási DOWN, je to skutočný výpadok. Ak nie, je to sieťová anomália v jednom regióne.

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'

Príklad situácie:

primary  → DOWN  (jeden checker mal BGP flap)
region_a → UP    (ostatné regióny vidia server normálne)
region_b → UP

Výsledok: UP. Žiadny alert. Záznam v debug logu.

A naopak pri skutočnom výpadku:

primary  → DOWN
region_a → DOWN
region_b → DOWN

Výsledok: DOWN. Alert ide cez Telegram/email/webhook.

Tradeoff: latencia

Consensus voting má cenu - pri DOWN signáli pridá zopár sekúnd latencie, kým sa stihnú urobiť dotazy do ďalších regiónov. Pre väčšinu use-caseov (uptime monitoring s minútovým intervalom) je to zanedbateľné. Pre extrémne prísne SLA s detection time pod 30 sekúnd to môže byť kompromis.

Kedy je multi-region nezmyselný

  • Interné API na 192.168.x.x. Nikto okrem vašej siete sa tam nedostane, takže multi-region z internetu nemá zmysel. Pre LAN použite pull-agent pattern - agent beží vo vašej sieti, výsledky posiela cez HTTPS.
  • Single-customer interná aplikácia. Ak ju používa pár ľudí a vy ste jeden z nich, dozvedíte sa o výpadku skôr ako monitoring.
  • Service ktorý beží len v jednom regióne sveta. Ak je vaša služba dostupná len v EÚ a vidíte ju z US ako DOWN, nie je to false positive - je to očakávaný stav.

Ako to máme v ePulz.io

ePulz.io má consensus voting v architektúre. gather_multiregion() a combine_consensus() v monitoring.py implementujú vyššie opísaný pattern. Threshold (koľko regiónov musí potvrdiť DOWN) je nastaviteľný cez min_down parameter.

V Check tabuľke sa pre každý check zaznamenáva pole consensus s CSV (napr. "primary:up,region_a:up,region_b:down"), takže pri debug máte presný záznam ako sa rozhodnutie urobilo.

Pre samohostovanie workera v ďalšom regióne máme v admin paneli generátor WireGuard bundle - vytvorí tar.gz s konfiguráciou pre nový worker node a pridá ho do worker_urls.

Záver

Consensus voting nie je magické riešenie. Nedá vám zero false positives a nezachráni vás pri skutočnom výpadku. Ale je to lepší kompromis ako single-region (vysoké false positives pri network anomáliách) alebo naivný multi-region (multiplikácia false positives).

Pozrite si ePulz.io. 7-dňová skúšobná doba, 3 monitory, bez kreditky.

Súvisiace


Vyskúšaj ePulz.io zadarmo - na 7 dní bez potreby kreditnej karty.

Vytvoriť účet