Vrtenje in stiskanje dnevnikov z uporabo logrotate | INTROSERV
EUR
european

EUR

usa

USD

Slovenia Sl
Ex. VAT Ex. VAT 0%

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:

  1. daily – rotira dnevnike dnevno; lahko tudi določite weekly ali monthly.
  2. missingok – ne povzroči napake, če dnevniška datoteka manjka.
  3. rotate 14 – obdrži 14 rotiranih kopij pred brisanjem.
  4. compress – stisne rotirane dnevnike z uporabo gzip.
  5. delaycompress – ne stisne najnovejše rotacije; uporabno, če aplikacija še vedno drži datoteko odprto.
  6. notifempty – preskoči rotacijo, če je dnevniška datoteka prazna.
  7. 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čajno apache ali nginx).
  8. sharedscripts – zažene postrotate skripto enkrat, tudi če se ujema več datotek.
  9. postrotate – signalizira aplikaciji, da ponovno odpre svoje ročaje datotek po rotaciji.

Info

Č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

Info

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

Info

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

Info

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

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