Rotacija i kompresija logova pomoću logrotatea
- Razina: Srednja
- Procijenjeno vrijeme: ~20 minuta
- Cilj: Konfigurirati logrotate za automatsko komprimiranje i rotiranje log datoteka aplikacije kako bi se spriječilo iscrpljivanje prostora na disku.
Uvod
Logovi – su kritični dio upravljanja bilo kojom produkcijskom aplikacijom: bez njih, pouzdano razumijevanje što je pošlo po zlu i što učiniti u vezi s tim bilo bi vrlo teško. Zauzeta aplikacija može generirati tisuće unosa po minuti, a svi se oni obično pohranjuju u datoteke. Moramo pravovremeno komprimirati i brisati stare logove kako bismo izbjegli iscrpljivanje prostora na disku. U ovom vodiču ćemo konfigurirati logrotate na Linux serveru.
Što je logrotate?
logrotate je Linux alat dizajniran za pojednostavljenje administracije sustava koji generiraju veliki broj log datoteka. Omogućuje automatsko komprimiranje, rotiranje i brisanje logova. Obično se pokreće dnevno, tjedno ili mjesečno putem cron-a ili systemd timera.
Preduvjeti
Prije nego što počnete, provjerite jesu li ispunjeni sljedeći uvjeti:
- Operativni sustav: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12, ili CentOS/RHEL 7+
- logrotate: verzija 3.x (provjerite u koraku 1)
- Pristup: sudo ili root pristup serveru
- Potrebno znanje: sigurno korištenje Linux naredbenog retka i osnovno uređivanje datoteka
Korak 1: Provjera instalacije logrotate-a
Za provjeru instalacije, jednostavno pokrenite:
logrotate --version
Očekivani izlaz:
logrotate 3.19.0 Zadana naredba za slanje pošte: /usr/bin/mail Zadana naredba za kompresiju: /bin/gzip Zadana naredba za dekompresiju: /bin/gunzip Zadana ekstenzija za kompresiju: .gz Zadana putanja datoteke stanja: /var/lib/logrotate/status
Ako naredba nije pronađena – logrotate nije instaliran. Instalirajte ga:
Debian/Ubuntu:
sudo apt install logrotate
CentOS/RHEL:
sudo yum install logrotate
Korak 2: Razumijevanje strukture konfiguracije
Glavna konfiguracija se nalazi na /etc/logrotate.conf – za sada ćemo je ostaviti nepromijenjenu. Naša pravila za specifične usluge će ići u /etc/logrotate.d/ – zasebna datoteka treba biti postavljena tamo za svaku uslugu.
Prije dodavanja bilo čega, provjerite postoji li već konfiguracija za vašu uslugu:
ls /etc/logrotate.d/
Za popularne usluge kao što su nginx ili Apache, konfiguracije su obično već prisutne. Ako su nginx ili apache2 već tamo – otvorite tu datoteku i prilagodite broj rotacija i postavke kompresije prema vašim potrebama, umjesto da stvarate duplikat.
Korak 3: Dodavanje konfiguracije usluge
Pretpostavimo da postoji prilagođena aplikacija i njeni logovi se nalaze na /opt/myapp/*.log.
Kreirajte i otvorite datoteku:
sudo nano /etc/logrotate.d/myapp
Zalijepite sljedeće unutra:
/opt/myapp/*.log { daily missingok rotate 14 compress delaycompress notifempty create 0640 www-data adm sharedscripts postrotate systemctl reload myapp > /dev/null 2>&1 || true endscript }
Ova konfiguracija upućuje logrotate da:
- daily – rotira logove dnevno; možete također specificirati
weeklyilimonthly. - missingok – ne prijavljuje grešku ako log datoteka nedostaje.
- rotate 14 – zadrži 14 rotiranih kopija prije brisanja.
- compress – komprimira rotirane logove koristeći gzip.
- delaycompress – ne komprimira najnoviju rotaciju; korisno ako aplikacija još uvijek drži datoteku otvorenom.
- notifempty – preskoči rotaciju ako je log datoteka prazna.
- create 0640 www-data adm – kreira novu praznu log datoteku s navedenim dozvolama, vlasnikom i grupom. Vlasnik bi trebao odgovarati korisniku pod kojim aplikacija radi (u Debian-baziranim sustavima često
www-data, u RHEL-baziranim sustavima običnoapacheilinginx). - sharedscripts – pokreće postrotate skriptu jednom, čak i ako je više datoteka podudarno.
- postrotate – signalizira aplikaciji da ponovno otvori svoje rukovatelje datoteka nakon rotacije.
Ako direktorij /opt/myapp/ ili log datoteke još ne postoje u trenutku prvog pokretanja, to nije problem. Direktiva missingok će uzrokovati da logrotate tiho preskoči datoteku bez prijavljivanja greške. Rotacija logova će automatski započeti čim aplikacija kreira logove.
Korak 4: Testiranje konfiguracije
4.1 Suho pokretanje
Nakon pisanja konfiguracije, treba je provjeriti. Zastavica -d pokreće logrotate u načinu za ispravljanje pogrešaka – ništa se zapravo ne mijenja:
sudo logrotate -d /etc/logrotate.d/myapp
Način -d ispisuje dijagnostičke informacije, ali ne mijenja nijednu datoteku.
4.2 Prisilno stvarno pokretanje
Ako suho pokretanje izgleda ispravno – prisilite stvarnu rotaciju koristeći zastavicu -f:
sudo logrotate -f /etc/logrotate.d/myapp
Važno: Zastavica -f pokreće stvarnu rotaciju. Pokrenite je samo nakon što testno pokretanje izgleda ispravno.
Korak 5: Provjera rezultata
Nakon prvih nekoliko rotacija, provjerite direktorij logova:
ls -lh /opt/myapp/
Očekivani izlaz:
total 28K -rw-r----- 1 www-data adm 0 Jan 17 12:00 app.log -rw-r----- 1 www-data adm 12K Jan 17 11:59 app.log.1 -rw-r----- 1 www-data adm 11K Jan 16 12:00 app.log.2.gz -rw-r----- 1 www-data adm 9K Jan 15 12:00 app.log.3.gz
Najnovija rotacija (app.log.1) ostaje nekomprimirana zbog delaycompress. Sve starije je gzipirano. To je upravo ono što smo željeli.
Korak 6: Provjera automatskog rasporeda
logrotate se pokreće automatski – putem cron-a ili systemd timera, ovisno o distribuciji.
Sustavi temeljeni na cron-u
cat /etc/cron.daily/logrotate
Ako datoteka postoji – to je datoteka koja pokreće logrotate dnevno.
Sustavi temeljeni na systemd-u
Na novijim sustavima, logrotate se može pokretati putem systemd timera umjesto cron-a.
Provjerite:
systemctl list-timers | grep logrotate
Trebali biste vidjeti timer s posljednjim i sljedećim vremenom pokretanja, nešto poput:
Thu 2026-01-18 00:00:00 UTC 23h left Wed 2026-01-17 00:00:11 UTC 47 min ago logrotate.timer
Ako logrotate.timer nedostaje u izlazu – timer je onemogućen. Omogućite ga:
sudo systemctl enable logrotate.timer
sudo systemctl start logrotate.timer
Datoteka stanja
Možete provjeriti kada je logrotate zadnji put pokrenut putem vlastite datoteke stanja:
cat /var/lib/logrotate/status
Ovo je vlastita povijest rotacije logrotate-a. Nakon prvog stvarnog pokretanja, vidjet ćete svaku log datoteku s datumom njezine zadnje rotacije:
"/opt/myapp/app.log" 2026-1-17 "/var/log/nginx/access.log" 2026-1-17
Ako se bilo koji log ne rotira kada se očekuje – ovo je prvo mjesto za provjeru.
Povratak
Da biste poništili sve učinjeno, jednostavno izbrišite konfiguracijsku datoteku iz /etc/logrotate.d/:
sudo rm /etc/logrotate.d/myapp
Ovo će zaustaviti obradu logova za vašu aplikaciju. Već rotirane datoteke se ne brišu.
Da biste potpuno uklonili logrotate:
Debian/Ubuntu:
sudo apt remove logrotate
CentOS/RHEL:
sudo yum remove logrotate
Važno: Uklanjanje logrotate-a će onemogućiti rotaciju logova za cijeli sustav, uključujući nginx, rsyslog i druge usluge koje se na njega oslanjaju.
Zaključak
To je sve. Jedna dobro napisana datoteka u /etc/logrotate.d/, provjerena s -d – i gotovo je. Logovi ostaju čisti, disk ostaje zdrav, i više ne morate razmišljati o tome.
Verzija dokumenta: 1.2
Zadnje ažurirano: ožujak 2026
Vlasnik: Tehnička dokumentacijska ekipa