Log in den RAM verlagern: Wie gross?

Hi.
Ich habe bei meinem Raspberry die *.tmp und *.log Dateien in den RAM verlegt, mit der Bearbeitung von /etc/fstab, wie folgt:

tmpfs /tmp tmpfs defaults,size=8M 0 0
tmpfs /var/tmp tmpfs defaults,size=8M 0 0
tmpfs /var/log tmpfs defaults,size=8M 0 0

Logwatch schickt mir täglich eine Mail, jedoch nach 2 Tagen eine mit den Fehlern

[gzip: stdout: No space left on device -- error: failed to compress log /var/log/pihole.log.1] und 
[gzip: stdout: No space left on device -- error: failed to compress log /var/log/pihole-FTL.log.1]

Deshalb funktioniert u.a. die Live-Ansicht von pihole.log nicht mehr.
Dazu habe ich nun einige Fragen.
Wird die *.log irgendwann ersetzt oder immer weiter verlängert? Beim verlängern reichen 8 MB logischerweise irgendwann nicht mehr. Wenn ersetzt, wann? Wie gross sollte die RAM-Disk wohl sein? Reicht es dann, statt
tmpfs /var/log tmpfs defaults,size=8M 0 0
durch dieses zu ersetzen
tmpfs /var/log tmpfs defaults,size=16M 0 0

Pi-hole rotiert standardmässg seine Logfiles:

Das musst Du anhand Deines erwarteten Nutzungsverhaltens selbst festlegen. Je mehr Geräte Du hast, und je mehr DNS-Anfragen ein Gerät stellt, umso mehr muss Pi-hole loggen.

Ich würde Pi-hole einfach mal eine Zeit lang (z.B. mindestens doppelte Logrotate-Spanne) normal laufen lassen, mir die Dateien anschauen und daraus die Grössen ableiten.

Eventuell kann @MichaIng hierzu ein paar Erfahrungswerte beisteuern - ist bei DietPi nicht Ram-Logging eine Standard-Einstellung?

Jep DietPi hat standardmäßig /var/log als tmpfs mount. Wir überschreiben allerdings stündlich die logs mit einem leeren redirect: > /var/log/beispiel.log

Das tmpfs war früher standardmäßig 20 MiB groß, aber in der Tat war das in seltenen Fällen nicht genug, sodass wir den Standard auf 50 MiB erhöht haben. Ich meine sogar das war wegen Pi-hole, aber müsste da noch mal die alten issues durchforsten.

Ein kleiner Hinweise kommt von dem was wir früher mit der /var/log/pihole.log gemacht haben. Ich meine das war früher die einzige query log (?) und die sollte natürlich nicht stündlich geleert werden. Deshalb hatten wir diese log speziell behandelt: Sie wurde nicht stündlich sondern nur täglich geleert. Das hat wohl in seltenen Fällen nicht gereicht, sodass wir sie zusätzlich komplett geleert haben, falls sie über 1/3 der tmpfs Größe (also über ~17 MiB) erreicht hatte. Mit anderen Worten es kam vor, dass pihole.log an einem Tag 17 MiB überschritten hat, womöglich weit, sodass die 50 MiB von allen logs zusammen erreicht wurden, was natürlich zu Fehlermeldungen und evtl. ausfallenden Prozessen geführt hat. Aber das sind natürlich extreme Ausnahmefälle bei sehr großen Clientzahlen.

  • Aber, da die query logs, welche im web UI einsehbar sind, nun in einer gesonderten Datenbank gespeichert werden, kann pihole.log im Prinzip deaktiviert werden, und sollte es im Falle von RAMlog auch: pihole -l off

Generell, da tmpfs den erlaubten Speicher nicht sofort voll belegt, sondern es nur eine Obergrenze ist, kannst du das ruhig erst mal schön groß wählen, halt so dass es nicht gerade nicht zu OOM Kills führen kann.

Schraube definitiv an den /etc/logrotate.d/ Konfigurationen, verringere die maximale Anzahl an gespeicherten Rotationen, erhöhe evtl. die Rotationsintervalle etc, je nachdem wie groß welche Logdateien so werden. Selbes gilt für log verbosity Einstellungen der einzelnen Programme, wo möglich.

Und falls du rsyslog oder einen anderen syslog daemon installiert hast, du jedoch systemd als init-system nutzt (systemctl), lösche den syslog daemon, e.g.: apt purge rsyslog
Mit systemd ist ohnehin immer systemd-journald aktiv, abrufbar über journalctl (z.B. journalctl -u pihole-FTL), sodass plain text syslogs nicht zusätzlich nötig sind, sondern nur doppelt gemoppelt (und wegen /var/log/syslog + /var/log/daemon.log + /var/log/message sogar teils dreifach und mehr...). systemd-journald logs werden standardmäßig ebenfalls im RAM gehalten.

Und noch etwas:

Verlege /var/tmp definitiv nicht ins RAM! Der FHS entsprechend ist es für Dateien welche einen Reboot überleben sollen, und damit rechnen viele Programme. /tmp hingegen ist für Dateien vorgesehen, welche den Reboot nicht überleben müssen, aber dieses ist schon standardmäßig ein tmpfs mount. Nur im Falle eines R/O Systems macht das Sinn, allerdings wäre dann ein overlayfs konsequenter.

1 Like

Vielen Dank für eure wertvollen Tipps.
/var/tmp habe ich gleich mal rausgenommen und auch tmpfs /var/log auf 16MB hochgesetzt.
Logrotate: Habe mich natürlich sofort hingesetzt und alle Informationen gelesen, gibt sogar ein Handbuch in deutsch (LOGROTATE(1) Handbuchseite). Damit erübrigt sich natürlich mein Problem, weil ich alles konfigurieren kann, wie ich will.
Doch in der Config-Datei /etc/logrotate.conf taucht PiHole nicht auf, auch nicht im Verzeichnis logrotate.d, die Einstellung dafür fand ich bei /etc/pihole/logrotate. Wie findet logrotate die Dateien?
Naja, ich werd mal n bisschen rumprobieren.
Danke für eure Antworten

Die Datei pihole-FTL.db wird normalerweise auch jede Minute neu geschrieben.

Um die Daten nicht zu verlieren, müsste man ein Skript beim booten vor dem piHole start haben, welches einmal die Sicherungen in den Ram kopiert. Ist das möglich?

Dann noch per cron ein Skript, welches die Daten z.B. täglich 1x sichert. So hätte man wenigstens keinen kompletten Verlust des Logs, wenn der PI einmal unerwartet ausfällt + den Vorteil, dass wenig geschrieben wird, die SD wird geschohnt.

Vielleicht ist es auch noch eine Option Zram einzurichten um mehr Platz zu haben.