Počítadlá prevádzky OpenVPN verzus diskové I/O: tri rôzne čísla
Bajty rozhrania, znakové počítadlá procesu a zápisy na disk merajú rôznu prácu. Porovnajte ich, kým začnete dimenzovať disky podľa objemu tunela.
Prežeňte veľký súbor tunelom a počítadlo rozhrania stúpne o veľkosť súboru. Nič na tom čísle neznamená, že rovnaký objem dorazil na disk. V týchto diskusiách sa porovnávajú tri rôzne merania a odpovedajú na tri rôzne otázky: koľko prevádzky prešlo sieťovou vrstvou, koľko bajtov proces prečítal a zapísal systémovými volaniami a koľko práce dorazilo do vrstvy úložiska.
Porovnávať prvé s tretím je obvyklá chyba a plodí buď fantómový problém s diskom, alebo plán kapacity, ktorý ignoruje zápisy, ktoré skutočne prebiehajú. Tie tri sú oddeliteľné a každé má správne použitie.
Tri čísla, ktoré sa zlievajú
Počítadlá rozhrania opisujú prevádzku spracúvanú na sieťovej vrstve. Sú správnym číslom pre šírku pásma, pre veľkosť tunela a pre fakturačné modely, ktoré oceňujú tranzit.
Znakové počítadlá procesu opisujú bajty prenesené volaniami čítania a zápisu na ľubovoľnom deskriptore, vrátane rúr, terminálov a znakových zariadení. Sú správnym číslom pre otázku, ako je proces zaneprázdnený na hranici systémového volania, a nie sú diskovým účtom.
Počítadlá úložiska opisujú bajty, ktoré sa jadro pokúsilo preniesť do blokového zariadenia alebo z neho. Sú správnym číslom pre plánovanie kapacity, s výhradou, že jadro dokumentuje vlastné medze účtovania: čítania z vyrovnávacej pamäte sa nestávajú čítaniami z úložiska a zápis, ktorý sa neskôr zruší, sa nestáva dokončeným zápisom na zariadenie.
| 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 |
Prečo deskriptor súboru nie je zápis na disk
VPN v používateľskom priestore vymieňa pakety s jadrom cez zariadenie TUN, ktoré je znakovým zariadením, nie bežným súborom. Čítanie z neho odovzdáva paket; zápis do neho paket vstrekuje. Žiadna stránka obsahu súboru sa nepripravuje na uloženie a žiadna cesta súborového systému tu nie je zapojená.
Preto môže vyťažený tunel ukazovať obrovské znakové počítadlá takmer bez počítadiel úložiska. Proces tie bajty skutočne preniesol a jadro na to skutočne disk nepotrebovalo.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Prvý výstup čítajte ako kumulatívny od spustenia procesu, nie ako rýchlosť. Druhý dáva pohľad rozhrania na tú istú prevádzku. Veľká medzera medzi nimi je očakávaná a neznamená únik, front ani chybnú konfiguráciu.
Odkiaľ bajty skutočne pochádzajú
Trvalý výstup má vlastný rozpočet a riadia ho operácie, nie užitočné zaťaženie. Podrobná úroveň logu, zoznam klientov, ktorý sa často mení, alebo chyba opakujúca sa v tesnej slučke môžu vytvárať značné zápisy, kým tunel prenáša veľmi málo.
Stavový súbor je snímka prepisovaná v intervale, takže jeho cena závisí od intervalu a od toho, koľko záznamov obsahuje. Nie je to bežiaca kópia prevádzky každého klienta a skrátenie intervalu mení objem zápisu bez zmeny objemu prevádzky.
Vlastníctvo je dôležité, keď tie zápisy hľadáte. Ak služba odovzdáva správy logovaciemu démonovi, journal alebo logovací súbor zapisuje tento démon a bajty sa objavujú v jeho účtovníctve, nie vo vlastných počítadlách procesu VPN. Pohľad len na proces VPN nevysvetlí ani diskovú aktivitu, ani jej neprítomnosť.
Ostatných prispievateľov možno ľahko prehliadnuť: čítanie certifikátov a konfigurácie pri štarte, hooky, ktoré zapisujú vlastné záznamy, účtovné pluginy, výpisy pri páde a nesúvisiace záťaže na tom istom hostiteli. Žiadny z nich by sa nemal odhadovať stotožnením prevádzky tunela so zapísanými bajtmi.
Ako čítať každé počítadlo správne
Tri podrobnosti rozhodujú, či porovnanie niečo znamená. Identita procesu je dôležitá, lebo reštartovaná služba vynuluje svoje počítadlá. Časový interval je dôležitý, lebo kumulatívne číslo a graf za sekundu sú rôzne merania. A jednotka je dôležitá, lebo aktuálna veľkosť logovacieho súboru tiež nie je rýchlosť.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Ak máte podozrenie na skutočné zápisy užitočného zaťaženia, hľadajte komponent, ktorého úlohou je ukladať užitočné zaťaženie: nástroj na zachytávanie paketov, proxy, ktoré kešuje telá, plugin, ktorý archivuje. Tie vytvárajú prevádzku do úložiska, ktorá rastie s tým, čo sa od nich žiada zaznamenať, a patria k samostatnému politickému rozhodnutiu o retencii a prístupe.
Plánovanie kapacity so správnym číslom
Dimenzujte cestu paketov sieťovými číslami: priepustnosť, kryptografické spracovanie a pohyb pamäte. Dimenzujte úložisko podľa volieb pozorovateľnosti, ktoré ste skutočne urobili: úroveň logu, retencia, interval stavu a akékoľvek zachytávanie, ktoré je zámerne zapnuté.
Držať tieto dva rozpočty oddelene tiež uľahčuje čítanie incidentov. Plný disk pri skromnej prevádzke tunela ukazuje na logy, zachytávania alebo niečo nesúvisiace a počítadlo rozhrania to nikdy nevysvetlí. Nasýtené spojenie s tichým logom ukazuje inam.
Porovnanie, ktoré stojí za to, je medzi meraniami rovnakého druhu. Bajty rozhrania proti bajtom rozhrania v čase vám povedia o ceste. Zápisy na disk proti kapacite úložiska vám povedia o retencii. Krížové porovnanie, prevádzka proti disku, len vyzerá zmysluplne a nikdy ním nie je.