GNU/Linux >> Znalost Linux >  >> Linux

Jak otáčet a komprimovat soubory protokolu v Linuxu pomocí Logrotate

V systému Linux a téměř ve všech systémech jsou soubory protokolu zásadní, pokud jde o zkoumání a odstraňování chyb. Poskytují důležitá vodítka k tomu, co se mohlo pokazit s různými systémovými službami před selháním.

Jakákoli služba nainstalovaná na vašich systémech Linux, jako je webový server Apache nebo databázový server MySQL, generuje soubory protokolu, které jsou obvykle uloženy v adresáři /var/log adresář. Pokud zkontrolujete obsah tohoto adresáře, uvidíte obsah podobný tomu, který máme níže:

Postupem času, jak se zaznamenávají další informace, se soubory protokolu zvětšují a zabírají více místa na pevném disku. Než si to uvědomíte, soubory protokolů nabudou velikosti a pohltí velkou část místa na vašem pevném disku, a pokud nebudete opatrní, můžete snadno dojít místo na disku.

S ohledem na to je rozumné udržovat soubory protokolu na zvládnutelné velikosti a mazat staré položky protokolu, které zabírají drahocenný diskový prostor. A zde přichází na řadu rotace logu.

Co je rotace protokolu?

Otočení protokolu je proces, který vytváří nové soubory protokolu a archivuje a odstraňuje staré, aby se ušetřilo místo na disku. Proces přejmenuje aktuální soubor protokolu. Například apport.log se změní na apport.log.1 a nový apport.log log soubor je vytvořen pro protokolování nových položek protokolu. Starší soubory protokolu jsou obvykle komprimovány a zobrazují se jako  apport.log.2.gz , apport.log.3.gz , apport.log.4.gz , a tak dále.

Proces rotace protokolu je usnadněn pomocí nástroje s názvem logrotate . Toto je nástroj, který usnadňuje rotaci souborů protokolu a archivaci a odstraňování starých souborů, aby se uvolnilo místo na disku. Stručně řečeno, logrotate provádí následující:

  • Vytvoření nových souborů protokolu po otočení starých.
  • Archivace starých souborů protokolu.
  • Vymazání starších souborů protokolu, které byly otočeny, aby se ušetřilo místo.

Rotace protokolu se obvykle aktivuje, když velikost souborů protokolu naroste a překročí určitý limit.

Jak funguje nástroj logrotate

Než prozkoumáme fungování nástroje logrotate, ujistěte se, že je ve vašem systému nainstalován logrotate. Chcete-li to provést, zadejte příkaz:

Pro systém Debian / Ubuntu:

$ sudo apt-get install logrotate -y

Pro systém CentOS / RHEL / Fedora:

$ sudo yum install logrotate -yor $ sudo dnf install logrotate -y

Spusťte níže uvedený příkaz a zkontrolujte verzi logrotate,

linuxtech[email protected]:~$ logrotate --versionlogrotate 3.14.0    Výchozí poštovní příkaz:       /usr/bin/mail    Výchozí příkaz pro komprimaci:   /bin/gzip    Výchozí příkaz pro dekomprimaci:/bin/gunzip    Výchozí přípona pro komprimaci:.gz Výchozí cesta k souboru stavu:    /var/lib/logrotate/status    Podpora ACL:                 ano    Podpora SELinux:            ano[chráněno e-mailem]:~$

Z výstupu jasně vidíme, že máme logrotate verzi 3.14.0. Ve výchozím nastavení je logrotate v moderních distribucích Linuxu předinstalovaný, a proto jej není třeba instalovat.

Logrotujte konfigurační soubory

Logrotate se spouští denně jako úloha cron, prochází různými soubory protokolu, otáčí je a čistí starší soubory protokolu, jak je definováno v konfiguračním souboru. Existují dva hlavní zdroje konfigurace, kterým musíte věnovat velkou pozornost:

