Logrotate: zkrocení zlých logů

17. 2. 2012
Doba čtení: 4 minuty

Sdílet

 Autor: Depositphotos
Nemusíte být linuxoví guru, abyste si mohli pořídit nějaký ten virtuální server, který se dnes často vyplatí pomalu víc než běžný hosting. I na malém serveru běží spousta služeb, která vygeneruje spoustu informačních hlášek plnících soubory s logy, a aby se logy moc nenafukovaly, je potřeba je zpracovávat.

Soubory s logy najdeme ve /var/log. Když ne zrovna všechno jde podle plánu, je to první místo, kam by měl administrátor zajít a podívat se, co se děje. Někdy je dobré logy občas jen tak proletět, aby nebyl uživatel překvapen vyvrcholením dlouhodobějšího problému. Dnes ale nebudeme řešit, kde co máme hledat, ale podíváme se na logy jako takové. Do logů zapisuje kdejaký daemon a je tam nasměrován i výstup jádra, které dokáže být při problémech velmi upovídané. Proto je potřeba dostat logy pod kontrolu, aby nebraly zbytečně místo na disku jiným důležitým součástem systému, ale zároveň aby se zachovala jejich informační hodnota.

Je tedy potřeba dodržet několik bodů:

  • Logy rostou a je potřeba je komprimovat
  • Logy mohou být důležité a je potřeba je uchovávat
  • Logy by se neměly plést pod rukama

Stačí jeden upovídaný ovladač, kterému se něco nelíbí a váš /var/log/dmesg nebude znát konce. Takový log ale klidně můžete hodit do koše, protože při příštím restartu může vypadat úplně jinak. Na druhou stranu taková e-mailová komunikace by mohla být důležitá, a tak je potřeba ji rozumně skladovat určité období. Podobně na tom je třeba log /var/log/auth.log, kde můžeme nalézt úspěšné i neúspěšné pokusy o přihlášení do systému. V takovém logu co není podezřelé dnes, může být podezřelé zítra, a proto je lepší si držet historii ještě větší. Na druhou stranu takový log webového serveru můžeme zahodit hned, jak z něj vysajeme informace potřebné k vytvoření statistik.

Činnost, při které se logy zpracují, uloží jinam a třeba zkomprimují, se nazývá rotování a v Linuxu se o něj stará daemon Logrotate. Ten je v některých distribucích nastaven tak, aby si poradil se standardní konfigurací, která vypadne z balíčků různých služeb. Mohou ale vznikat situace, kdy distribuce s nějakým log souborem nepočítá. Může jít o zapomenutý balíček, nějakou uživatelskou aplikaci nebo o individuální nastavení nějakého daemona, který rozděluje logy například podle uživatelů. V takovém případě je potřeba dát logrotate o nových log souborech vědět, aby si s nimi poradilo. Není to nic složitého a rozhodně je to lepší než znenadání zjistit, že velikost obsahu adresáře /var/log nekontrolovatelně vyrostla až na kritickou mez, že to začalo ovlivňovat funkčnost systému. V takovém případě je dobré vědět, jak se s logrotate pracuje a jaké u něj má uživatel možnosti.

Konfigurace

Logrotate je program, který je spouštěn každý den z cronu, takže neběží na pozadí a nebere tak důležité systémové prostředky. Při každém spuštění si přečte konfigurační soubor, zjistí si informace o log souborech zahrnutých v konfiguraci a pak provede co má nastaveno. Téměř s jistotou máte logrotate už ve svém systému, protože je opravdu velmi široce používán. Výjimkou mohou být některé jednoúčelové distribuce jako třeba OpenWRT, které logují do ramdisku a tyto problémy se jich netýkají.

Konfigurace logrotate je uložena povětšinou v souboru /etc/logrotate.conf a adresáři /etc/logrotate.d/. První jmenovaný obsahuje výchozí nastavení, případně rotování některých základních logů a oproštěn o komentáře vypadá takto:

weekly
rotate 4
create
compress

include /etc/logrotate.d 

V překladu to znamená, že se budou logy generovat jednou týdně, bude se držet historie čtyř logů, po jejich rotování se vytvoří nové a ty staré se zkomprimují. Přes jeden řádek pak logrotate říkáme, kde má hledat zbytek konfigurace, jenž nastaví konkrétní parametry pro jednotlivé daemony. „Zrotovanému“ logu se na konec přidá pořadové číslo, které se v každém cyklu posune o jedničku. Výsledek pak vypadá třeba takto:

mail.err
mail.err.1
mail.err.2.gz
mail.err.3.gz
mail.err.4.gz 

U konkrétních služeb se musíme především vypořádat s problémem, který vzniká, pokud se daemon stará o logování sám a nežene zprávy přes syslog nebo podobný logovací nástroj. Dobrým příkladem je třeba Apache, kde administrátor často odděluje log soubory s přístupy k jednotlivým webům. Apache si neumí poradit, když mu proces rotování vezme logy pod nosem a pokud ho nerestartujete, přestane logovat úplně. Proto je potřeba sledovat, jak se která aplikace chová. Někde to vyřešil distributor, který přidal konfigurační soubor k daemonu v jeho balíčku, ale jinde je třeba si s tím poradit ručně.

Konfigurační soubor třeba pro Apache pak může vypadat takto:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
        /etc/init.d/apache2 reload > /dev/null
    endscript
} 

Z příkladu vyčtete, že se má rotování provádět každý týden, logy se mají hledat ve /var/log/apache2/, výsledek má být zkomprimován, ale až od druhého cyklu. Všimněte si parametru postrotate, který na konci rotování reloaduje Apache. Ten zavře otevřené log soubory a vytvoří si nové. Popis k dalším hodnotám najdete v následujícím seznamu:

bitcoin_skoleni

  • weekly – rotovat každý týden (další možnosti daily nebo monthly)
  • missingok – pokud log chybí, nehlásí se chyba a jde se na další
  • rotate 52 – udržovat historii 52 cyklů (52 souborů)
  • compress – komprimovat otočení logy
  • delaycompress – komprimovat až při druhé otočce (první otočený je stále plain text)
  • notifempty – nevšímat si logu, pokud je prázdný
  • create 640 root adm – po rotaci vytvořit log nový a dát mu tato práva a vlastníka
  • sharedscripts – spustí postrotate pouze jednou a ne pro každý log soubor

Shrnutí

Další zajímavé volby najdete v manuálové stránce:

man logrotate 

Tam jsou všechny možnosti velmi pěkně popsané včetně příkladů. Jelikož většina distribucí již má logrotate nějak nakonfigurován, můžete se podívat na další příklady tam. Logrotate dále umí odesílat logy na e-mail, což můžete využít například k zálohování a již rotované logy umí přesunout do jiného adresáře, aby se nepletly mezi ostatními.

Autor článku

Adam Štrauch je redaktorem serveru Root.cz a svobodný software nasazuje jak na desktopech tak i na routerech a serverech. Ve svém volném čase se stará o komunitní síť, ve které je již přes 100 členů.