Počítadla provozu OpenVPN versus diskové I/O: tři různá čísla
Bajty rozhraní, znaková počítadla procesu a zápisy na disk měří různou práci. Porovnejte je, než budete dimenzovat disky podle objemu tunelu.
Prožeňte velký soubor tunelem a počítadlo rozhraní stoupne o velikost souboru. Nic na tom čísle nenaznačuje, že stejný objem dorazil na disk. V těchto diskusích se porovnávají tři různá měření a odpovídají na tři různé otázky: kolik provozu přešlo přes síťovou vrstvu, kolik bajtů proces přečetl a zapsal systémovými voláními a kolik práce dorazilo do vrstvy úložiště.
Porovnávat první s třetím je obvyklá chyba a plodí buď fantomový problém s diskem, nebo plán kapacity, který ignoruje zápisy, jež skutečně probíhají. Ty tři jsou oddělitelné a každé má správné použití.
Tři čísla, která se slévají
Počítadla rozhraní popisují provoz zpracovaný na síťové vrstvě. Jsou správným číslem pro šířku pásma, pro velikost tunelu a pro fakturační modely, které oceňují tranzit.
Znaková počítadla procesu popisují bajty přenesené voláními čtení a zápisu na libovolném deskriptoru, včetně rour, terminálů a znakových zařízení. Jsou správným číslem pro otázku, jak je proces zaneprázdněn na hranici systémového volání, a nejsou diskovým účtem.
Počítadla úložiště popisují bajty, které se jádro pokusilo přenést do blokového zařízení nebo z něj. Jsou správným číslem pro plánování kapacity, s výhradou, že jádro dokumentuje vlastní meze účtování: čtení z cache se nestávají čteními z úložiště a zápis, který je později zrušen, se nestává dokončeným zápisem na zařízení.
| Measurement | Question it answers |
|---|---|
| Interface bytes | How much traffic crossed this layer |
rchar and wchar | How much data the process moved through system calls |
read_bytes and write_bytes | How much work reached the storage layer |
Proč deskriptor souboru není zápis na disk
VPN v uživatelském prostoru vyměňuje pakety s jádrem přes zařízení TUN, což je znakové zařízení, nikoli běžný soubor. Čtení z něj předává paket; zápis do něj paket vstřikuje. Žádná stránka obsahu souboru se nepřipravuje k uložení a žádná cesta souborového systému tu není zapojena.
Proto může vytížený tunel ukazovat obrovská znaková počítadla téměř bez počítadel úložiště. Proces ty bajty skutečně přenesl a jádro k tomu skutečně disk nepotřebovalo.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
První výstup čtěte jako kumulativní od spuštění procesu, ne jako rychlost. Druhý dává pohled rozhraní na stejný provoz. Velká mezera mezi nimi je očekávaná a neznamená únik, frontu ani chybnou konfiguraci.
Odkud bajty skutečně pocházejí
Trvalý výstup má vlastní rozpočet a řídí ho operace, nikoli payload. Podrobná úroveň logu, seznam klientů, který se často mění, nebo chyba opakující se v těsné smyčce mohou vytvářet značné zápisy, zatímco tunel přenáší jen velmi málo.
Stavový soubor je snímek přepisovaný v intervalu, takže jeho cena závisí na intervalu a na tom, kolik záznamů obsahuje. Není to běžící kopie provozu každého klienta a zkrácení intervalu mění objem zápisu, aniž by měnilo objem provozu.
Vlastnictví je důležité, když ty zápisy hledáte. Pokud služba předává zprávy logovacímu démonu, journal nebo logovací soubor zapisuje tento démon a bajty se objevují v jeho účtování, ne ve vlastních počítadlech procesu VPN. Pohled jen na proces VPN nevysvětlí ani diskovou aktivitu, ani její nepřítomnost.
Ostatní přispěvatele lze snadno přehlédnout: čtení certifikátů a konfigurace při startu, hooky, které zapisují vlastní záznamy, účetní pluginy, výpisy při pádu a nesouvisející zátěž na stejném hostiteli. Žádný z nich by se neměl odhadovat ztotožněním provozu tunelu se zapsanými bajty.
Jak číst každé počítadlo správně
Tři podrobnosti rozhodují, zda srovnání něco znamená. Identita procesu je důležitá, protože restartovaná služba vynuluje svá počítadla. Časový interval je důležitý, protože kumulativní číslo a graf za sekundu jsou různá měření. A jednotka je důležitá, protože aktuální velikost logovacího souboru také není rychlost.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Pokud máte podezření na skutečné zápisy payloadu, hledejte komponentu, jejímž úkolem je payload ukládat: nástroj na zachytávání paketů, proxy, které kešuje těla, plugin, který archivuje. Ty vytvářejí provoz do úložiště, který roste s tím, co se po nich žádá zaznamenat, a patří k samostatnému politickému rozhodnutí o retenci a přístupu.
Plánování kapacity se správným číslem
Dimenzujte cestu paketů síťovými čísly: propustnost, kryptografické zpracování a pohyb paměti. Dimenzujte úložiště podle voleb pozorovatelnosti, které jste skutečně učinili: úroveň logu, retence, interval stavu a jakékoli zachytávání, které je záměrně zapnuté.
Držet tyto dva rozpočty oddělené také usnadňuje čtení incidentů. Plný disk při skromném provozu tunelu ukazuje na logy, zachytávání nebo něco nesouvisejícího a počítadlo rozhraní to nikdy nevysvětlí. Nasycené spojení s tichým logem ukazuje jinam.
Srovnání, které stojí za to, je mezi měřeními stejného druhu. Bajty rozhraní proti bajtům rozhraní v čase vám řeknou o cestě. Zápisy na disk proti kapacitě úložiště vám řeknou o retenci. Křížové srovnání, provoz proti disku, jen vypadá smysluplně a nikdy jím není.