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.