Rotacija i kompresija logova pomoću logrotatea | INTROSERV
EUR
european

EUR

usa

USD

Croatia Hr
Ex. VAT Ex. VAT 0%

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:

  1. daily – rotira logove dnevno; možete također specificirati weekly ili monthly.
  2. missingok – ne prijavljuje grešku ako log datoteka nedostaje.
  3. rotate 14 – zadrži 14 rotiranih kopija prije brisanja.
  4. compress – komprimira rotirane logove koristeći gzip.
  5. delaycompress – ne komprimira najnoviju rotaciju; korisno ako aplikacija još uvijek drži datoteku otvorenom.
  6. notifempty – preskoči rotaciju ako je log datoteka prazna.
  7. 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čno apache ili nginx).
  8. sharedscripts – pokreće postrotate skriptu jednom, čak i ako je više datoteka podudarno.
  9. postrotate – signalizira aplikaciji da ponovno otvori svoje rukovatelje datoteka nakon rotacije.

Info

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

Info

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

Info

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

Info

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

VAT

  • Other

    Ex. VAT

    0%
  • austria

    Austria

    20%
  • Belgium

    Belgium

    21%
  • Bulgaria

    Bulgaria

    20%
  • Croatia

    Croatia

    25%
  • Cyprus

    Cyprus

    19%
  • Czech Republic

    Czech Republic

    21%
  • Denmark

    Denmark

    25%
  • Estonia

    Estonia

    22%
  • France

    France

    20%
  • Finland

    Finland

    24%
  • Germany

    Germany

    19%
  • Greece

    Greece

    24%
  • Hungary

    Hungary

    27%
  • Ireland

    Ireland

    23%
  • Italy

    Italy

    22%
  • Latvia

    Latvia

    21%
  • Lithuania

    Lithuania

    21%
  • Luxembourg

    Luxembourg

    17%
  • Malta

    Malta

    18%
  • Netherlands

    Netherlands

    21%
  • Poland

    Poland

    23%
  • Portugal

    Portugal

    23%
  • Romania

    Romania

    19%
  • Slovakia

    Slovakia

    20%
  • Slovenia

    Slovenia

    22%
  • Spain

    Spain

    21%
  • Sweden

    Sweden

    25%
  • USA

    USA

    0%
european
states
  • germany
  • Español
  • Italiano
  • Poland
  • Русский
  • Slovenski
  • Türkçe
  • ukraine
  • kingdom
  • French
  • Hrvatska
  • Other
  • Austria
  • Belgium
  • Bulgaria
  • Croatia
  • Cyprus
  • Czech Republic
  • Denmark
  • Estonia
  • Finland
  • France
  • Germany
  • Greece
  • Hungary
  • Ireland
  • Italy
  • Latvia
  • Lithuania
  • Luxembourg
  • Malta
  • Netherlands
  • Poland
  • Portugal
  • Romania
  • Slovakia
  • Slovenia
  • Spain
  • Sweden
  • USA