Weboldal keresés

A naplóforgatás beállítása és kezelése a Logrotate használatával Linux alatt


Az egyik legérdekesebb (és talán az egyik legfontosabb) könyvtár egy Linux rendszerben a /var/log. A fájlrendszer-hierarchia szabvány szerint a rendszerben futó legtöbb szolgáltatás tevékenysége egy ebben a könyvtárban vagy annak valamelyik alkönyvtárában található fájlba van írva.

Az ilyen fájlok naplókként ismertek, és kulcsfontosságúak a rendszer működésének (és a múltbeli viselkedésének) vizsgálatához. A naplók jelentik az első információforrást is, ahová a rendszergazdák és a mérnökök a hibaelhárítás során keresnek.

Ha megnézzük a /var/log tartalmát CentOS/RHEL/Fedora és Debian/Ubuntu rendszeren (a változatosság kedvéért), látni fogjuk a következő naplófájlokat és alkönyvtárakat.

Kérjük, vegye figyelembe, hogy az eredmény némileg eltérhet az Ön esetében a rendszer(ek)en futó szolgáltatásoktól és azok futásának idejétől függően.

RHEL/CentOS-ben és Fedorában

ls /var/log

Debianban és Ubuntuban

ls /var/log

Mindkét esetben megfigyelhetjük, hogy a naplónevek némelyike a várt módon „log ”-ra végződik, míg mások dátummal vannak átnevezve (például maillog-20160822 CentOS rendszeren) vagy tömörített (fontoljuk az auth.log.2.gz és mysql.log.1.gz fájlokat Debian rendszeren).

Ez nem a választott disztribúción alapuló alapértelmezett viselkedés, de tetszés szerint megváltoztatható a konfigurációs fájlok direktíváival, amint azt ebben a cikkben látni fogjuk.

Ha a naplókat örökre megőriznék, azok végül kitöltenék a fájlrendszert, ahol a /var/log található. Ennek megelőzése érdekében a rendszergazda használhatja a logrotate nevű hasznos segédprogramot a naplók rendszeres tisztítására.

Néhány szóban a logrotate átnevezi vagy tömöríti a fő naplót, ha egy feltétel teljesül (erről egy perc múlva bővebben), így a következő esemény egy üres fájlba kerül rögzítésre.

Ezenkívül eltávolítja a „régi” naplófájlokat, és megtartja a legújabbakat. Természetesen mi döntjük el, mit jelent a „régi”, és milyen gyakran szeretnénk, hogy a logrotate megtisztítsa helyettünk a naplókat.

A Logrotate telepítése Linux alatt

A logrotate telepítéséhez használja a csomagkezelőt:

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

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

Érdemes megjegyezni, hogy a konfigurációs fájl (/etc/logrotate.conf) azt jelezheti, hogy az egyes .conf fájlokon más, specifikusabb beállítások is elhelyezhetők. /etc/logrotate.d.

Ez akkor és csak akkor lesz így, ha a következő sor létezik, és nincs megjegyzésben:

include /etc/logrotate.d

Mi ragaszkodunk ehhez a megközelítéshez, mivel ez segít rendet tartani, és a következő példákhoz aDebian dobozt használjuk.

A Logrotate beállítása Linuxon

Mivel egy nagyon sokoldalú eszköz, a logrotate rengeteg direktívát tartalmaz, amelyek segítenek nekünk beállítani, hogy mikor és hogyan forgatjuk el a naplókat, és mi történjen közvetlenül utána.

Szúrjuk be a következő tartalmat az /etc/logrotate.d/apache2.conf fájlba (megjegyzendő, hogy valószínűleg Önnek kell létrehoznia ezt a fájlt), és vizsgálja meg az egyes sorokat, hogy jelezze a célját:

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

Az első sor azt jelzi, hogy a blokkon belüli direktívák a /var/log/apache2 összes naplójára vonatkoznak:

  • A heti azt jelenti, hogy az eszköz hetente megpróbálja elforgatni a naplókat. További lehetséges értékek napi és havi.
  • A 3 elforgatása azt jelzi, hogy csak 3 elforgatott naplót kell megtartani. Így a legrégebbi fájl a következő negyedik futtatáskor törlődik.
  • A size=10M beállítja az elforgatáshoz szükséges minimális méretet 10M-re. Más szavakkal, az egyes naplók nem kerülnek elforgatásra, amíg el nem érik a 10 MB-ot.
  • A tömörítés és a delaycompress funkció azt jelzi, hogy az összes elforgatott naplót – a legutóbbi kivételével – tömöríteni kell.

