Linuxové násroje hlavičkový obrázek

Automatická správa logů pomocí logrotate

Každý, kdo provozuje nějaký server jistě dobře ví, že kvalitní logování potažmo kvalitní log může velmi pomoci v případech, kdy vše nefunguje tak jak má. Kvalita logu je vždy velmi diskutovanou jednotkou, kterou ale správce aplikace nedokáže vždy ovlivnit, neboť log je generován již při vývoji aplikace. Co ale správci serverů ovlivnit dokáží je úroveň logování. Velmi často se lze setkat s úrovněmi typu ERROR, WARN, INFO, DEBUG, které poskytují jisté celky informací. Je vcelku jasné, že úroveň ERROR poskytne méně informací než úroveň DEBUG. Množství informací samozřejmě přímo souvisí s velikostí obsazeného diskového prostoru. Může se tak velmi brzo stát, že při zvýšené úrovni logování dojde k zaplnění místa na disku a tím k nedostupnosti služeb.

Aby se předešlo úplnému zaplnění disku je vhodné nastavit nějaké limity na to, kolik prostoru může log dané služby zabírat. Existuje několik způsobů, jak logy rotovat (každý ze způsobů lze označit jako triggeer). Základním triggerem je čas, tedy rotace logů jednou za den. Tento trigger je vhodný u služeb, které negenerují příliš velké logy (textové soubory) a služeb, u kterých se nepředpokládá velký rozdíl logování při zátěži. Pokud se ale jedná o službu, jejíž log může během pár hodin vyrůst o desítky procent, je lepší zavést trigger založený na velikosti souboru.

Po vykonání operace (triggeru) pak obvykle dojde k přesunu aktuálního logovacího souboru a následnému založení logu nového. Díky tomuto mechanizmu je správcům umožněno prohlížet i logy několik dnů staré. Jako poslední krok je vhodné staré logy ještě navíc zmenšit pomocí kompresních nástrojů a tím ušetřit ještě více místa.

Nyní bude následovat příklad toho, jak vlastní službu vybavit o tento nástroj logrotate. Problematika bude předvedena na příkladu vlastní služby, která negeneruje příliš veliký log, tudíž bude využit přístup jednodenní rotace.

Prvním krokem, kontrolou, je nahlédnutí do složky /etc/cron.daily/, zda obsahuje soubor logrotate, který spouští službu logrotate jednou denně.

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

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

Jak je ze skriptu patrné, je spuštěn proces logrotate s jedním vstupním parametrem – jeho konfiguračním souborem.

 cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Konfigurační soubor je opět vcelku snadno čitelný, jsou zde nějaké obecná nastavení pro logrotate službu. Nejdůležitější částí tohoto konfiguračního souboru je část include /etc/logrotate.d, která procesu říká, že má přidat všechny konfigurace, které nalezne v dané cestě. Obsah této složky se bude na každém systému lišit v závislosti na instalovaných službách. Tato složka je přesně to místo, kam je vhodné přidat konfigurační soubory pro vlastní služby.

Stejně jako i v jiných případech je i zde vhodné inspirovat se již hotovými řešeními. Pro naší ukázkovou službu je přidán konfigurační soubor s následujícím obsahem.

/var/log/service.log {
        missingok
        notifempty
        rotate 5
        create 640 carwatchdog adm
        compress
        daily
}

Následuje krátký popis jednotlivých řádků konfigračního souboru.

  • /var/log/service.log – soubor, který má být rotován
  • missingok – pokud soubor chybí, bude přeskočen bez hlášení chyb
  • notifempty – nerotuje log, pokud je soubor prázdný
  • rotate 5 – počet historických kopií
  • create … – vytvoří nový soubor logu s nastavenými parametry
  • compress – starší logy budou zmenšeny kompresí
  • daily – logy jsou rotovány každý den

Pro další informace, větší potrobnosti a záludnosti bych doporučil prostudovat manuálové stránky utility logrotate, případně

Zdroje dalších informací

https://linux.die.net/man/8/logrotate


Posted

in

by

Tags: