GNU/Linux >> Znalost Linux >  >> Linux

Pochopení nástroje logrotate

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


Linux
  1. Jak používat Logrotate ke správě souborů protokolu

  2. Vysvětlení souboru /etc/login.defs

  3. Pochopení časových razítek souborů Mac

  1. Linux – Rozumíte unixovým oprávněním a typům souborů?

  2. Omezit přístup k souboru pouze na připojení

  3. cp-L vs. cp-H

  1. Pochopení konfiguračního souboru /etc/profile v Linuxu

  2. Pochopení oprávnění UNIX a typů souborů

  3. Logrotate Úspěšné, původní soubor se vrátí do původní velikosti