/etc/logrotate.conf – Toto je hlavní konfigurační soubor pro nástroj logrotate. Obsahuje výchozí nastavení a usnadňuje rotaci protokolů pro protokoly nesystémových balíčků. Ještě pozoruhodnější je, že používá ‘zahrnout Direktiva ‘ pro stahování konfigurací umístěná v souboru ‘/etc/logrotate.d ‘ adresář. Podívejme se na konfigurační soubor.

$ cat /etc/logrotate.conf

Ze zobrazené konfigurace soubor /etc/logrotate.conf rotuje soubory protokolu týdně jak je uvedeno na řádku 3 .

  • Řádek 7 označuje, že soubory protokolu vlastní uživatel root a skupina adm.
  • Řádek 10 označuje, že jsou zálohovány pouze soubory protokolu za 4 týdny, po kterých budou starší vymazány nebo odstraněny, aby se vytvořilo více místa na disku.
  • Řádek 13 dává pokyn k vytvoření nového souboru protokolu po otočení aktuálního souboru protokolu.
  • Příkaz zahrnout nařádku 22 stáhne konfigurace souborů aplikace, které jsou uvedeny v adresáři /etc/logrotate.d.

/etc/logrotate.d – Toto je adresář, který obsahuje konfiguraci logrotate nainstalovaných balíčků, jejichž soubory protokolu vyžadují rotaci protokolu. Obvykle také pravděpodobně najdete konfigurační soubory systémových nástrojů, jako jsou apt &dpkg (pro systémy Debian), rsyslog, ufw a cups-daemon. Zde je to, co byste našli:

[e-mail chráněný]:~$ ls -l /etc/logrotate.d/total 60-rw-r--r-- 1 kořenový adresář 120 září  5  2019 alternatives-rw-r--r-- 1 kořenový adresář root 126. pro --r-- 1 kořenový kořen 130 21. ledna  2019 btmp-rw-r--r-- 1 kořenový kořen 181 17. února 08:19 cups-daemon-rw-r--r-- 1 kořenový kořen 112 5. září  2019 dpkg-rw-r--r-- 1 kořenový kořen 329 4. února  2019 nginx-rw-r--r-- 1 kořenový adresář  94 únor  8  2019 ppp-rw-r--r-- 1 kořenový kořen 501 7. března 2019 rsyslog-rw-r--r-- 1 kořenový adresář 677 29. listopadu 02:08 speech-dispatcher-rw-r--r-- 1 kořenový adresář 119 30. března 21:49 ubuntu-advantage-tools-rw-r --r-- 1 kořenový kořen 178 21. ledna 22:16 ufw-rw-r--r-- 1 kořenový kořen 235 13. dubna 23:37 bezobslužné upgrady-rw-r--r-- 1 kořenový kořen 145 února 19  2018 wtmp[e-mail chráněn]:~$

Podívejme se na konfigurační soubor nástroje správce balíčků dpkg.

$ cat -n /etc/logrotate.d/dpkg

  • měsíčně :Toto dává pokyn k rotaci souborů protokolu jednou za měsíc
  • otočte 12 :Je zálohováno 12 starých souborů protokolu.
  • komprimovat :To znamená, že otočené soubory mají být komprimovány pomocí výchozí komprese gzip se soubory protokolu s příponou .gz.
  • Vytvořte 644 kořenový kořen :Vytvoří nový soubor protokolu, jakmile je rotace protokolu dokončena s osmičkovými oprávněními k souboru 644 s uživatelským a skupinovým vlastnictvím uživatele root.
  • chybějící :Direktiva potlačí chybové zprávy v případě chybějícího souboru protokolu.
  • notifempty :Toto ignoruje rotaci souboru, pokud je soubor protokolu prázdný.

Vytvořte vzorový konfigurační soubor logrotate

Předpokládejme, že máme aplikaci spuštěnou jako uživatel linuxtechi a generuje soubory protokolu, které jsou uloženy v /home/linuxtechi/logs adresář. Musíme nastavit, aby se soubory protokolu střídaly každý týden.

