Kako postaviti i upravljati rotacijom dnevnika koristeći Logrotate u Linuxu


Jedan od najzanimljivijih (a možda i jedan od najvažnijih) direktorija u Linux sustavu je /var/log. Prema Standardu hijerarhije datotečnog sustava, aktivnosti većine servisa koji se izvode u sustavu zapisuju se u datoteku unutar ovog direktorija ili jednog od njegovih poddirektorija.

Takve datoteke poznate su kao dnevnici i ključ su za ispitivanje kako sustav radi (i kako se ponašao u prošlosti). Dnevnici također su prvi izvor informacija koje administratori i inženjeri traže dok rješavaju probleme.

Ako pogledamo sadržaj /var/log na CentOS/RHEL/Fedora i Debian/Ubuntu (za raznolikost) vidjet ćemo sljedeće datoteke dnevnika i poddirektorije.

Imajte na umu da rezultat može biti nešto drugačiji u vašem slučaju, ovisno o servisima koji se izvode na vašem sustavu(ima) i vremenu kada su radili.

U RHEL/CentOS i Fedora

ls /var/log

U Debianu i Ubuntuu

ls /var/log

U oba slučaja, možemo uočiti da neki nazivi dnevnika završavaju prema očekivanju s “log”, dok su drugi ili preimenovani pomoću datuma (na primjer, maillog-20160822 na CentOS) ili komprimirani (razmotrite auth.log.2.gz i mysql.log.1.gz na Debianu jak>).

Ovo nije zadano ponašanje na temelju odabrane distribucije, ali se može promijeniti po želji korištenjem direktiva u konfiguracijskim datotekama, kao što ćemo vidjeti u ovom članku.

Kad bi se dnevnici čuvali zauvijek, oni bi na kraju ispunili datotečni sustav u kojem se nalazi /var/log. Kako bi to spriječio, administrator sustava može koristiti zgodni pomoćni program pod nazivom logrotate za povremeno čišćenje zapisa.

U nekoliko riječi, logrotate će preimenovati ili komprimirati glavni dnevnik kada se ispuni uvjet (više o tome za minutu) tako da se sljedeći događaj bilježi u praznoj datoteci.

Osim toga, uklonit će “stare” datoteke dnevnika i zadržati najnovije. Naravno, sami odlučujemo što znači "staro" i koliko često želimo da nam logrotate čisti zapise.

Instaliranje Logrotate-a u Linuxu

Da biste instalirali logrotate, samo koristite upravitelja paketima:

---------- On Debian and Ubuntu ---------- 
aptitude update && aptitude install logrotate 

---------- On CentOS, RHEL and Fedora ---------- 
yum update && yum install logrotate

Vrijedi i dobro je napomenuti da konfiguracijska datoteka (/etc/logrotate.conf) može ukazivati na to da se druge, specifičnije postavke mogu postaviti na pojedinačne .conf datoteke unutar /etc/logrotate.d.

To će biti slučaj ako i samo ako sljedeći redak postoji i nije komentiran:

include /etc/logrotate.d

Držat ćemo se ovog pristupa, jer će nam pomoći da stvari održimo u redu, i koristit ćemo okvir Debian za sljedeće primjere.

Konfigurirajte Logrotate u Linuxu

Budući da je vrlo svestran alat, logrotate pruža mnoštvo direktiva koje nam pomažu da konfiguriramo kada i kako će se dnevnici rotirati i što bi se trebalo dogoditi odmah nakon toga.

Umetnimo sljedeći sadržaj u /etc/logrotate.d/apache2.conf (imajte na umu da ćete najvjerojatnije morati izraditi tu datoteku) i pregledajte svaki redak kako biste naznačili njegovu svrhu:

