Protokoly jsou užitečné, když chcete sledovat využití nebo odstraňovat problémy s aplikací. Jak se však zaznamenává více informací, soubory protokolu zabírají více místa na disku. Přesčas může soubor protokolu narůst do nepraktické velikosti. Nedostatek místa na disku kvůli velkému souboru protokolu je problém, ale velký soubor protokolu může také zpomalit proces změny velikosti nebo zálohování vašeho virtuálního serveru. Kromě toho je těžké hledat konkrétní událost, pokud máte milion záznamů protokolu, které byste mohli prolistovat. Proto je dobré udržovat soubory protokolu na zvládnutelné velikosti a ořezávat je, když jsou příliš staré na to, aby byly příliš užitečné.
Naštěstí nástroj logrotate rotaci protokolu usnadňuje. „Otáčení protokolu“ označuje postup archivace aktuálního protokolu aplikace, spuštění nového protokolu a mazání starších protokolů. Systém obvykle spouští logrotate jednou denně a při spuštění kontroluje pravidla, která lze přizpůsobit na základě adresáře nebo protokolu.
Jak funguje logrotate
Systém spouští logrotate podle plánu, obvykle denně. Ve většině distribucí se skript, který denně spouští logrotate, nachází na adrese/etc/cron.daily/logrotate
.
Některé distribuce používají variaci. Například na Gentoo se skript logrotate nachází na adrese /etc/cron.daily/logrotate.cron
.
Pokud chcete, aby se logrotate spouštělo častěji (například pro hodinovou rotaci protokolu), musíte použít cron ke spuštění logrotate prostřednictvím skriptu v/etc/cron.hourly
.
Když se logrotate spustí, načte své konfigurační soubory, aby zjistil, kde najít soubory protokolu, které potřebuje otočit, jak často by se měly soubory rušit a kolik archivovaných protokolů si má ponechat.
logrotate.conf
Hlavní konfigurační soubor logrotate se nachází na adrese /etc/logrotate.conf
.
Soubor obsahuje výchozí parametry, které logrotate používá, když rotuje. Soubor je okomentován, takže si jej můžete prohlédnout, abyste viděli, jak je konfigurace nastavena. Několik konkrétních příkazů v tomto souboru je popsáno dále v tomto článku.
Všimněte si, že jeden řádek v souboru zní:
include /etc/logrotate.d
Tento adresář obsahuje většinu konfiguračních souborů specifických pro aplikaci.
logrotate.d
Pomocí následujícího příkazu vypíšete obsah adresáře, který ukládá nastavení protokolu specifické pro aplikaci:
ls /etc/logrotate.d
V závislosti na tom, kolik je na vašem serveru nainstalováno, může tento adresář obsahovat žádné soubory nebo několik. Obecně platí, že aplikace, které se instalují prostřednictvím správce balíčků, také vytvoří konfigurační soubor v /etc/logrotate.d
.
Adresář obvykle obsahuje konfigurační soubor pro vaši službu syslog, který logrotate čte při rotaci systémových protokolů. Tento soubor obsahuje položku pro různé systémové protokoly spolu s některými příkazy podobnými těm, které jsou obsaženy v logrotate.conf
.
POZNÁMKA: Na verzích operačních systémů Ubuntu starších než Karmic Koala (9.10) není žádná položka pro službu syslog. Před tímto vydáním byly systémové protokoly rotovány pomocí savelog
příkaz spusťte z /etc/cron.daily/sysklogd
skript.
Uvnitř souboru aplikace
Jako příklad zvažte obsah konfiguračního souboru logrotate, který může být vložen při instalaci Apache na systém Fedora:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
Při spuštění logrotate zkontroluje všechny soubory v /var/log/httpd
které končí log
a otočí je, pokud nejsou prázdné. Pokud zkontroluje adresář httpd a nenajde žádné soubory protokolu, negeneruje chybu. Poté spustí příkaz v postrotate/endscript
block (v tomto případě příkaz, který říká Apache, aby se restartoval), ale až poté, co zpracuje všechny zadané protokoly.
Tento vzorový soubor neobsahuje některá nastavení, která jsou zahrnuta v souboru logrotate.conf
soubor. Příkazy v logrotate.conf
fungovat jako výchozí pro rotaci protokolu. Pokud chcete přepsat výchozí hodnoty, můžete pro libovolnou aplikaci zadat různá nastavení. Pokud máte například zaneprázdněný webový server, možná budete chtít zahrnout daily
příkaz v konfiguračním bloku Apache, aby se protokoly Apache střídaly denně namísto výchozí týdenní rotace.
Další část popisuje některé z běžněji používaných příkazů, které se skutečně provádějí v konfiguračním souboru logrotate.
Konfigurační příkazy
Úplný seznam příkazů používaných v konfiguračních souborech logrotate můžete získat na stránce manuál:
man logrotate
Tato část popisuje běžně používané příkazy.
Pamatujte, konfigurační soubory pro aplikace v /etc/logrotate.d
zdědí jejich výchozí hodnoty z hlavního /etc/logrotate.conf
soubor.
Soubory protokolu
Soubor protokolu a jeho chování při rotaci jsou definovány výpisem souboru protokolu (nebo souborů) následovaným sadou příkazů uzavřených ve složených závorkách. Většina konfiguračních souborů aplikace bude obsahovat pouze jeden z těchto bloků, ale je možné vložit více než jeden do souboru nebo přidat bloky souboru protokolu do hlavního logrotate.conf
soubor.
Můžete uvést více než jeden soubor protokolu pro blok použitím zástupného znaku v názvu nebo oddělením souborů protokolu v seznamu mezerami. Chcete-li například zadat všechny soubory v adresáři /var/foo, které končí na .log
a soubor/var/bar/log.txt
, nastavíte blok následovně:
/var/foo/*.log /var/bar/log.txt {
rotate 14
daily
compress
delaycompress
sharedscripts
postrotate
/usr/sbin/apachectl graceful > /dev/null
Endscript
}
Počet otočení
rotate
určuje, kolik archivovaných protokolů se vrátí, než logrotate začne mazat ty starší. Například:
rotate 4
Tento příkaz říká logrotate, aby uchovával čtyři archivované protokoly najednou. Pokud existují čtyři archivované protokoly, když se protokol znovu otočí, nejstarší se smaže, aby se uvolnilo místo pro nový archiv.
Interval rotace
Můžete zadat příkaz, který říká logrotate, jak často má otáčet konkrétní protokol. Mezi možné příkazy patří:
daily
weekly
monthly
yearly
Pokud není zadán interval rotace, protokol se otočí při každém spuštění logrotate (pokud není jiná podmínka jako size
bylo nastaveno).
Pokud chcete použít jiný než definovaný časový interval, musíte použít cron k vytvoření samostatného konfiguračního souboru. Pokud například chcete otáčet konkrétní soubor protokolu každou hodinu, můžete vytvořit soubor v/etc/cron.hourly
(možná budete muset vytvořit i tento adresář), který by obsahoval řádek jako následující:
/usr/sbin/logrotate /etc/logrotate.hourly.conf
Pak byste konfiguraci pro toto hodinové spouštění logrotate (umístění souboru protokolu, zda se mají komprimovat staré soubory atd.) vložili do /etc/logrotate.hourly.conf
.
Velikost
Můžete použít size
příkaz k zadání velikosti souboru pro logrotate, který se má zkontrolovat při určování, zda provést rotaci. Formát příkazu říká logrotate, jaké jednotky používáte k určení velikosti:
size 100k
size 100M
size 100G
První příklad by protokol otočil, pokud by byl větší než 100 kilobajtů, a druhý, pokud je větší než 100 megabajtů, a třetí, pokud je větší než 100 gigabajtů. Nedoporučuji používat limit 100G, pozor, ten příklad se nám trochu vymkl z rukou.
Příkaz size má přednost a nahrazuje interval rotace, pokud jsou oba nastaveny.
Komprese
Pokud chcete archivované soubory protokolu komprimovat (ve formátu gzip), můžete zahrnout následující příkaz, obvykle v /etc/logrotate.conf
:
compress
Komprese je obvykle dobrý nápad, protože soubory protokolu obvykle obsahují text a text se dobře komprimuje. Pokud však máte nějaké archivované protokoly, které nechcete komprimovat, ale přesto chcete, aby byla komprimace ve výchozím nastavení zapnutá, můžete do konfigurace specifické pro aplikaci zahrnout následující příkaz:
nocompress
Další důležitý příkaz týkající se komprese je následující:
delaycompress
Tento příkaz je užitečný, pokud chcete komprimovat archivované protokoly, ale chcete komprimaci zpozdit. Když delaycompress
je aktivní, archivovaný protokol se zkomprimuje při příštím otočení protokolu. To může být důležité, když máte program, který může po otočení nového souboru ještě nějakou dobu zapisovat do svého starého log souboru. Všimněte si, že delaycompress
funguje, pouze pokud máte compress
ve vaší konfiguraci.
Příklad, kdy je vhodné použít delaycompress
by bylo, když je logrotate řečeno, aby restartoval Apache pomocí direktivy „graceful“ nebo „reload“. Protože staré procesy Apache neskončí, dokud nejsou dokončena jejich připojení, mohou se potenciálně po nějakou dobu po restartu pokusit přihlásit další položky do starého souboru. Zpoždění komprese zajistí, že při rotaci protokolů neztratíte tyto další položky protokolu.
Postrotate
Logrotate spustí postrotate
skript pokaždé, když otočí protokol určený v konfiguračním bloku. Tento skript obvykle chcete použít k restartování aplikace po rotaci protokolu, aby se aplikace mohla přepnout na nový protokol.
postrotate
/usr/sbin/apachectl restart > /dev/null
endscript
>/dev/null
říká logrotate, aby výstup příkazu odvedl nikam. V tomto případě nemusíte prohlížet výstup, pokud se aplikace správně restartovala.
postrotate
příkaz říká logrotate, že skript se má spustit, začíná na dalším řádku a endscript
příkaz říká, že skript je hotový.
Sdílené skripty
Normálně logrotate spustí postrotate
skript pokaždé, když rotuje log. To platí také pro více protokolů, které používají stejný konfigurační blok. Například konfigurační blok webového serveru, který odkazuje jak na přístupový protokol, tak na chybový protokol, v případě rotace obou spustí postrotate
skript dvakrát (jednou pro každý otočený soubor). Pokud se oba soubory otočí, webový server se dvakrát restartuje.
Chcete-li, aby logrotate nespouštěl tento skript pro každý protokol, můžete zahrnout následující příkaz:
sharedscripts
Tento příkaz říká logrotate, aby před spuštěním postrotate
zkontroloval všechny protokoly pro daný konfigurační blok skript. Pokud se jeden nebo oba protokoly otočí, postrotate
skript se spustí pouze jednou. Pokud se žádný z logsis neotočil, postrotate
skript se nespustí.
Kam jít dál
Tento článek poskytuje přehled toho, co logrotate dělá a jaké možnosti konfigurace máte k dispozici. Nyní byste měli být schopni prozkoumat stávající konfigurace a přizpůsobit je svým potřebám. Chcete-li se dozvědět, jak vytvořit ukázkovou konfiguraci (pro rotaci protokolů pro vlastní virtuální hostitele), viz Ukázkové konfigurace logrotate a odstraňování problémů.