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 sistemu je /var/log. Prema Standardu hijerarhije sistema datoteka, aktivnosti većine usluga koje rade u sistemu se upisuju u datoteku unutar ovog direktorija ili jednog od njegovih poddirektorija.

Takve datoteke su poznate kao logovi i ključ su za ispitivanje kako sistem radi (i kako se ponašao u prošlosti). Evidencije su također prvi izvor informacija gdje administratori i inženjeri gledaju prilikom rješavanja problema.

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

Imajte na umu da rezultat može biti nešto drugačiji u vašem slučaju u zavisnosti od usluga koje se izvršavaju na vašem sistemu(ima) i vremena kada su u toku.

U RHEL/CentOS i Fedora

ls /var/log

U Debianu i Ubuntuu

ls /var/log

U oba slučaja, možemo primijetiti da neki od naziva dnevnika završavaju kako se očekuje u “log ”, dok su drugi ili preimenovani koristeći datum (na primjer, maillog-20160822 na CentOS) ili komprimirano (razmotrite auth.log.2.gz i mysql.log.1.gz na Debianu jako>).

Ovo nije podrazumevano ponašanje zasnovano na izabranoj distribuciji, ali se može promeniti po volji korišćenjem direktiva u konfiguracionim datotekama, kao što ćemo videti u ovom članku.

Ako bi se zapisnici čuvali zauvijek, na kraju bi ispunili sistem datoteka gdje se /var/log nalazi. Da bi to spriječio, administrator sistema može koristiti lijepi uslužni program pod nazivom logrotate za čišćenje dnevnika na periodičnoj osnovi.

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

Osim toga, uklonit će “stare ” datoteke dnevnika i zadržati najnovije. Naravno, mi možemo odlučiti šta znači “staro” i koliko često želimo da logrotate čisti dnevnike umjesto nas.

Instaliranje Logrotate u Linux

Da instalirate logrotate, samo koristite svoj upravitelj paketa:

---------- 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 datoteke .conf unutar /etc/logrotate.d.

Ovo će biti slučaj ako i samo ako sljedeća linija postoji i nije komentirana:

include /etc/logrotate.d

Mi ćemo se držati ovog pristupa, jer će nam pomoći da stvari držimo u redu, i koristiti Debian okvir za sljedeće primjere.

Konfigurirajte Logrotate u Linuxu

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

Ubacimo sljedeći sadržaj u /etc/logrotate.d/apache2.conf (imajte na umu da ćete najvjerovatnije morati kreirati tu datoteku) i ispitamo svaki red kako bismo 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 dnevnike unutar /var/log/apache2:

  • tjedno znači da će alat pokušati rotirati dnevnike na sedmičnoj bazi. Ostale moguće vrijednosti su dnevne i mjesečne.
  • rotiraj 3 označava da treba č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 dnevnik se neće rotirati sve dok ne dostigne 10MB.
  • compress i deycompress se koriste da kažu da svi rotirani zapisi, s izuzetkom najnovijeg, trebaju biti komprimirani.

Hajde da izvršimo suvo pokretanje da vidimo šta bi logrotate uradio da se sada stvarno izvrši. Koristite opciju -d nakon čega slijedi konfiguracijski fajl (zapravo možete pokrenuti logrotate tako što ćete izostaviti ovu opciju):

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

Rezultati su prikazani u nastavku:

Umjesto kompresije dnevnika, mogli bismo ih preimenovati prema datumu kada su rotirani. Za to ćemo koristiti dateext direktivu. Ako je naš format datuma drugačiji od zadanog ggggmmdd, možemo ga navesti koristeći format datuma.

Imajte na umu da čak možemo spriječiti rotaciju ako je dnevnik prazan sa notifempty. Pored toga, kažimo logrotateu da pošalje rotirani dnevnik administratoru sistema ([email zaštićen] u ovom slučaju) za njegovu/njenu referencu (ovo će zahtijevati postavljanje mail servera, što je izvan okvira ovog članka).

Ako želite da primate e-poštu o logrotate, možete postaviti Postfix mail server kao što je prikazano ovdje: Instalirajte Postfix Mail Server

Ovaj put ćemo koristiti /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 uslov veličine (size=1M), rotirani dnevnik će biti preimenovan u access.log-25082020 (ako je dnevnik rotiran avgusta 25, 2020) i glavni dnevnik (access.log) će biti ponovo kreiran sa dozvolama pristupa postavljenim na 0644 i sa root jak> kao vlasnik i vlasnik grupe.

Konačno, kada broj dnevnika konačno dostigne 6, najstariji dnevnik će biti poslan na [email .

Pretpostavimo sada da želite da pokrenete prilagođenu komandu kada dođe do rotacije. Da biste to uradili, postavite red sa takvom komandom između postrotate i endscript direktiva.

Na primjer, pretpostavimo da želimo poslati e-poštu root-u kada se bilo koji od logova unutar /var/log/myservice rotira. Dodajmo crvene linije 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 i najmanje 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

Podrazumevano, instalacija logrotate kreira crontab fajl unutar /etc/cron.daily pod nazivom logrotate. Kao što je slučaj sa drugim crontab datotekama unutar ovog direktorija, on će se izvršavati svakodnevno počevši od 6:25 ujutro ako anacron nije instaliran.

U suprotnom, izvršenje će početi oko 7:35 ujutro. Da potvrdite, pratite red koji sadrži cron.daily u /etc/crontab ili /etc/anacrontab.

Sažetak

U sistemu koji generiše nekoliko dnevnika, administracija takvih datoteka može biti uveliko pojednostavljena upotrebom logrotate. Kao što smo objasnili u ovom članku, automatski će se rotirati, komprimirati, uklanjati i slati dnevnike povremeno ili kada datoteka dostigne određenu veličinu.

Samo provjerite je li postavljeno da radi kao cron posao i logrotate će vam mnogo olakšati stvari. Za više detalja, pogledajte man stranicu.

Imate li pitanja ili prijedloga o ovom članku? Slobodno nas obavijestite koristeći formu za komentare ispod.