Naplófájlok forgatása és tömörítése a Logrotate programmal

botond küldte be 2019. 04. 17., sze – 23:32 időpontban

Az 1. oldal tartalma

 

Bevezető

Ha sok szolgáltatást futtatunk szerverünkön, naplófájljaink átfogó és rendszeres vizsgálata nehézkessé válik. Erre kínál hasznos megoldást a logrotate parancs, amely automatizáltan forgatja a különböző programok által generált naplófájlokat, tömöríti a régebbieket, és törli a meghatározott időnél öregebbeket, valamint lehetőséget biztosít email-os értesítések küldésére is. A program használatával már nem kell aggódnunk hogy pár napos vagy hetes távollét után betemetnek a log fájlok, mert azok rendezett állapotban várják hogy átnézhessük őket. Ebben a leírásban megismerkedünk a Logrotate program általános használatával.

 

 

Telepítés

A logrotate parancs a Debian 8 (Jessie) és a Debian 9 (Stretch) alaprendszerek része, így egyből használható. Amennyiben valamilyen okból kifolyólag mégse lenne a rendszerünkben, akkor telepítsük a logrotate csomagot az alábbi paranccsal:

apt-get install logrotate

Jelenleg a Debian 8 (Jessie) rendszer a Logrotate 3.8.7-es verzióját tartalmazza, a Debian 9 (Stretch) pedig a 3.11.0-ás verziót. Ha ennél frissebb verzióra lenne szükségünk, akkor a program forrását kell letöltenünk a GitHub oldaláról, majd abból lefordítani a friss csomagot az ott leírtak szerint. De erre a legtöbb esetben nincs szükség, mert bőven elegendő a disztribúcióval szállított verzió is.

 

Működése

A logrotate parancs a rendszer időzítőjéből, a cron-ból kerül lefuttatásra, amely alapesetben naponta történik:

cat /etc/cron.daily/logrotate
#!/bin/sh

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Itt a bináris parancsfájl meglétének vizsgálata után lefuttatja azt, megadva neki a fő konfigurációs fájlt (logrotate.conf), ami néhány alapbeállítást és pár rendszerszintű naplófájl (wtmp, btmp) forgatásának konfigurációját tartalmazza, valamint meghatároz egy további konfigurációkat tároló könyvtárat is, amiben a különböző log fájlokat generáló programok helyezhetik el a forgatáshoz szükséges beállító fájljaikat. Ezek közül az utóbbi könyvtár a fontos számunkra, hiszen nekünk is ebben a könyvtárban kell létrehoznunk a forgatni kívánt naplófájljaink számára szükséges beállító fájlokat.

Ez a könyvtár a /etc/logrotate.d/. Ebben vannak a beállító fájlok, amik alapján a logrotate parancs elvégzi az adott naplófájl forgatását. Minden itt található beállítófájl lehet egy külön naplófájlhoz tartozó beállítás, de egy fájlban is lehet több beállítás. Ha például egy szolgáltatás több naplófájlt is generál párhuzamosan, akkor célszerű azokat egy beállítófájlban meghatározni, így később is áttekinthető marad a struktúra.

Apache példa beállítások

Lássunk egy példát a meglévő fájlok közül, olvassuk ki az Apache beállítófájlját:

cat /etc/logrotate.d/apache2

Ebben a következőt találjuk (ezt a példát a Debian 8 (Jessie) LAMP szerverből emeltem ki):

