Rotiranje logova (logrotate)

 

Šta je logrotate?

Logrotate je procedura na osnovu koje se trenutni log aplikacije arhivira, otvara se novi log i brišu se stari logovi. A kad smo već kod lgoova, log je fajl u koji aplikacija upisuje razne informacije koje administratoru ili programeru mogu da budu korisne kako bi saznao na koji se način aplikacija ponašala, koje su greške nastale, itd.

Logovi su izuzetno korisni. Jedino ne bit trebalo da dozvolimo njihovo nekontrolisano gomilanje i zauzimanje ogromnog prostora. Tome služi logrotate.

 

Zašto je logrotate važan

Logovi su izuzetno korisni kada želite da pratite rad neke aplikacije ili da otklonite greške. Na žalost što se više informacija skuplja, to je veće zauzeće prostora na disku, što vremenom može da postane ozbiljan problem.

Log koji se nerotira može da poraste prilično, čime će da zauzme veliki prostor na disku, ali isto tako može da uspori proces skaliranja, kao i pravljenje backup-a vašeg virtuelnog servera.

Takođe ako je log ogroman, biće vam teško da pronađete informacije koje su vam u tom trenutku potrebne. Preporučuje se da logovi budu svedeni na razumne veličine kojima možete jednostavno da upravljate kao i da ih brišete kada više nisu relevantni jer su previše stari.

Rotiranje logova pomoću logrotate-a je jednostavno.

 

Kako logrotate radi

Sistem pokreće logrotate u određenim vremenskim intervalima, obično svakog dana. Zapravo na mnogim distribucijama pronaćićete skript koji svakodnevno pokreće logrotate na sledećoj lokaciji:

/etc/cron.daily/logrotate 

Neke distribucije, kao na primer Gentoo, drže logrotate na:

/etc/cron.daily/logrotate.cron 

Ako želite da se logrotate pokreće češće (na primer svakog sata) probajte cron pomoću ovog skripta  /etc/cron.hourly.

Kada je logrotate pokrenut, on čita konfiguracione fajlove kako bi utvrdio gde se logovi nalaze kao i koliko često fajlovi treba da budu rotirani i koliko dugo treba da budu arhvirirani.

logrotate.conf

Glavni konfiguracioni fajl za logrotate nalazi se na:

/etc/logrotate.conf 

Ako otvorite ovaj fajl videćete koji su podrazumevani parametri za rotiranje logova. Videćete i korisne komentare pomoću kojih možete da saznate kako je logrotate podešen.

Obratite pažnju na:

include /etc/logrotate.d 

Tu se nalaze konfiguracioni fajlovi za pojedinačne aplikacije.

logrotate.d

Uđite u ovaj folder gde će biti smeštena podešavanja za logove prema pojedinačnim apliakcijama:

ls /etc/logrotate.d 

Broj fajlova u ovom folderu zavisiće od broja aplikacija koje ste instalirali. Aplikacije koje su instalirane pomoću paket menadžera će takođe da naprave konfiguracioni fajl u ovom folderu /etc/logrotate.d.

Najverovatnije ćete videti konfiguracioni fajl za svoj syslog servis, koji će logrotate da čita kada rotira sistemske logove. Ako pogedate u taj fajl videćete komande poput onih u logrotate.conf.

 

Unutar fajla za aplikaciju

Uzmimo kao primer sadržaj logrotate konfiguracionog fajla koji dobijete kada instalirate Apache na Fedora sistem:

