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:
- Alert fatigue. Ak dostávate notifikácie, ktoré sa ukážu ako nepravdivé, postupne ich začnete ignorovať. Aj tie skutočné.
- 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