Sari la conținut
Logrotate: gestionarea automată a jurnalelor de server pe Linux

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.timer

Structura 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.conf

Configuraț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 nginx

Configurarea 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-usage

Monitorizarea 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-usage

Concluzie

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.

Înapoi sus
Your Cart

Your cart is empty.