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.

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

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 (únava z upozornení). 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.

Problém s false positives sa tým však zhorší. Pri jednej kontrolnej stanici ste mali určitú mieru falošných alarmov. Pri troch staniciach je pravdepodobnejšie, že aspoň jedna z nich falošne nahlási DOWN. Výsledkom je 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 alert neodošle. Najprv sa systém opýta ostatných regiónov. Ak väčšina z nich tiež hlási DOWN, ide o skutočný výpadok. Ak nie, je to len 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:
        # Predvolené pravidlo: 2 z 3 worker nodov musia potvrdiť 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  (BGP flap z Liptova k vášmu hostingu)
eu1      → UP   (Bratislava)    (ostatné regióny vidia server normálne)
eu2      → UP   (Liptov, sekundár)

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

A naopak pri skutočnom výpadku:

primary  → DOWN
eu1      → DOWN
eu2      → DOWN

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

Kompromis: latencia

Consensus voting má svoju cenu: pri DOWN signáli pridá zopár sekúnd latencie navyše, kým sa stihnú vykonať dotazy do ďalších regiónov. Pri väčšine prípadov použitia (uptime monitoring s minútovým intervalom) je to zanedbateľné. Pri extrémne prísnych SLA s detection time pod 30 sekúnd už môže ísť o citeľný 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.
  • Služba, ktorá beží len v jednom regióne sveta. Ak je vaša služba dostupná len v EÚ a vidíte ju z USA 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 nasadený medzi 3 reálnymi worker nodmi: primary v Liptovskom Mikuláši, eu1 v Bratislave a eu2 v Liptovskom Mikuláši (sekundárny stroj). Default threshold je 2 z 3 - výpadok sa zaznamená, keď ho potvrdia aspoň dva worker nody. Geografická diverzita: 2 mestá; hardvérová redundancia: dva nezávislé stroje v Liptove pre prípad HW/SW zlyhania primary nodu.

Pre každú kontrolu sa ukladajú výsledky z jednotlivých regiónov (napr. „primary:up, eu1:down"), takže pri ladení máte presný záznam o tom, ako padlo rozhodnutie.

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

Zdieľať: Odkaz skopírovaný

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

Vytvoriť účet