Systemd este managerul de servicii și inițializare standard pe toate distribuțiile Linux majore: Ubuntu, Debian,…

Logrotate: gestionarea automată a jurnalelor de server pe Linux
Pe orice server Linux activ, jurnalele de sistem și ale aplicațiilor cresc continuu. Nginx, Apache, MySQL, PHP-FPM, Postfix și alte servicii scriu constant în fișierele de jurnal. Fără o politică de rotație și ștergere automată, aceste fișiere pot umple complet discul în câteva săptămâni sau luni, ducând la oprirea serviciilor sau la crash-ul serverului.
Logrotate este instrumentul standard pe Linux pentru gestionarea automată a jurnalelor: rotație periodică, comprimare, retenție configurabilă și notificarea serviciilor după rotație.
Logrotate: gestionarea automată a jurnalelor de server pe Linux
Logrotate rulează zilnic printr-un timer systemd sau un job cron și verifică fiecare fișier de jurnal configurat față de regulile definite. Dacă fișierul îndeplinește criteriile de rotație (dimensiune, vechime sau programare), logrotate îl redenumește, creează un fișier nou și aplică acțiunile post-rotație.
Pe Ubuntu/Debian modern, logrotate este declanșat de systemd timer (logrotate.timer), nu de cron. Verificați că este activ:
systemctl status logrotate.timer
cat /lib/systemd/system/logrotate.timerStructura configurației logrotate
Configurația globală se află în /etc/logrotate.conf. Configurațiile per-serviciu se adaugă în /etc/logrotate.d/ ca fișiere separate, câte unul per aplicație. Când instalați un pachet software (nginx, MySQL, etc.), acesta adaugă automat propriul fișier de configurare logrotate în /etc/logrotate.d/.
# Vizualizati configuratiile existente
ls /etc/logrotate.d/
# Vizualizati configuratia globala
cat /etc/logrotate.confConfigurație logrotate pentru nginx
Configurația implicită nginx din /etc/logrotate.d/nginx poate fi insuficientă pentru servere cu trafic ridicat. Ajustați-o pentru retenție mai lungă și rotație mai frecventă:
/var/log/nginx/*.log {
daily
rotate 30
size 100M
maxsize 100M
compress
delaycompress
missingok
notifempty
dateext
dateformat -%Y-%m-%d
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
endscript
}Explicarea directivelor principale:
- daily – rotație zilnică. Alternativele sunt weekly, monthly.
- rotate 30 – păstrați 30 de fișiere rotite (30 de zile de jurnal).
- size 100M – rotiți dacă fișierul depășește 100 MB, indiferent de programare.
- maxsize 100M – rotație obligatorie la 100 MB chiar dacă programarea nu a venit.
- compress – comprimați fișierele rotite cu gzip.
- delaycompress – amânați compresia cu o rotație (util pentru servicii care scriu în fișierul vechi după rotație).
- missingok – nu generați eroare dacă fișierul de jurnal lipsește.
- notifempty – nu rotiți fișierele goale.
- dateext – adăugați data ca sufix la fișierele rotite.
- postrotate/endscript – comenzi executate după rotație. Pentru nginx, semnalul USR1 determină reîncărcarea jurnalelor fără repornire.
Configurație logrotate pentru MySQL/MariaDB
/var/log/mysql/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
sharedscripts
postrotate
test -x /usr/bin/mysqladmin || exit 0
# Reincarca MySQL sa foloseasca noul fisier de jurnal
mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
endscript
}Configurație pentru jurnalele aplicațiilor custom
Dacă rulați aplicații PHP, Python sau Node.js care scriu propriile jurnale, adăugați o configurație în /etc/logrotate.d/:
# /etc/logrotate.d/aplicatie-mea
/var/log/aplicatie-mea/*.log {
daily
rotate 30
size 50M
compress
delaycompress
missingok
notifempty
create 0640 www-data www-data
dateext
postrotate
systemctl reload aplicatie-mea 2>/dev/null || true
endscript
}Directiva create definește permisiunile și proprietarul fișierului de jurnal nou creat după rotație.
Testarea configurației logrotate
Testați o configurație fără să aplicați efectiv rotația (mod debug):
# Testati configuratia fara sa o aplicati
sudo logrotate --debug /etc/logrotate.d/nginx
# Rulati manual o rotatie (util pentru testare)
sudo logrotate --force /etc/logrotate.d/nginx
# Verificati jurnalul logrotate
cat /var/lib/logrotate/status | grep nginxConfigurarea jurnalelor systemd (journald)
Serviciile gestionate de systemd scriu în jurnalul binar journald, nu în fișiere text. Logrotate nu gestionează journald. Configurați retenția journald separat în /etc/systemd/journald.conf:
[Journal]
# Dimensiunea maxima a jurnalului pe disc
SystemMaxUse=500M
# Dimensiunea maxima per fisier de jurnal
SystemMaxFileSize=50M
# Retenție maxima in zile
MaxRetentionSec=30day
# Aplicati configuratia
sudo systemctl restart systemd-journald
# Verificati spatiul folosit de jurnal
journalctl --disk-usageMonitorizarea spațiului folosit de jurnale
# Spatiu total folosit de /var/log
du -sh /var/log
# Top fisiere de jurnal dupa dimensiune
du -sh /var/log/* | sort -rh | head -10
# Spatiu jurnal systemd
journalctl --disk-usageConcluzie
Logrotate configurat corect pentru toate serviciile serverului previne umplerea discului și menține jurnalele accesibile pentru depanare fără să consume spațiu excesiv. Regula de bază: retenție de 14-30 de zile cu comprimare, rotație zilnică sau la atingerea unui prag de dimensiune de 100 MB. Verificați că jurnalele systemd sunt și ele configurate cu o limită de dimensiune explicită.
Serverele noastre VPS includ stocare NVMe SSD cu spațiu generos, dar o politică de rotație a jurnalelor bine configurată rămâne esențială pentru orice server de producție.


