Rotation ran on one machine of four; the others carried package and fail2ban rules nothing read, and one log had reached 4.9 GB. The module installs logrotate, owns /etc/logrotate.conf whole (the distribution's base plus compress/delaycompress, dropping a hand-set olddir that collides same-named logs) and enables logrotate.timer. Seven tools from a Go bundle, the journal's usage and vacuum among them (to-be 42 Phase 1).
2.7 KiB
2.7 KiB
logrotate
Log rotation on every machine (novox/hq to-be 42 Phase 1, research 027).
What it owns
- The
logrotatepackage. /etc/logrotate.conf, written whole. It is the distribution's base (weekly, four kept,create, the.pac*taboo,include /etc/logrotate.d, thewtmp/btmprules) pluscompressanddelaycompress. A rotated log is compressed one rotation late, so a program still writing to the file it had open loses nothing. The manifest test dry-runs it withlogrotate -dwhere logrotate is installed. The host keeps the machine's previous file once.logrotate.timer, running and enabled: daily, catching up after downtime.
What it improves
- Rotation ran on one machine of four. The other three had rules in
/etc/logrotate.d, put there by their packages (nginx, postgresql, samba, cups) and by the mesh's ownfail2banmodule, and nothing that read them. On the anchor, a web server's access log had reached 4.9 GB and the intrusion prevention log 239 MB. - Rotated logs are compressed everywhere.
- The one machine that did rotate had
olddir /var/log/archiveset by hand. That flattens logs from different directories into one, where two logs with the same name collide. It is dropped./var/log/archiveand what is in it are left as found.
What it leaves found
- Every file in
/etc/logrotate.d. They belong to their packages and modules. - The journal's own bounds (
journald.conf). journald runs on its defaults everywhere: 10 % of the filesystem, capped at 4 GB. The journal tools below read and vacuum it.
Tools
| tool | answers | |
|---|---|---|
logrotate_status |
r | each log's last rotation (the status file, through sudo -n), the timer, and the last run; "never run" where it has not |
logrotate_configs |
r | the base's global settings, and each rule file with the logs it rotates |
logrotate_check |
r | logrotate -d on the whole configuration: errors and warnings, changing nothing |
logrotate_big_logs |
r | the largest files under /var/log, with the total and the journal's share; journal files listed on request |
logrotate_force |
a | logrotate -f -v on one rule file, with the base's globals in front so it rotates as the nightly run would, or on every log |
logrotate_journal_usage |
r | journalctl --disk-usage and the journald settings that bound it |
logrotate_journal_vacuum |
a | journalctl --vacuum-size/--vacuum-time, with what each directory freed |
Forcing one rule file alone would leave out what the base sets. A rule that names no count would then keep no old logs at all. So the tool writes the base's globals to a file that root owns, which is the only kind logrotate running as root will read, and passes it in front of the rule.