Prisijungimas iš naujo, trunkantis sekundę, sako, kad klientas greitas. Jis nesako, ar kas nors pabėgo, kol tunelis buvo išjungtas. Prisijungimas iš naujo, trunkantis minutę, sako, kad klientas lėtas, ir vis tiek nesako, ar spragoje buvo leistas tiesioginis srautas. Tai du matavimai, o kill switch testas, kuris praneša tik apie pirmąjį, nepatikrino jungiklio.

Du stebėjimai, du atskiri verdiktai

Prieinamumo klausimas paprastas: kada tunelis vėl tapo naudojamas ir ar apsaugotai programai reikėjo naujo ryšio, kad ten patektų. Vykdymo klausimas kitas: kurie paketai paliko mašiną nuo apsaugos kritimo iki jos sugrįžimo.

Atsakykite į juos atskirais įrašais. Viena eilutė sako, kad spraga truko tam tikrą sekundžių skaičių. Kita eilutė sako, ar toje spragoje pavyko neapsaugota užklausa. Sujungus juos į vieną išlaikyta ar nepavyko paslepiamas svarbiausias atvejis: greitas prisijungimas iš naujo su nutekėjimu.

Sukurkite zondą, kurį galima laiku išmatuoti

Naudokite užklausą, kuri nekenksminga, pigi ir nepriklausoma nuo paties tunelio valdymo kanalo. Žemiau esanti kilpa kas sekundę išspausdina laiko žymą, HTTP būseną ir praėjusį laiką, o užuot pakibusi garsiai nepavyksta:

while true; do
  printf '%s ' "$(date +%H:%M:%S)"
  curl -sS -o /dev/null -w '%{http_code} %{time_total}\n' --max-time 2 https://example.com || echo "curl-exit-$?"
  sleep 1
done

Skaitykite curl išėjimo kodus, o ne tik būseną. 28 reiškia, kad užklausos laikas baigėsi, taip atrodo užblokuotas kelias. 6 reiškia, kad vardų skyrimas nepavyko, tai kitas radinys ir dažnai įdomesnis. 200 su trumpu praėjusiu laiku spragoje reiškia, kad srautui buvo leista išeiti.

Įrašykite išvestį į failą ir jį išsaugokite. Terminalo istorija nėra įrodymas, o įdomioji dalis paprastai yra trys eilutės viduryje.

Sukelkite tikrą gedimą, o ne tvarkingą

Atsijungimas per paties kliento meniu tikrina kooperatyvų kelią, kai klientas turi laiko įdiegti savo blokavimo taisykles. Užuot tai darę, užmuškite procesą arba nutraukite apatinę jungtį, ir patikrinsite kelią, kuriuo eina tikras gedimas.

Kiekvienas trigeris lavina skirtingą kodo kelią. Serverio pusės sutrikimas, vietinio ryšio praradimas ir kliento lūžis gali palikti skirtingą būseną, ir vienas iš jų greičiausiai bus atvejis, su kuriuo galiausiai susidursite. Paleiskite zondą bent su dviem trigeriais ir pažymėkite rezultatus pagal trigerį.

Skaitykite žurnalą, kad pamatytumėte, kaip atrodo leidžiamas srautas

200 arba greitas ryšio nepavykimas spragoje yra nutekėjimas, į kurią pusę jis bedarytų. Laiko pasibaigimai per visą spragą yra laukiama blokavimo politikos forma. Vardų skyrimo sėkmė, kai ryšiai nepavyksta, rodo, kad sprendėjas vis dar pasiekiamas, o tai kito pobūdžio nutekėjimas.

Esami lizdai reikalauja atsargumo. Programa gali toliau naudoti ryšį, kurį atidarė prieš atsijungimą, todėl iš pažiūros gyvas srautas gali neįrodyti, kad naujas kelias buvo leistas. Lizdų sąrašas rodo, ar ryšys senesnis už įvykį:

ss -tunp | grep -E 'ESTAB|SYN-SENT'
ip route get 198.51.100.7
resolvectl status | sed -n '1,20p'

Palyginkite lizdo pradžios laiką su atsijungimo laiko žyma. Už gedimą senesnis ryšys yra lizdo pakartotinio naudojimo įrodymas, o ne nutekėjimo, ir pranešimas apie jį kaip apie gedimą nukreipia kitą žmogų ieškoti klaidos, kurios nėra.

Užrašykite rezultatą tokia forma, kuri išgyvena atnaujinimą

Užrašykite trigerį, spragą sekundėmis, ar pavyko kokia nors neužblokuota užklausa, ar pavyko vardų skyrimas, taip pat kliento ir operacinės sistemos versijas. Šis penkių faktų rinkinys gali būti lyginamas tarp leidimų, ko prozos pastraipa negali.

Paleiskite tą patį testą dar kartą po kliento atnaujinimo ar profilio pakeitimo, nes blokavimo elgsena yra įgyvendinimo detalė ir ji juda. Įrašo tikslas yra pastebėti judėjimą prieš jam tampant incidentu, o ne vieną kartą sertifikuoti klientą.

Susiję straipsniai