Vyhledávání na webu

Jak nastavit a spravovat rotaci protokolu pomocí Logrotate v systému Linux


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 uvnitř tohoto adresáře nebo jednoho 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 dí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 rozmanitost), 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í “log“, zatímco jiné 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 na Debian silný>).

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 se nachází /var/log. Abyste tomu zabránili, může správce systému použít pěknou utilitu nazvanou logrotate k pravidelnému čištění protokolů.

Stručně řečeno, logrotate po splnění podmínky přejmenuje nebo zkomprimuje hlavní protokol (více o tom za minutu), takže další událost bude zaznamenána do prázdného souboru.

Kromě toho odstraní “staré ” soubory protokolu a zachová ty nejnovější. Samozřejmě se musíme rozhodnout, co znamená „starý“ a jak často chceme, aby logrotate vyčistil 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é soubory .conf uvnitř mohou být umístěna jiná, konkrétnější nastavení. /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 pro následující příklady použijeme pole Debian.

Nakonfigurujte Logrotate v Linuxu

Logrotate je velmi univerzální nástroj a poskytuje spoustu direktiv, které nám pomohou nakonfigurovat, kdy a jak budou protokoly rotovány 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:

/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čení 3 znamená, že by měly být zachovány 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.
  • compress 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 volbu -d následovanou konfiguračním souborem (vynecháním této volby můžete spustit logrotate):

logrotate -d /etc/logrotate.d/apache2.conf

Výsledky jsou uvedeny níže:

Namísto komprimace protokolů jsme je mohli přejmenovat podle datu, kdy byly otočeny. K tomu použijeme direktivu dateext. Pokud je náš formát data jiný než výchozí yyyymmdd, můžeme jej určit 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 (v tomto případě [e-mail chráněný]) pro jeho referenci (to bude vyžadovat nastavení poštovního serveru, což je mimo rámec 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 pouze k rotaci /var/log/squid/access.log:

/var/log/squid/access.log {
    monthly
    create 0644 root root
    rotate 5
    size=1M
    dateext
    dateformat -%d%m%Y
    notifempty
    mail [email 
}

Jak můžeme vidět na obrázku níže, tento log nebylo nutné otáčet. Pokud je však splněna podmínka velikosti (size=1M), bude otočený protokol přejmenován na access.log-25082020 (pokud byl protokol otočen v srpnu 25, 2020) a hlavní protokol (access.log) bude znovu vytvořen s přístupovými oprávněními nastavenými na 0644 a root jako vlastník a vlastník skupiny.

Nakonec, když počet protokolů konečně dosáhne 6, nejstarší protokol bude odeslán na adresu [email .

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 otočí některý z protokolů v /var/log/myservice. Přidáme červené řádky do /etc/logrotate.d/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 uvedené v /etc/logrotate.d/*.conf v případě konfliktů přepíší ty v hlavním konfiguračním souboru.

Logrotate a Cron

Ve výchozím nastavení vytvoří instalace logrotate soubor crontab v /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ě počínaje 6:25, pokud není nainstalován anacron.

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

souhrn

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.