/var/log/httpd/*log { missingok notifempty sharedscripts postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript } 

Kada je logrotate pokrenut on će da proveri sve fajlove u /var/log/httpd koji se završavaju na “log” i da ih onda rotira, osim u slučaju da su prazni.

Ako u httpd folderu ne pronađe log fajlove neće prikazati grešku. U tom slučaju pokrenuće komandu u “postrotate/endscript” bloku (u ovom slučaju komanda će dati instrukciju Apache-u da se restartuje), ali samo nakon što obradi sve navedene logove.

U ovom fajlu nećete videti neka od podešavanja koja smo videli u logrotate.conf. To je zato što se komande u logrotate.conf koriste kao podrazumevane za rotiranje logova.

Možete da navedete drugačija podešavanja za bilo koju aplikaciju da biste pregazili osnovna podešavanja. Na primer, ako je vaš server izuzetno opterećen možda ćete želeti da unesete komandu za dnevni logrotate u Apache-ov konfiguracioni blok, kako bi ovi logovi bili rotirani na dnevnom umesto na nedeljnom nivou.

Komande za konfiguraciju

Kompletnu listu komandi koje se koriste konfiguracionim fajlovima za logrotate možete da vidite u man strani:

man logrotate 

U daljem tekstu ćemo da se pozabavimo najčešće korišćenim komandama.

Važno je da zapamtite da se konfiguracioni fajlovi za aplikacije /etc/logrotate.d zapravo nasleđuju iz glavnog  /etc/logrotate.conf fajla.

Broj arhiviranih fajlova

Komanda "rotate" određuje koliko arhiviranih logova treba da bude sačuvano pre nego što logrotate počne da briše sve starije logove. Na primer:

rotate 4 

Ova komanda daje instrukciju logrotate-u da čuva maksimalno 4 arhivirana loga. Ako već postoje četiri arhivirana loga, pri sledećoj rotaciji najstariji će biti obrisan da bi bilo mesta za čuvanje novog loga.

Vremenski interval za rotaciju

Možete da navedete komandu koja će logrotate-u da da instrukciju u vezi sa tim koliko često treba da rotira određeni log. Moguće opcije su:

daily weekly monthly yearly 

Ako vremenski interval nije naveden, log će biti rotiran svaki put kada se logrotate pokrene (ukoliko neki drugi kriterijum nije naveden kao što je na primer veličina).

Ako želite da koristite neke druge opcije kao vremenski interval moraćete da napravite odvojeni konfiguracioni fajl. Na primer ako želite da rotirate određeni log fajl svakog sata, napravićete fajl u “/etc/cron.hourly” (možda ćete morati da napravite i ovaj folder) koji će imati sledeću liniju:

/usr/sbin/logrotate /etc/logrotate.hourly.conf 

Ovu konfiguraciju u vezi sa pokretanjem logrotate-a na svakih sat vremena (lokaciju fajla, da li stari fajlovi treba da budu arhivirani, itd) unesite u “/etc/logrotate.hourly.conf”.

Veličina

Kao kriterijum za pokretanje logrotate-a možete da navedete i veličinu fajla koristeći komandu "size". Način na koji formulišete komandu će da obavesti logrotate o tome na koje se veličine odnosi:

size 100k size 100M size 100G 

U prvom primeru log će da bude rotiran ako postane veći od 100 kilobajta. U drugom ako je veći od 100 megabajta, a u trećem ako je veći od 100 gigabajta.

Ukoliko su i veličina i vremenski interval podešeni kao kriterijumi, veličina će imati prioritet. Drugim rečima čak i ako nije definisano intervalom, ukoliko je fajl prekoračio definisanu veličinu biće rotiran.

Kompresija

Ukoliko želite da kompresujete svoje arhivirane log fajlove (gzip), možete da uključite sledeću komandu, obično u  /etc/logrotate.conf:

compress 

Ova praksa se preporučuje jer logove obično čini tekst, a tekst je zahvalan za kompresovanje. Ipak možda ćete želeti da neki arhiviranih logova ne budu kompresovani, a da to ipak bude podrazumevana vrednost. U tom slučaju možete da unesete sledeću komandu u konfiguracioni fajl za aplikaciju:

nocompress 

Još jedna komanda je bitna u vezi sa kompresijom i to je:

delaycompress 

Ova komanda može da budekorisna u slučaju da želite odloženo kompresovanje arhiviranih logova. Ukoliko je “delaycompress” aktiviran, arhivirani log neće biti kompresovan do sledećeg pokretanja logrotate-a.

Ovo može da bude važno kada imate program koji još uvek piše u stari log fajl nakon što je novi rotiran. Ova komanda radi jedino ako u svom config fajlu isto imate i komandu compress.

Primer toga kada je dobro da se koristi delaycompress je kada logrotate dobije instrukciju da restartuje apache na "graceful" način

Pošto stari apache procesi ne bi bili zaustavljeni dok im se konekcije ne prekinu, mogli bi da pokušaju da u log fajl unesu više informacija posle restarta.

Odlaganje kompresije vam garantuje da nećete da izgubite te dodatne informacije iz loga kada su logovi rotirani.

Postrotate

Logrotate pokreće postrorate skript svaki put kada je rotiran log koji je naveden u config bloku. Ovo čete obično želeti da koristite kako biste restartovali aplikaciju nakon rotacije logova, kako bi aplikacija mogla da počne da koristi novi log fajl.

postrotate /usr/sbin/apachectl restart > /dev/null endscript 

Deo “> /dev/null” koji se nalazi na kraju daje instrukciju da rezultat ne prikaže nigde. U suprotnom rezultate ove komande bio bi poslat u konzolu ili u log ili na email, itd, a rezultat zapravo nije važan s obzirom na to da je sve prošlo kako treba.

 

Komanda sharedscripts

U normalnoj situaciji logrotate će da pokrene “postrotate” skript svaki put kada rotira neki log. Ovo će se dešavati za sve logove koji koriste isti config blok.

Na primer, config blok web servera koji se odnosi i na access i na error log će da rotira oba loga i da pokrene "postrotate" skript dva puta (po jednom za svaki fajl koji je rotiran).

Tako da, ako su oba fajla rotirana, web server će biti restartovan dva puta. Da biste sprečili pokretanje skripta za svaki log, možete da koristite komandu:

sharedscripts 

Ova komanda će logrotate-u da kaže da sačeka dok svi logovi nisu provereni za određeni config blog pre nego što pokrene postrorate skriptu. Ako su jedan ili više logova rotirani, postrotate će biti pokrenut samo jednom. A ako nijedan od logova nije rotiran, postrotate uopšte neće biti pokrenut.


Was this article helpful?

mood_bad Dislike 0
mood Like 0
visibility Views: 6503