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.