Nejprve však vytvoříme konfigurační soubor logrotate v domovském adresáři, jak je znázorněno:

$ vim /home/linuxtechi/logrotate.conf

Dále vložíme zobrazenou konfiguraci:

/home/linuxtechi/logs/*.log {    weekly    missingok    otočit 14    komprimovat    vytvořit}

Pojďme si to dát do kontextu:

Soubory protokolu se budou střídat každý týden, s potlačením všech chybových zpráv, pokud některý ze souborů protokolu chybí. V průběhu měsíce bude zálohováno 14 souborů protokolu s vytvořením nového souboru protokolu po otočení aktuálního souboru protokolu.

Nyní vytvoříme adresář protokolů, který bude obsahovat soubory protokolu aplikace, a poté vytvoříme soubor protokolu s názvem app.log.

[chráněno e-mailem]:~$ mkdir logs &&cd logs[email protected]:~/logs$ touch app.log[email protected]:~/logs$ lsapp.log[email protected]:~/logs$ 

Nyní spustíme příkaz logrotate k vytvoření souboru stavu logrotate v domovském adresáři, abychom ověřili, zda byly záznamy protokolu vytvořeny či nikoli.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose

Získáte výstup podobný tomuto:

Z výstupu nebyl soubor protokolu otočen z prostého důvodu, že k rotaci dochází každý týden a soubor protokolu je sotva hodinu starý.

Prohlédněte si soubor logrotate a ověřte, zda byly zaznamenány nějaké informace o běhu rotace protokolu.

[e-mail chráněný]:~$ cat logrotate-statelogrotate state -- verze 2"/home/linuxtechi/logs/app.log" 2020-5-24-17:0:0[e-mail protected]:~$ 

Z výstupu můžeme vidět, že utilita logrotate potvrdila, kdy naposledy považovala soubor protokolu za rotaci, a vytiskne se časové razítko.

Nyní přinutíme logrotate k otočení souboru protokolu – což by se jinak zatím nestalo, protože zadaný časový interval ještě nebyl překročen – pomocí –force příznak, jak je znázorněno.

$ logrotate /home/linuxtechi/logrotate.conf --state /home/linuxtechi/logrotate-state --verbose --force

Pokud se vrátíte zpět do adresáře logs, uvidíte další soubor protokolu, který byl otočen a zkomprimován, jak je znázorněno.

[e-mailem chráněno]:~$ cd logs/[e-mailem chráněno]:~/logs$ lsapp.log  app.log.1.gz[e-mailem chráněno]:~/logs$

Komprimujte a otáčejte soubory protokolu podle velikosti

Někdy se soubory protokolu mohou zvětšit a pohltit místo ještě před stanoveným časovým intervalem pro rotaci, ať už je to denní, týdenní nebo měsíční.

Jedním ze způsobů, jak problém vyřešit, je zadat maximální velikost souboru, při překročení se spustí rotace souboru protokolu. Chcete-li toho dosáhnout, zadejte maximální velikost možnost v souboru logrotate.

Chcete-li například spustit rotaci, když velikost souboru přesáhne 40 megabajtů, zahrňte možnost:

maximální velikost 40M

Předpokládejme, že vytvoříme vlastní soubor rotace protokolu pro naši aplikaci ve složce /etc/logrotate.d,

[chráněno e-mailem]:~$ cd /etc/logrotate.d/[chráněno e-mailem]:/etc/logrotate.d$ sudo vi custom-app/home/linuxtechi/logs/app-access.log{    daily    missingok velikost 40M    otočit 4    komprimovat    vytvořit}

Uložte a zavřete soubor,

Přípona M označuje Megabajty , Pro kilobajty použijte k zatímco G označuje velikost v gigabajtech .

Z prohlášení vyplývá, že soubory protokolu větší než 40 MB budou rotovány bez ohledu na časový interval rotace. To znamená, že u souboru protokolu, který má být otočen po 1 hodině, bude otočen před stanoveným intervalem, pokud překročí práh 40 MB.

Pojďme vypsat některá data do souboru protokolu naší vlastní aplikace a pak uvidíme, jak logrotate bude soubory protokolu otáčet,

[e-mail chráněný]:~$ dd if=/dev/zero of=/home/linuxtechi/logs/app-access.log bs=1M počet=2525+0 záznamů ve 25+0 záznamech mimo 26214400 bajtů (26 MB, 25 MiB) zkopírováno, 0,0422015 s, 621 MB/s[chráněno e-mailem]:~$ du -sh /home/linuxtechi/logs/app-access.log25M     /home/linuxtechi/logs/app-access.log[chráněno e-mailem] :~$

Použijte „-d ’ možnost v příkazu logrotate pro provedení suchého spuštění logrotate v souboru protokolu, spusťte následující příkaz,

$ logrotate -d /etc/logrotate.d/custom-app

Jak můžeme vidět na výstupu, logrotate neotáčí soubor protokolu, protože velikost není větší než 40 MB.

Nyní udělejme velikost souboru protokolu více než 40 MB,

[e-mail chráněno]:~$ cd logs/[email protected]:~/logs$ dd if=/dev/zero of=app-access.log bs=1M počet=4545+0 záznamů v45+0 záznamů mimo47185920 bajtů (47 MB, 45 MiB) zkopírováno, 0,136979 s, 344 MB/s[chráněno e-mailem]:~/logs$ du -sh app-access.log46M     app-access.log[chráněno e-mailem]:~/logs$ 

Nyní zkuste znovu spustit příkaz logrotate s volbou „-d“,

Výše uvedený výstup potvrzuje, že logroate otočí soubor protokolu, protože velikost je větší než 40 MB.

Kromě vylepšení rotace souborů protokolu na základě velikosti je rozumné zajistit, aby se konfigurační soubor logrotate volal s pravidelnou frekvencí pomocí úlohy cron. To je zvláště důležité pro soubory protokolu, jejichž velikost se tak rychle zvětšuje a riskují, že zaplní místo na disku.

Existují dva způsoby, jak toho dosáhnout:

Skript logrotate můžete zkopírovat z adresáře /etc/cron.daily do umístění /etc/cron.hourly. Tím se rotace protokolu přepne na hodinovou základnu, nikoli na denní.

Dalším způsobem je zadat úlohu cron v souboru /etc/crontab, jak je znázorněno

*/10 * * * * /etc/cron.daily/logrotate

