Woher das Plattenwachstum eines VPN-Servers kommt und wie man es begrenzt
Log-Wachstum, ein umbenannter Inode und ein unbegrenztes Journal sehen alle wie eine volle Platte aus. Messen Sie die Rate, begrenzen Sie den Schreiber und prüfen Sie die Grenze nach einem Neustart.
Der Tunnel nimmt keine Verbindungen mehr an, der Dienst startet zweimal neu, und danach erscheint nichts in seinem Log. Diese Stille ist der Hinweis, denn das Log hat die Platte gefüllt, und der Daemon hat keinen Ort, um den Fehler zu schreiben, auf den Sie warten. Jeder lang laufende Dienst kann in diesen Zustand geraten, und ein Verzeichnis namens logs zu löschen hilft selten. Die dauerhafte Lösung besteht darin zu wissen, welcher Speicher gewachsen ist, wer seine Aufbewahrung verantwortet und ob der Schreiber den Platz tatsächlich freigegeben hat.
Finden Sie den Speicher, der gewachsen ist, und die Rate, mit der er wuchs
Beginnen Sie mit zwei Zahlen, die man leicht vergisst: freie Blöcke und freie Inodes. Ein Dateisystem kann reichlich Platz melden und dennoch einen Schreibvorgang ablehnen, weil keine Inodes mehr übrig sind, was passiert, wenn ein Dienst eine Datei pro Sitzung anlegt. Fragen Sie beide Werte auf demselben Volume ab, denn die Antworten können am selben Nachmittag auseinandergehen. Tun Sie es, solange der Host gesund ist, damit die Zahlen den Normalbetrieb beschreiben und nicht einen Ausfall.
df -h /var
df -i /varOrdnen Sie das Wachstum dann einem Verursacher zu. Die eigene Verbrauchszahl des Journals deckt nur das Journal ab und wird niemals einen Daemon sehen, der in einen Pfad aus seiner Konfigurationsdatei schreibt.
journalctl --disk-usageWachstum über die Zeit sagt mehr als jede einzelne Messung. Ein eingeschaltetes Debug-Level, eine Wiederholungsschleife, die jeden Versuch protokolliert, oder eine Mitschnittdatei, die niemand gestoppt hat: Jedes davon kann in einem Moment gewöhnlich und eine Stunde später alarmierend aussehen. Nehmen Sie eine Messung, warten Sie eine geschäftige Phase ab, nehmen Sie eine zweite und teilen Sie durch das Intervall. Eine Rate, die Sie benennen können, macht aus Kapazität eine Entscheidung statt einen Brand.
Was die Rotation mit einer offenen Datei macht
Eine Logdatei ist ein Name, der auf einen Inode zeigt, und der Platz kommt erst zurück, wenn das letzte offene Handle geschlossen wird. Benennen Sie die Datei um, und der Schreiber füllt weiter denselben Inode; löschen Sie sie, und der Schreiber füllt weiter einen Inode ganz ohne Namen. Dieser Zustand ist der Grund, warum „ich habe die Datei gelöscht, und die Platte blieb voll“ Dateideskriptoren beschreibt und kein defektes Dateisystem. Den Schreiber neu zu starten oder einen Rotationsmodus zu wählen, der die Datei wieder öffnet, gibt die Blöcke tatsächlich zurück.
lsof +L1 | headDie Richtlinie gehört zur Komponente, die die Datei schreibt. Das Journal erzwingt seine eigenen Speichergrenzen aus seiner Konfigurationsdatei, während ein dateibasierter Dienst sich meist auf logrotate verlässt, entweder mit einer create-Regel plus einem Wiederöffnungssignal oder mit einem Modus zum Kürzen an Ort und Stelle, wenn der Schreiber nicht wieder öffnen kann. Bestätigen Sie die Entscheidung zunächst, ohne etwas zu ändern:
logrotate -d /etc/logrotate.confWohin die Grenze gehört und wie groß sie sein sollte
Setzen Sie die Grenze dort, wo der Schreiber konfiguriert ist, nicht am Einhängepunkt. Eine Quote auf dem gesamten Volume schützt den Host, sagt aber nichts darüber, welcher Dienst zuerst ausfällt, und ein globales Aufräumskript neigt dazu, die Beweise zu löschen, die der nächste Vorfall braucht. Eine Journal-Grenze, eine Rotationsanzahl mit einer Maximalgröße und die Aufbewahrung der Anwendung begrenzen jeweils einen Erzeuger. Zusammen begrenzen sie die Summe; einzeln ist jede eine Vermutung.
Bemessen Sie diese Grenze an der Aufbewahrung, die Sie vertreten können, nicht am freien Platz. Wenn eine Überprüfung eine Woche Verbindungsversuche braucht, muss das Journal eine Woche bei der geschäftigsten erwarteten Rate halten, und diese Rate ist die zuvor gemessene Zahl.
Debug-Logging ist ein temporärer Modus mit aufgezeichneter Startzeit, kein Speicherplan. Behalten Sie die Datenschutzfrage in derselben Entscheidung, denn Verbindungsprotokolle tragen Adressen und Kennungen. Eine längere Aufbewahrung ist auch eine Entscheidung zur Datenverarbeitung und sollte von jemandem getroffen werden, der beide Einschränkungen kennt.
Prüfen Sie die Grenze nach einem Neustart
Eine Änderung der Aufbewahrung, die bis zum nächsten Neustart hält, ist keine Änderung. Starten Sie den Schreiber neu, bestätigen Sie, dass die neue Grenze greift, und prüfen Sie, dass die Rotation danach noch läuft. Beim Journal beantworten ein Neustart und eine Verbrauchsmessung beide Fragen:
systemctl restart systemd-journald
journalctl --disk-usageFühren Sie bei einem dateibasierten Dienst den Rotationsjob einmal von Hand aus und bestätigen Sie, dass die Datei ersetzt und der Deskriptor wieder geöffnet wurde. Ein Schreiber, der das alte Handle behält, besteht eine oberflächliche Prüfung und scheitert beim nächsten Mal, wenn das Volume voll wird. Beobachten Sie während des Tests den freien Platz, denn eine Datei, die kleiner wurde, während der Platz nicht zurückkam, bedeutet, dass der alte Inode noch gehalten wird.
Vergleichen Sie die nächste Messung mit dieser
Kommen Sie nach einer Woche zurück und vergleichen Sie die Wachstumsrate mit der aufgezeichneten. Eine passende Rate bedeutet, dass die Grenze hält und die Last stabil ist; eine verdoppelte Rate bedeutet, dass sich etwas geändert hat, und die nützliche Frage ist, was. Lesen Sie zuerst den Loginhalt auf wiederholte Fehler, denn eine Wiederholungsschleife ist sowohl Symptom als auch Ursache für Volumen. Prüfen Sie dann, was neu aktiviert wurde, einschließlich Debug-Level, die während eines Vorfalls eingeschaltet und nie ausgeschaltet wurden.
Halten Sie Sicherungen vom selben Volume fern, oder akzeptieren Sie, dass eine volle Platte die Sicherung mitnimmt. Eine Kopie auf dem Host, den sie schützt, ist kein Wiederherstellungsplan, und ihre Aufbewahrung braucht eine eigene Antwort.
Schreiben Sie auf, was aufbewahrt wird, wo, wie lange und wer es entfernt. Dieser Satz ist das Ergebnis, und er ist der einzige Teil dieser Arbeit, der den nächsten Neustart überlebt.