OpenVPN-Verkehrszähler gegen Festplatten-I/O: drei verschiedene Zahlen
Interface-Bytes, Zeichenzähler des Prozesses und Schreibvorgänge auf die Festplatte messen unterschiedliche Arbeit. Vergleichen Sie sie, bevor Sie Festplatten nach dem Tunnelvolumen bemessen.
Schicken Sie eine große Datei durch einen Tunnel, und der Interface-Zähler steigt um die Dateigröße. Nichts an dieser Zahl bedeutet, dass dasselbe Volumen eine Festplatte erreicht hat. In diesen Diskussionen werden drei verschiedene Messungen verglichen, und sie beantworten drei verschiedene Fragen: wie viel Verkehr eine Netzwerkschicht überquert hat, wie viele Bytes ein Prozess über Systemaufrufe gelesen und geschrieben hat und wie viel Arbeit die Speicherschicht erreicht hat.
Die erste mit der dritten zu vergleichen ist der übliche Fehler, und er erzeugt entweder ein Phantom-Festplattenproblem oder einen Kapazitätsplan, der die Schreibvorgänge ignoriert, die wirklich stattfinden. Die drei sind trennbar, und jede hat eine korrekte Verwendung.
Drei Zahlen, die vermischt werden
Interface-Zähler beschreiben Verkehr, der auf einer Netzwerkschicht abgewickelt wird. Sie sind die richtige Zahl für Bandbreite, für die Größe eines Tunnels und für Abrechnungsmodelle, die Transit bepreisen.
Zeichenzähler eines Prozesses beschreiben Bytes, die über Lese- und Schreibaufrufe an beliebigen Deskriptoren bewegt wurden, einschließlich Pipes, Terminals und Zeichengeräten. Sie sind die richtige Zahl für die Frage, wie beschäftigt ein Prozess an der Grenze des Systemaufrufs ist, und sie sind keine Speicherrechnung.
Speicherzähler beschreiben Bytes, die der Kernel versucht hat, zu einem Blockgerät oder von ihm zu bewegen. Sie sind die richtige Zahl für die Kapazitätsplanung, mit der Einschränkung, dass der Kernel seine eigenen Abrechnungsgrenzen dokumentiert: Zwischengespeicherte Lesevorgänge werden nicht zu Speicherlesevorgängen, und ein Schreibvorgang, der später abgebrochen wird, wird nicht zu einem abgeschlossenen Geräteschreibvorgang.
| 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 |
Warum ein Dateideskriptor kein Schreibvorgang auf die Platte ist
Ein VPN im Benutzerraum tauscht Pakete über ein TUN-Gerät mit dem Kernel aus, das ein Zeichengerät und keine reguläre Datei ist. Lesen daraus übergibt ein Paket; Schreiben hinein fügt eines ein. Es gibt keine Seite mit Dateiinhalt, die für die Speicherung bereitgestellt wird, und keinen beteiligten Dateisystempfad.
Deshalb kann ein beschäftigter Tunnel riesige Zeichenzähler bei fast keinen Speicherzählern zeigen. Der Prozess hat diese Bytes wirklich bewegt, und der Kernel brauchte dafür wirklich keine Festplatte.
cat /proc/$(pgrep -n openvpn)/io
ip -s link show tun0
Lesen Sie die erste Ausgabe als kumulativ seit dem Prozessstart, nicht als Rate. Die zweite liefert die Interface-Sicht auf denselben Verkehr. Eine große Lücke zwischen beiden ist zu erwarten und deutet nicht auf ein Leck, eine Warteschlange oder eine Fehlkonfiguration hin.
Woher die Bytes wirklich kommen
Dauerhafte Ausgabe hat ihr eigenes Budget, und sie wird von Vorgängen angetrieben, nicht von Nutzlast. Eine ausführliche Logstufe, eine Kundenliste, die sich oft ändert, oder ein Fehler, der sich in einer engen Schleife wiederholt, können erhebliche Schreibvorgänge erzeugen, während der Tunnel sehr wenig trägt.
Eine Statusdatei ist eine Momentaufnahme, die in einem Intervall neu geschrieben wird, sodass ihre Kosten vom Intervall und davon abhängen, wie viele Datensätze sie enthält. Sie ist keine laufende Kopie des Verkehrs jedes Clients, und ein kürzeres Intervall ändert das Schreibvolumen, ohne das Verkehrsvolumen zu ändern.
Eigentümerschaft zählt, wenn Sie diese Schreibvorgänge suchen. Wenn der Dienst Nachrichten an einen Logging-Daemon übergibt, wird das Journal oder die Logdatei von diesem Daemon geschrieben, und die Bytes erscheinen in dessen Abrechnung statt in den eigenen Zählern des VPN-Prozesses. Nur auf den VPN-Prozess zu schauen erklärt weder die Festplattenaktivität noch ihr Fehlen.
Andere Beiträge werden leicht übersehen: Zertifikat- und Konfigurationslesevorgänge beim Start, Hooks, die eigene Datensätze schreiben, Abrechnungs-Plugins, Absturzabbilder und unabhängige Arbeitslasten auf demselben Host. Nichts davon sollte geschätzt werden, indem Tunnelvekehr mit geschriebenen Bytes gleichgesetzt wird.
Jeden Zähler richtig lesen
Drei Details entscheiden, ob ein Vergleich etwas bedeutet. Die Identität des Prozesses zählt, weil ein neu gestarteter Dienst seine Zähler zurücksetzt. Das Zeitintervall zählt, weil eine kumulative Zahl und ein Diagramm pro Sekunde verschiedene Messungen sind. Und die Einheit zählt, weil die aktuelle Größe einer Logdatei ebenfalls keine Rate ist.
grep -E 'rchar|wchar|read_bytes|write_bytes' /proc/$(pgrep -n openvpn)/io
du -sh /var/log/openvpn 2>/dev/null
journalctl --disk-usage
Wenn Sie echte Nutzlastschreibvorgänge vermuten, suchen Sie eine Komponente, deren Aufgabe es ist, Nutzlast zu speichern: ein Werkzeug zur Paketaufzeichnung, einen Proxy, der Bodies zwischenspeichert, ein Plugin, das archiviert. Diese erzeugen Speicherverkehr, der mit dem skaliert, was von ihnen aufgezeichnet werden soll, und sie gehören zu einer separaten politischen Entscheidung über Aufbewahrung und Zugriff.
Kapazität mit der richtigen Zahl planen
Bemessen Sie den Paketpfad mit Netzwerkzahlen: Durchsatz, kryptografische Verarbeitung und Speicherbewegung. Bemessen Sie den Speicher mit den Observability-Entscheidungen, die Sie tatsächlich getroffen haben: Logstufe, Aufbewahrung, Statusintervall und jede absichtlich aktivierte Aufzeichnung.
Diese beiden Budgets getrennt zu halten macht auch Vorfälle leichter lesbar. Eine volle Festplatte bei mäßigem Tunnelvekehr deutet auf Logs, Aufzeichnungen oder etwas Unabhängiges hin, und der Interface-Zähler wird das nie erklären. Eine gesättigte Verbindung mit einem stillen Log deutet in die andere Richtung.
Der Vergleich, der sich lohnt, ist der zwischen Messungen derselben Art. Interface-Bytes gegen Interface-Bytes über die Zeit sagen Ihnen etwas über den Pfad. Speicherschreibvorgänge gegen Speicherkapazität sagen Ihnen etwas über die Aufbewahrung. Der Quervergleich, Verkehr gegen Festplatte, wirkt nur bedeutsam und ist es nie.