Toto spustí rotaci každých 10 minut.

Použití crontab k vyvolání skriptu logrotate kromě určení maximální velikosti pomocí direktivy maxsize představuje dokonalou kombinaci, která zajistí, že se soubory protokolu budou rotovat včas, aby nedošlo k zaplnění pevného disku.

Další možnosti s nástrojem logrotate najdete na manuálových stránkách, jak je uvedeno:

Závěr

V této příručce jsme osvětlili důležitost souborů protokolu, hrozbu, kterou mohou způsobit, pokud se zvětší, a jak může nástroj logrotate pomoci spravovat velikost souborů protokolu ve vašem systému. Podívali jsme se také na některé dostupné možnosti použití v konfiguraci logrotate.


Linux
  1. Jak komprimovat soubory a adresáře v systému Linux (s příklady)

  2. Jak spravovat soubory protokolu pomocí Logrotate v Linuxu

  3. Jak archivovat a komprimovat soubory na Linuxu

  1. Jak komprimovat a extrahovat soubory pomocí příkazu tar v systému Linux?

  2. Jak přenášet soubory v Linuxu pomocí SCP a Rsync

  3. Jak otočit soubory protokolu Apache v Linuxu

  1. Otočte a archivujte protokoly pomocí příkazu logrotate systému Linux

  2. Jak kopírovat / přesouvat soubory a adresáře v Linuxu pomocí příkazů „cp“ a „mv“.

  3. Odstraňte soubory pomocí logrotate