Logrotate: zkrocení zlých logů

Adam Štrauch 17. 2. 2012

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:

widgety

  • 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.

Našli jste v článku chybu?
DigiZone.cz: Ultra HD v praxi a v Portugalsku

Ultra HD v praxi a v Portugalsku

Lupa.cz: Blíží se konec Wi-Fi sítí bez hesla?

Blíží se konec Wi-Fi sítí bez hesla?

120na80.cz: Co je padesátkrát sladší než cukr?

Co je padesátkrát sladší než cukr?

Vitalia.cz: Tahák, jak vyzrát nad zápachem z úst

Tahák, jak vyzrát nad zápachem z úst

Vitalia.cz: Test dětských svačinek: Tyhle ne!

Test dětských svačinek: Tyhle ne!

Podnikatel.cz: Udělali jsme velkou chybu, napsal Čupr

Udělali jsme velkou chybu, napsal Čupr

DigiZone.cz: DVB-T2 ověřeno: seznam TV zveřejněn

DVB-T2 ověřeno: seznam TV zveřejněn

120na80.cz: Nejsilnější alergeny jsou pryč

Nejsilnější alergeny jsou pryč

Lupa.cz: Proč jsou firemní počítače pomalé?

Proč jsou firemní počítače pomalé?

Lupa.cz: Adblock Plus začal prodávat reklamy

Adblock Plus začal prodávat reklamy

DigiZone.cz: Wimbledon na Nova Sport až do 2019

Wimbledon na Nova Sport až do 2019

Lupa.cz: Cimrman má hry na YouTube i vlastní doodle

Cimrman má hry na YouTube i vlastní doodle

Podnikatel.cz: „Lex Babiš“ Babišovi paradoxně pomůže

„Lex Babiš“ Babišovi paradoxně pomůže

DigiZone.cz: Technisat připravuje trojici DAB

Technisat připravuje trojici DAB

Měšec.cz: TEST: Vyzkoušeli jsme pražské taxikáře

TEST: Vyzkoušeli jsme pražské taxikáře

DigiZone.cz: Světový pohár v přímém přenosu na ČT

Světový pohár v přímém přenosu na ČT

DigiZone.cz: Nova opět stahuje „milionáře“

Nova opět stahuje „milionáře“

DigiZone.cz: Digi Slovakia zařazuje stanice SPI

Digi Slovakia zařazuje stanice SPI

Vitalia.cz: Tohle jsou nejlepší česká piva podle odborníků

Tohle jsou nejlepší česká piva podle odborníků

Podnikatel.cz: Nemá dluhy? Zjistíte to na poště

Nemá dluhy? Zjistíte to na poště