Jedním z nejzajímavějších (a možná také jedním z nejdůležitějších) adresářů v systému Linux je /var/log
. Podle standardu Filesystem Hierarchy Standard je činnost většiny služeb spuštěných v systému zapsána do souboru v tomto adresáři nebo v jednom z jeho podadresářů.
Takové soubory jsou známé jako protokoly a jsou klíčem ke zkoumání toho, jak systém funguje (a jak se choval v minulosti). Protokoly jsou také prvním zdrojem informací, kam se administrátoři a inženýři podívají při odstraňování problémů.
Pokud se podíváme na obsah /var/log
na CentOS/RHEL/Fedora a Debian/Ubuntu (pro zpestření) uvidíme následující soubory protokolu a podadresáře.
Vezměte prosím na vědomí, že výsledek se může ve vašem případě poněkud lišit v závislosti na službách spuštěných na vašem systému (systémech) a době, kdy byly spuštěny.
V RHEL/CentOS a Fedora
# ls /var/log

V Debianu a Ubuntu
# ls /var/log

V obou případech můžeme pozorovat, že některé názvy protokolů končí podle očekávání na “log“ , zatímco ostatní jsou buď přejmenovány pomocí data (například maillog-20160822 na CentOS ) nebo komprimované (zvažte auth.log.2.gz a mysql.log.1.gz v Debianu ).
Toto není výchozí chování založené na zvolené distribuci, ale lze jej libovolně změnit pomocí direktiv v konfiguračních souborech, jak uvidíme v tomto článku.
Pokud by byly protokoly uchovávány navždy, nakonec by zaplnily souborový systém, kde /var/log sídlí. Aby tomu zabránil, může správce systému použít příjemnou utilitu s názvem logrotate k pravidelnému čištění protokolů.
Několika slovy logrotujte přejmenuje nebo zkomprimuje hlavní protokol, když je splněna podmínka (více o tom za minutu), takže další událost bude zaznamenána do prázdného souboru.
Kromě toho odstraní „staré“ log soubory a uchová ty nejnovější. Samozřejmě se musíme rozhodnout, co „staré“ znamená a jak často chceme, aby logrotate vyčistilo protokoly za nás.
Instalace Logrotate v Linuxu
Chcete-li nainstalovat logrotate , stačí použít správce balíčků:
---------- On Debian and Ubuntu ---------- # aptitude update && aptitude install logrotate ---------- On CentOS, RHEL and Fedora ---------- # yum update && yum install logrotate
Stojí za to poznamenat, že konfigurační soubor (/etc/logrotate.conf
) může naznačovat, že na jednotlivé .conf
mohou být umístěna jiná, konkrétnější nastavení soubory uvnitř /etc/logrotate.d .
Bude tomu tak tehdy a pouze tehdy, pokud následující řádek existuje a není zakomentován:
include /etc/logrotate.d
Budeme se držet tohoto přístupu, protože nám pomůže udržet věci v pořádku, a použijeme Debia n pole pro následující příklady.
Nakonfigurujte Logrotate v Linuxu
Logrotate je velmi univerzální nástroj a poskytuje spoustu direktiv, které nám pomohou nakonfigurovat, kdy a jak se budou protokoly střídat a co by se mělo stát hned poté.
Vložme následující obsah do /etc/logrotate.d/apache2.conf (všimněte si, že s největší pravděpodobností budete muset tento soubor vytvořit) a prozkoumejte každý řádek, abyste označili jeho účel:
apache2.conf/var/log/apache2/* { weekly rotate 3 size 10M compress delaycompress }
První řádek označuje, že direktivy uvnitř bloku platí pro všechny protokoly v /var/log/apache2 :
- týdně znamená, že se nástroj pokusí otočit protokoly každý týden. Další možné hodnoty jsou denní a měsíční.
- otočte 3 znamená, že by se měly uchovávat pouze 3 otočené protokoly. Nejstarší soubor bude tedy odstraněn při čtvrtém následujícím spuštění.
- velikost=10M nastaví minimální velikost pro rotaci na 10M. Jinými slovy, každý protokol nebude rotován, dokud nedosáhne 10 MB.
- komprimovat a delaycompress se používají k označení, že všechny otočené protokoly, s výjimkou toho nejnovějšího, by měly být komprimovány.
Proveďme zkušební provoz, abychom viděli, co by logrotate udělal, kdyby byl nyní skutečně proveden. Použijte -d
volba následovaná konfiguračním souborem (ve skutečnosti můžete spustit logrotate vynecháním této volby):
# logrotate -d /etc/logrotate.d/apache2.conf
Výsledky jsou uvedeny níže:

Namísto komprimace protokolů bychom je mohli přejmenovat podle datu když byly otočeny. K tomu použijeme dateext
směrnice. Pokud je náš formát data jiný než výchozí rrrrmmdd , můžeme jej specifikovat pomocí dateformat .
Všimněte si, že můžeme dokonce zabránit rotaci, pokud je protokol prázdný pomocí notifempty . Kromě toho řekněme logrotate, aby poslal otočený protokol správci systému ([e-mail chráněný] v tomto případě) pro jeho referenci (to bude vyžadovat nastavení poštovního serveru, což je mimo rozsah tohoto článku).
Pokud chcete dostávat e-maily o logrotate, můžete nastavit poštovní server Postfix, jak je znázorněno zde:Instalace poštovního serveru Postfix
Tentokrát použijeme /etc/logrotate.d/squid.conf otočit pouze /var/log/squid/access.log :
squid.conf/var/log/squid/access.log { monthly create 0644 root root rotate 5 size=1M dateext dateformat -%d%m%Y notifempty mail [email protected] }
Jak můžeme vidět na obrázku níže, tento protokol nebylo nutné otáčet. Pokud je však splněna podmínka velikosti (velikost=1M ), bude otočený protokol přejmenován na access.log-25082020 (pokud byl protokol otočen 25. srpna 2020 ) a hlavní protokol (access.log ) bude znovu vytvořen s přístupovými oprávněními nastavenými na 0644 a s rootem jako vlastník a vlastník skupiny.
Konečně, když počet protokolů konečně dosáhne 6 , nejstarší protokol bude zaslán na adresu [email protected] .

Nyní předpokládejme, že chcete spustit vlastní příkaz, když dojde k rotaci. Chcete-li to provést, umístěte řádek s takovým příkazem mezi direktivy postrotate a endscript.
Předpokládejme například, že chceme odeslat e-mail rootovi, když se některý z protokolů uvnitř /var/log/myservice se otáčí. Přidejte červené řádky do /etc/logrotate.d/squid.conf :
squid.conf/var/log/myservice/* { monthly create 0644 root root rotate 5 size=1M postrotate echo "A rotation just took place." | mail root endscript }
V neposlední řadě je důležité poznamenat, že možnosti obsažené v /etc/logrotate.d/*.conf
v případě konfliktů přepíše ty v hlavním konfiguračním souboru.
Logrotate a Cron
Ve výchozím nastavení vytvoří instalace logrotate soubor crontab uvnitř /etc/cron.daily s názvem logrotate . Stejně jako v případě ostatních souborů crontab v tomto adresáři se bude spouštět denně od 6:25 pokud není nainstalován anacron.
Doporučeno ke čtení :11 příkladů úloh plánování Cron v LinuxuV opačném případě bude provádění zahájeno kolem 7:35 . Pro ověření sledujte řádek obsahující cron.daily buď v /etc/crontab nebo /etc/anacrontab .
Shrnutí
V systému, který generuje několik protokolů, lze správu takových souborů výrazně zjednodušit pomocí logrotate. Jak jsme vysvětlili v tomto článku, bude se automaticky otáčet, komprimovat, odstraňovat a odesílat protokoly pravidelně nebo když soubor dosáhne dané velikosti.
Jen se ujistěte, že je nastaveno na spouštění jako úloha cron a logrotate vám hodně usnadní práci. Další podrobnosti naleznete na stránce manuálu.
Máte nějaké dotazy nebo návrhy k tomuto článku? Neváhejte a dejte nám vědět pomocí níže uvedeného formuláře pro komentáře.