Végezzünk szárazon futást, hogy megnézzük, mit csinálna a logrotate, ha ténylegesen most végrehajtódik. Használja a -d opciót, majd a konfigurációs fájlt (valójában a logrotate futtatható, ha kihagyja ezt az opciót):

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

Az eredmények az alábbiakban láthatók:

A naplók tömörítése helyett átnevezhetjük őket az elforgatásuk dátuma után. Ehhez a dateext direktívát használjuk. Ha a dátumformátumunk eltér az alapértelmezett ééééhhnn értéktől, a dátumformátum használatával megadhatjuk.

Ne feledje, hogy még a forgatást is megakadályozhatjuk, ha a napló üres a notifempty funkcióval. Ezenkívül mondjuk meg a logrotate-nek, hogy küldje el az elforgatott naplót a rendszeradminisztrátornak (ebben az esetben [e-mail védett]) segítségül (ehhez be kell állítani egy levelezőszervert, ami kívül esik e cikk hatályán).

Ha szeretne e-maileket kapni a logrotate-ról, beállíthatja a Postfix levelezőkiszolgálót az alábbi módon: Postfix levelezőszerver telepítése

Ezúttal az /etc/logrotate.d/squid.conf használatával csak a /var/log/squid/access.log forgatását fogjuk használni:

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

Ahogy az alábbi képen is láthatjuk, ezt a naplót nem kellett forgatni. Ha azonban a méretfeltétel teljesül (size=1M), az elforgatott napló átnevezése access.log-25082020 lesz (ha a naplót augusztusban forgatták el 25, 2020) és a fő napló (access.log) újra létrejön 0644 hozzáférési jogosultságokkal és root beállítással. tulajdonosként és csoporttulajdonosként.

Végül, amikor a naplók száma eléri a 6ot, a legrégebbi naplót a rendszer elküldi a [email  címre.

Most tegyük fel, hogy egy egyéni parancsot szeretne futtatni, amikor az elforgatás megtörténik. Ehhez helyezze az ilyen parancsot tartalmazó sort a postrotate és endscript direktívák közé.

Tegyük fel például, hogy e-mailt szeretnénk küldeni a root rendszernek, amikor a /var/log/myservice naplók valamelyike elforgatásra kerül. Adjuk hozzá a piros sorokat az /etc/logrotate.d/squid.conf fájlhoz:

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

Végül, de nem utolsósorban fontos megjegyezni, hogy az /etc/logrotate.d/*.conf fájlban található opciók ütközés esetén felülírják a fő konfigurációs fájlban lévőket.

Logrotate és Cron

Alapértelmezés szerint a logrotate telepítése létrehoz egy crontab fájlt az /etc/cron.daily fájlban logrotate néven. Ahogy az ebben a könyvtárban található többi crontab fájl esetében is, ez naponta 6:25-től indul le, ha az anacron nincs telepítve.

Ellenkező esetben a végrehajtás 7:35 körül kezdődik. Az ellenőrzéshez figyelje a cron.daily sort az /etc/crontab vagy az /etc/anacrontab mappában.

Összegzés

Egy több naplót generáló rendszerben az ilyen fájlok adminisztrációja a logrotate segítségével jelentősen leegyszerűsíthető. Amint azt ebben a cikkben kifejtettük, automatikusan elforgatja, tömöríti, eltávolítja és elküldi a naplókat rendszeres időközönként, vagy amikor a fájl elér egy adott méretet.

Csak győződjön meg arról, hogy cron-feladatként fut, és a logrotate sokkal könnyebbé teszi a dolgát. További részletekért lásd a man oldalt.

Van kérdése vagy javaslata ezzel a cikkel kapcsolatban? Nyugodtan ossza meg velünk az alábbi megjegyzés űrlap segítségével.