Vrtenje in stiskanje dnevnikov z uporabo logrotate
- Raven: Srednje
- Ocenjeni čas: ~20 minut
- Cilj: Konfigurirati logrotate za samodejno stiskanje in rotacijo dnevniških datotek aplikacij, da preprečimo izčrpanje prostora na disku.
Uvod
Dnevniki – so ključni del upravljanja katere koli produkcijske aplikacije: brez njih bi bilo zanesljivo razumevanje, kaj je šlo narobe in kaj storiti glede tega, zelo težko. Zasedena aplikacija lahko ustvari na tisoče vnosov na minuto, vsi pa so običajno shranjeni v datotekah. Stare dnevnike moramo pravočasno stisniti in izbrisati, da preprečimo pomanjkanje prostora na disku. V tem vodiču bomo konfigurirali logrotate na strežniku Linux.
Kaj je logrotate?
logrotate je pripomoček za Linux, zasnovan za poenostavitev upravljanja sistemov, ki ustvarjajo veliko število dnevniških datotek. Omogoča samodejno stiskanje, rotacijo in brisanje dnevnikov. Običajno se izvaja dnevno, tedensko ali mesečno prek cron ali časovnika systemd.
Predpogoji
Preden začnete, se prepričajte, da so izpolnjeni naslednji pogoji:
- Operacijski sistem: Ubuntu 20.04/22.04/24.04 LTS, Debian 11/12 ali CentOS/RHEL 7+
- logrotate: različica 3.x (preverite v koraku 1)
- Dostop: sudo ali root dostop do strežnika
- Zahtevano znanje: samozavestna uporaba ukazne vrstice Linux in osnovno urejanje datotek
Krok 1: Preverjanje namestitve logrotate
Za preverjanje namestitve preprosto zaženite:
logrotate --version
Pričakovani izhod:
logrotate 3.19.0 Privzeti ukaz za pošto: /usr/bin/mail Privzeti ukaz za stiskanje: /bin/gzip Privzeti ukaz za razširitev: /bin/gunzip Privzeta razširitev stiskanja: .gz Privzeta pot do datoteke stanja: /var/lib/logrotate/status
Če ukaz ni najden – logrotate ni nameščen. Namestite ga:
Debian/Ubuntu:
sudo apt install logrotate
CentOS/RHEL:
sudo yum install logrotate
Krok 2: Razumevanje strukture konfiguracije
Glavna konfiguracija se nahaja na /etc/logrotate.conf – za zdaj jo bomo pustili nespremenjeno. Naša pravila za določene storitve bodo šla v /etc/logrotate.d/ – za vsako storitev je treba tam postaviti ločeno datoteko.
Preden kaj dodate, preverite, ali konfiguracija za vašo storitev že obstaja:
ls /etc/logrotate.d/
Za priljubljene storitve, kot sta nginx ali Apache, so konfiguracije običajno že prisotne. Če sta nginx ali apache2 že tam – odprite to datoteko in prilagodite število rotacij in nastavitve stiskanja svojim potrebam, namesto da ustvarite podvojeno.
Krok 3: Dodajanje konfiguracije storitve
Recimo, da obstaja prilagojena aplikacija in njeni dnevniki se nahajajo na /opt/myapp/*.log.
Ustvarite in odprite datoteko:
sudo nano /etc/logrotate.d/myapp
Prilepite naslednje znotraj:
/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 }
Ta konfiguracija navodila logrotate, da:
- daily – rotira dnevnike dnevno; lahko tudi določite
weeklyalimonthly. - missingok – ne povzroči napake, če dnevniška datoteka manjka.
- rotate 14 – obdrži 14 rotiranih kopij pred brisanjem.
- compress – stisne rotirane dnevnike z uporabo gzip.
- delaycompress – ne stisne najnovejše rotacije; uporabno, če aplikacija še vedno drži datoteko odprto.
- notifempty – preskoči rotacijo, če je dnevniška datoteka prazna.
- create 0640 www-data adm – ustvari novo prazno dnevniško datoteko z določenimi dovoljenji, lastnikom in skupino. Lastnik naj se ujema z uporabnikom, pod katerim aplikacija deluje (v sistemih, ki temeljijo na Debianu, pogosto
www-data, v sistemih, ki temeljijo na RHEL, običajnoapachealinginx). - sharedscripts – zažene postrotate skripto enkrat, tudi če se ujema več datotek.
- postrotate – signalizira aplikaciji, da ponovno odpre svoje ročaje datotek po rotaciji.
Če imenik /opt/myapp/ ali dnevniške datoteke še ne obstajajo ob prvem zagonu, to ni problem. Direktiva missingok bo povzročila, da logrotate tiho preskoči datoteko brez napake. Rotacija dnevnikov se bo začela samodejno, ko aplikacija ustvari dnevnike.
Krok 4: Testiranje konfiguracije
4.1 Suhi zagon
Po pisanju konfiguracije jo je treba preveriti. Zastavica -d zažene logrotate v načinu za odpravljanje napak – nič se dejansko ne spremeni:
sudo logrotate -d /etc/logrotate.d/myapp
Način -d izpiše diagnostične informacije, vendar ne spremeni nobenih datotek.
4.2 Prisiljen pravi zagon
Če suhi zagon izgleda pravilno – prisilite dejansko rotacijo z uporabo zastavice -f:
sudo logrotate -f /etc/logrotate.d/myapp
Pomembno: Zastavica -f sproži dejansko rotacijo. Zaženite jo le, če je testni zagon videti pravilen.
Krok 5: Preverjanje rezultata
Po prvih nekaj rotacijah preverite imenik dnevnikov:
ls -lh /opt/myapp/
Pričakovani izhod:
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
Najnovejša rotacija (app.log.1) ostane nestisnjena zaradi delaycompress. Vse starejše je stisnjeno z gzip. Točno to smo želeli.
Krok 6: Preverjanje samodejnega urnika
logrotate se izvaja samodejno – prek cron ali časovnika systemd, odvisno od distribucije.
Sistemi, ki temeljijo na Cron
cat /etc/cron.daily/logrotate
Če datoteka obstaja – to je datoteka, ki dnevno izvaja logrotate.
Sistemi, ki temeljijo na Systemd
Na novejših sistemih se logrotate lahko izvaja prek časovnika systemd namesto cron.
Preverite:
systemctl list-timers | grep logrotate
Videti bi morali časovnik z zadnjimi in naslednjimi časi izvajanja, nekaj takega:
Čet 2026-01-18 00:00:00 UTC 23h left Sre 2026-01-17 00:00:11 UTC 47 min ago logrotate.timer
Če logrotate.timer manjka v izhodu – je časovnik onemogočen. Omogočite ga:
sudo systemctl enable logrotate.timer
sudo systemctl start logrotate.timer
Datoteka stanja
Preverite lahko, kdaj je logrotate nazadnje tekel prek lastne datoteke stanja:
cat /var/lib/logrotate/status
To je lastna zgodovina rotacije logrotate. Po prvem pravem zagonu boste videli vsako dnevniško datoteko z datumom njene zadnje rotacije:
"/opt/myapp/app.log" 2026-1-17 "/var/log/nginx/access.log" 2026-1-17
Če se kateri koli dnevnik ne rotira, ko je pričakovano – je to prvo mesto za pogled.
Vračanje nazaj
Če želite razveljaviti vse, kar je bilo storjeno, preprosto izbrišite konfiguracijsko datoteko iz /etc/logrotate.d/:
sudo rm /etc/logrotate.d/myapp
To bo ustavilo obdelavo dnevnikov za vašo aplikacijo. Že rotirane datoteke niso izbrisane.
Če želite popolnoma odstraniti logrotate:
Debian/Ubuntu:
sudo apt remove logrotate
CentOS/RHEL:
sudo yum remove logrotate
Pomembno: Odstranitev logrotate bo onemogočila rotacijo dnevnikov za celoten sistem, vključno z nginx, rsyslog in drugimi storitvami, ki se nanj zanašajo.
Zaključek
To je vse. Ena dobro napisana datoteka v /etc/logrotate.d/, preverjena z -d – in je končano. Dnevniki ostanejo čisti, disk ostane zdrav, in vam ni treba več razmišljati o tem.
Različica dokumenta: 1.2
Zadnja posodobitev: marec 2026
Lastnik: Tehnična dokumentacijska ekipa