/var/log/apache2/*.log {
        daily
        missingok
        rotate 14
        compress
        delaycompress
        notifempty
        create 640 root adm
        sharedscripts
        postrotate
                if /etc/init.d/apache2 status > /dev/null ; then \
                    /etc/init.d/apache2 reload > /dev/null; \
                fi;
        endscript
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi; \
        endscript
}

Ebben a példában az első sor határozza meg a naplófájl(oka)t. Jelen esetben a /var/log/apache2 könyvtárban minden .log kiterjesztésű fájlra érvényesek a blokkban lévő forgatási beállítások, melyeknek a jelentése a következő:

daily

Naplófájl forgatása naponta. Itt más intervallumot is be lehet állítani: weekly, monthly, yearly

missingok

Ha nem létezik a fenti mintának megfelelő naplófájl, akkor a kapcsoló hatására nem veszi hibának, hanem ugrik a következőre.

rotate x

Forgatás x alkalommal. A fenti napi beállítással tehát 14 napig forgatja a naplófájlokat, azaz növeli az előzők sorszámát, majd a jelenlegit nevezi át 1-es sorszámúra. Amelyik fájl már elérte az x-edik forgatást, azt törli, vagy elküldi emailban, amennyiben meg van adva a mail direktíva is. Ha itt 0-át adunk meg, akkor nem történik forgatás, hanem a régebbi verziókat egyből törli.

compress

Ha meg van adva, akkor a régebbi verziókat tömöríti forgatás után.

delaycompress

Ha ez is meg van adva (csak a compress opcióval együtt van hatása), akkor egy fázissal elhalasztja a tömörítést. Tehát ilyenkor nem tömöríti be egyből az átforgatott naplófájlt, hanem csak a következő forgatási ciklusban. Ez jól jöhet, amikor szükség van az előző naplófájl azonnali olvashatóságára anélkül, hogy ki kellene csomagolni. Például a különböző webstatisztikák is használhatják még az előző naplófájlt, stb.

notifempty

A kapcsoló hatására nem kerül forgatásra a naplófájl, amennyiben az üres. Hibanaplók esetén hasznos, mert ilyenkor ha sokáig nincs hiba egy adott naplófájlban, akkor a régebbiek sem kerülnek még törlésre.

create 640 root adm

Itt szabályozható, hogy milyen jogosultságokkal, felhasználóval és csoporttal hozza létre a logrotate az új, üres logfájlt a forgatáskor. Akkor lehet hasznos, ha például egy daemon érzékeny a naplófájljainak a jogosultsági beállításaira.

sharedscripts

Ha a beállító blokk több naplófájlra is érvényes (pl. *.log), mint ebben a példában is, és a postrotate rész is meg van adva, akkor a logrotate program alapesetben minden fájl forgatásánál lefuttatja a postrotate részben megadott scriptet. Így például az Apache esetén az access.log és az error.log fájlok forgatásánál kétszer is lefut a script amiben újratölti az Apache-ot. Ha ez a kapcsoló jelen van, akkor meggátolja a script többszöri lefuttatását ugyanarra a beállítási blokkra vonatkozóan, így csak egyszer fut le, miután forgatásra került minden megadott fájl.

postrotate

A naplófájl(ok) forgatása után lefuttatja azt a kódrészt, ami a "postrotate" és az "endscript" címkék között található. Így ezzel hasznos parancsokat hajthatunk végre a naplófájlok forgatása után. Jelen példában az Apache újratöltése (nem újraindítása!).

prerotate

Ezt a kódblokkot (itt is az "endscript"-ig) pedig a naplófájlok forgatása előtt hajtja végre. Jelen példában ellenőrzi, hogy létezik-e a /etc/logrotate.d/httpd-prerotate könyvtár, amennyiben igen, végrehajt benne minden futtatható fájlt. Hosszabb folyamatoknál célszerű használni, amik például nyitva tartják a naplófájlokat, így azokat nem lehetne forgatni, csak miután bezárják a fájlokat.

 

 

További beállítások

A fenti példa beállításokon kívül még vannak egyéb opciók is, itt megismerhetünk még néhányat.

copytruncate

A naplófájl forgatásakor a fájl mozgatása és az új fájl létrehozása helyett lemásolja az eredetit, majd törli annak tartalmát. Így fizikailag ugyanaz a fájl marad meg a forgatás után. Hasznos lehet, ha például nem kivitelezhető az adott folyamat által nyitva tartott naplófájl bezárása és újranyitása.

size

A size paraméterrel szabályozhatjuk, hogy mekkorára engedje nőni a naplófájlt a logrotate program, mielőtt végrehajtja a forgatást. Példák:

size 100k
size 100M
size 100G

Ez az opció magasabb prioritással bír, mint a daily/weekly/monthly/yearly beállítás, így ha a naplófájl mérete meghaladja a fentebbi módon meghatározott fájlméretet, akkor a forgatás bekövetkezik a következő cron ciklusban, amikor lefut a program.

dateext

A kapcsoló hatására a forgatáskor a lementett naplófájl nevét nem sorszámmal látja el, hanem helyette belekerül az aktuális napi dátum. Ez csak legfeljebb napi egyszeri forgatás esetén működik megfelelően, mert a következő forgatásnál felülírja a napi fájlt a frissebb változattal, ami ugyanazon a napon készült. Így tehát ha esélyes, hogy egy napon belül többször kerül forgatásra egy naplófájl, akkor ne használjuk.

Példa kimeneti fájlnév:

naplo.log-20190412.gz

maxage

A kapcsolónak megadott napnál öregebb naplófájlt törli, függetlenül a többi beállítástól. Példa:

[...]
maxage 10
[...]

Ebben az esetben a forgatáskor törli a 10 napnál régebbi naplófájl példányokat.

compresscmd és compressext

A kapcsolókkal szabályozhatjuk, hogy milyen tömörítőprogramot használjon a logrotate és hogy milyen kiterjesztést adjon a forgatott és becsomagolt naplófájloknak. Példa:

[...]
compresscmd /bin/bzip2
compressext .bz2
[...]

Természetesen csak a compress kapcsolóval együtt érvényes.

mail

A rendszer forgatáskor kiküldi a megadott email címre a forgatott naplófájlt. Példa:

[...]
mail <email@hoszt.hu>
[...]

 

Ezek lennének tehát a Logrotate beállításai, amikkel finomhangolhatjuk a naplófájlok forgatásának és archiválásának menetét. A következő oldalon saját hasznos példákkal folytatjuk a program megismerését.

 

Lapozó

Ez a leírás több oldalból áll: