Logrotate - zaboravljeni junak

Da su logovi, obično smješteni u direktoriju /var/log, izuzetno važni jasno je svakom sistem-inženjeru. Nema drugog načina rješavanja problema (osim ako ste problem susreli prije pa rješenje znate napamet) do povećanja razine logiranja i promatranja što smeta određenom servisu da funkcionira na željeni ili očekivani način.

Logovi, dakako, s vremenom rastu, pa ih treba brisati sa sustava (bilo bi, naravno, bolje snimati na nekakve neizbrisive medije na neko dulje vrijeme). Ovu funkciju nenametljivo obavlja program logrotate. On prvo zaustavi određeni servis (prerotate), obavi sve operacije iz konfiguracije, te ponovno starta servis (postrotate).

Logrotate nije jedini program te vrste, postoji primjerice rotatelogs, dio apache paketa.

Gotovo svaki paket brine o svojim logovima putem conf.d mehanizma, tako da način rotiranja i arhiviranja svojih logova stave u direktorij /etc/logrotate.d. Uzmimo za primjer /etc/logrotate.d/apt:

/var/log/apt/term.log {
  rotate 6
  monthly
  compress
  missingok
notifempty
}

Dakle, ovdje se definira ponašanje za datoteku /var/log/apt/term.log. Što se ovdje definira? Objasnimo opcije:

rotate - broj iza opcije označava koliko će se arhiviranih datoteka čuvati. Dakle, osim trenutnog loga, čuva se još 6 starih inačica istih datoteka, term.log.1, term.log.2 itd.

monthly - vrlo očito, logovi se rotiraju jednom mjesečno, obično prvog u mjesecu. Umjesto ovog, ovdje može stajati daily i weekly.

compress - stari logovi se sažimaju programom gzip(1). Ukoliko želite, možete rabiti drugi program za sažimanje. S anredbom compresscmd možete odrediti drugi program za sažimanje (zip, bzip2, itd). Naredba uncompress poništva sažimanje log datoteka, što ne vjerujemo da ćete rabiti kad postoje naredbe zless, zcat i slične.

missingok - logrotate se neće buniti ako konkretni log ne postoji. Obrnuta opcija je nomissingok, što je ujedno i default u programu logrotate.

notifempty - ukoliko je log prazan (veličine 0 bajta), neće se rotirati. Obrnuta opcija je ifempty, što će zbog zaglavlja kodeka za sažimanje kreirati niz malih datoteka većih od nula bajtova (iako je originalni log veličine 0!).

Ovo je bio vrlo jednostavan primjer, a složeniji je, primjerice, apache2:

/var/log/apache2/*.log {
      weekly
      missingok
      rotate 52
      compress
      delaycompress
      notifempty
      create 640 root adm
      sharedscripts
      postrotate
         if [ -f "`. /etc/apache2/envvars ; echo ${APACHE_PID_FILE:-/var/run/apache2.pid}`" ]; then
                  /etc/init.d/apache2 reload > /dev/null
         fi
      endscript
}

Većinu opcija smo spomenuli, objasnit ćemo dosad nespomenute:

delaycompress - opcija određuje da se stari log ne sažima odmah, nego tek u sljedećem ciklusu, znači neće odmah postati access.log.1.gz, nego će prvo postati access.log.1, a tek onda acess.log.2.gz.

create - ukoliko želite iz sigurosnih razloga promijeniti vlasnika sažete log datoteke, onda se možete poslužiti opcijom create, a sintaksa je "create mod vlasnik grupa". Inače, arhivirana/rotirana datoteka ima iste atribute kao i original. Opcija se u potpunosti može anulirati opcijom nocreate.

sharedscripts - u slučaju da imate wildcard unos, baš kao u ovom slučaju, ova opcija određuje da se skripte prerotate i postrotate izvrše samo jednom. Opcija poništava opciju nosharedscripts, te automatski podrazumijeva uporabu opcije create.

postrotate - opciju smo maloprije spomenuli. Ona određuje ponašanje nakon provedbe rotiranja logova. Za apache2 ona je malo složenija, ali inače obično ovaj, ili sličan oblik:

/usr/bin/killall -HUP servis

endscript - samo označava kraj prerotate ili postrotate skripte.

Navest ćemo i treći primjer, recimo da imate neki svoj program koji ima log datoteku /var/log/program.log.

Kreirajte datoteku /etc/logrotate.d/program ovog sadržaja:

/var/log/program.log {
    compress
    delaycompress
    missingok
    notifempty
    rotate 4
    weekly
dateext
}

Od sad će se log datoteka vašeg programa rotirati 4 puta (jednom tjedno), nakon čega će biti obrisana sa diska. Opcija dateext će rotiranim arhivama dati nastavak u obliku YYYYMMDD, umjesto jedostavnih brojeva .1, .2 i dalje. Ovo je jako praktično ako pravite arhive svojih logova na neke druge medije (što preporučamo!).

Kao i uvijek, za popis svih ostalih opcija konzultirajte manual stranicu sa "man logrotate".

 

Kuharice: 
Vote: 
0
No votes yet