/var/log/apache2/* {
    weekly
    rotate 3
    size 10M
    compress
    delaycompress
}

Prvi red označava da se direktive unutar bloka primjenjuju na sve zapisnike unutar /var/log/apache2:

  • tjedno znači da će alat pokušati rotirati zapise na tjednoj osnovi. Ostale moguće vrijednosti su dnevne i mjesečne.
  • rotiraj 3 označava da se trebaju čuvati samo 3 rotirana dnevnika. Stoga će najstarija datoteka biti uklonjena pri četvrtom sljedećem pokretanju.
  • size=10M postavlja minimalnu veličinu za rotaciju na 10M. Drugim riječima, svaki zapisnik neće se rotirati dok ne dosegne 10 MB.
  • compress i delaycompress koriste se da kažu da svi rotirani zapisnici, s iznimkom najnovijeg, trebaju biti komprimirani.

Izvršimo suho pokretanje da vidimo što bi logrotate učinio da se stvarno sada izvrši. Koristite opciju -d nakon koje slijedi konfiguracijska datoteka (zapravo možete pokrenuti logrotate ako izostavite ovu opciju):

logrotate -d /etc/logrotate.d/apache2.conf

Rezultati su prikazani u nastavku:

Umjesto komprimiranja zapisa, mogli bismo ih preimenovati prema datumu kada su rotirani. Da bismo to učinili, koristit ćemo direktivu dateext. Ako naš format datuma nije zadani ggggmmdd, možemo ga odrediti pomoću formata datuma.

Imajte na umu da čak možemo spriječiti rotaciju ako je zapisnik prazan s notifempty. Osim toga, recimo logrotateu da pošalje rotirani dnevnik administratoru sustava ([email  u ovom slučaju) za njegovu/njenu referencu (ovo će zahtijevati postavljanje poslužitelja e-pošte, što je izvan okvira ovog članka).

Ako želite primati e-poruke o logrotateu, možete postaviti Postfix poslužitelj pošte kao što je prikazano ovdje: Instalirajte Postfix poslužitelj pošte

Ovaj put koristit ćemo /etc/logrotate.d/squid.conf samo za rotiranje /var/log/squid/access.log:

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Kao što možemo vidjeti na slici ispod, ovaj dnevnik nije trebalo rotirati. Međutim, kada se ispuni uvjet veličine (size=1M), rotirani zapisnik bit će preimenovan u access.log-25082020 (ako je zapisnik rotiran kolovoza) 25, 2020) i glavni dnevnik (access.log) bit će ponovno kreiran s dopuštenjima pristupa postavljenim na 0644 i s root kao vlasnik i vlasnik grupe.

Konačno, kada broj zapisa dosegne 6, najstariji zapisnik bit će poslan na [email .

Pretpostavimo sada da želite pokrenuti prilagođenu naredbu kada dođe do rotacije. Da biste to učinili, postavite redak s takvom naredbom između direktiva postrotate i endscript.

Na primjer, pretpostavimo da želimo poslati e-poruku rootu kada se bilo koji zapisnik unutar /var/log/myservice rotira. Dodajmo redove crvene boje u /etc/logrotate.d/squid.conf:

/var/log/myservice/* {
	monthly
	create 0644 root root
	rotate 5
	size=1M
    	postrotate
   		echo "A rotation just took place." | mail root
    	endscript
}

Na kraju, ali ne manje važno, važno je napomenuti da opcije prisutne u /etc/logrotate.d/*.conf nadjačavaju one u glavnoj konfiguracijskoj datoteci u slučaju sukoba.

Logrotate i Cron

Prema zadanim postavkama, instalacija logrotate-a stvara crontab datoteku unutar /etc/cron.daily pod nazivom logrotate. Kao što je slučaj s drugim crontab datotekama unutar ovog direktorija, izvršavat će se svakodnevno počevši od 6:25 ujutro ako anacron nije instaliran.

U suprotnom, izvršenje će započeti oko 7:35 ujutro. Za provjeru potražite redak koji sadrži cron.daily u /etc/crontab ili /etc/anacrontab.

Sažetak

U sustavu koji generira nekoliko dnevnika, administracija takvih datoteka može se uvelike pojednostaviti korištenjem logrotate. Kao što smo objasnili u ovom članku, automatski će rotirati, sažimati, uklanjati i slati zapisnike povremeno ili kada datoteka dosegne zadanu veličinu.

Samo provjerite je li postavljen da radi kao cron posao i logrotate će vam olakšati stvari. Za više detalja, pogledajte stranicu priručnika.

Imate li pitanja ili prijedloga o ovom članku? Slobodno nam javite pomoću obrasca za komentare u nastavku.