Operační systém Linux a spuštěné aplikace často generují protokoly do souborů. Tyto soubory jsou často uloženy v /var/log
adresář nebo jakýkoli jiný soubor určený aplikací. Pokud tyto soubory protokolu nejsou rotovány, komprimovány a pravidelně ořezávány, nakonec spotřebují veškerý dostupný prostor na disku a způsobí zamrznutí serveru.
V této příručce se podíváme na to, jak logrotate funguje, a poté se podíváme na příklad, jak nakonfigurovat logrotate pro naši vlastní aplikaci.
Předpoklady
Abyste mohli postupovat podle tohoto průvodce, potřebujete:
- Moderní linuxová distribuce jako Ubuntu, Debian, Centos, Rhel, Rocky Linux
- Přístup uživatele root k serveru nebo uživateli s právy sudo
Zkontrolujte verzi logrotate pomocí tohoto příkazu:
logrotate --version
Výstup z mého systému:
# logrotate --version
logrotate 3.8.6
Pokud Logrotate není nainstalován, zobrazí se chyba. Nainstalujte prosím software pomocí správce balíčků vaší distribuce Linuxu.
Konfigurace logrotátu
Konfigurace logrotate lze nalézt v tomto souboru /etc/logrotate.conf
. Zde se nachází výchozí nastavení. Najdete zde také některé konfigurace rotace pro protokoly, které nevlastní žádné systémové balíčky.
Nejdůležitější řádek v tomto konfiguračním souboru je include /etc/logrotate.d
. To dává logrotate pokyn, aby také zkontroloval konfigurace přidané do tohoto adresáře. To znamená, že pro naše aplikace nemusíme přidávat vše do toho hlavního souboru, můžeme vytvořit jednotlivé konfigurační soubory a přidat je do /etc/logrotate.d
adresář. Většina balíčků, které instalujete a které potřebují pomoc s rotací protokolů, umístí své konfigurační soubory logrotate také do tohoto adresáře.
Toto je nějaký obsah z hlavního /etc/logrotate.conf
soubor:
weekly
rotate 4
create
dateext
compress
weekly
nakonfigurovat týdenní rotace protokolů pomocí souborů protokolu vlastněných rootem uživatele a syslog skupinarotate 4
jsou uchovávány čtyři soubory protokolu (uchovávejte nevyřízené položky za 4 týdny)create
nové prázdné soubory protokolu vytvářené po otočení aktuálního souborudateex
použijte datum jako příponu otočeného souborucompress
komprimovat otočené soubory
Pro jednotlivé soubory v /etc/logrotate.d
adresář, podívejme se na jeden jako příklad:
cat /etc/logrotate.d/yum
Výstup:
/var/log/yum.log {
missingok
notifempty
maxsize 30k
yearly
create 0600 root root
}
Každá z těchto konfigurací zdědí výchozí konfigurace v /etc/logrotate.conf
adresář.
Vysvětlení:
/var/log/yum.log
tento první řádek uvádí, na který soubor jsou cíle konfiguracemissingok
pokud soubor neexistuje, je stále v pořádku a logrotate by nemělo chybovat ani zaznamenávat žádnou chybunotifempty
neotáčejte soubor protokolu, pokud je prázdnýmaxsize
pokud velikost přesahuje 30 kB, otočteyearly
běžet jednou ročněcreate 0600 root root
vytvořte nový otočený soubor jakoroot
:root
s oprávněním0600
Některé další možnosti, které nejsou uvedeny výše:
rotate 30
uchovávat třicet souborů, nejstarší oříznout, když překročímonthly
střídat jednou za měsíccompress
komprimovat otočené soubory. toto používágzip
ve výchozím nastavení a výsledkem jsou soubory končící na.gz
. Příkaz komprese lze změnit pomocícompresscmd
možnost.
Logrotování souboru protokolu vlastní aplikace
Když máme vlastní aplikaci, která generuje a zapisuje protokoly do souboru, je naším úkolem nakonfigurovat, jak se u tohoto souboru provádí rotace.
- Pokud máme přístup root, ideálně bychom konfigurační soubor umístili do
/etc/logrotate.d/
a fungovalo by to tak, jak je popsáno výše - Pokud nemáme přístup root, museli bychom nakonfigurovat cron, aby spouštěl
logrotate
příkaz předávající konfiguraci, kterou jsme definovali - Pokud chcete protokoly střídat častěji než denně – například každou hodinu, protože nastavení systému Logrotate se spouští pouze jednou denně
Konfigurace v /etc/logrotate.d/
Řekněme, že máme vypnuté protokoly generování aplikací do /var/log/our-app/app.log
a běží jako centos
. Vytvořme náš logrotate konfigurační soubor /etc/logrotate/ourapp.conf
s některými příklady konfigurací:
sudo vim /etc/logrotate.d/ourapp.conf
Konfigurace:
/var/log/our-app/*.log {
daily
missingok
rotate 30
compress
notifempty
create 0640 centos centos
sharedscripts
postrotate
systemctl reload our-app
endscript
}
Některé nové směrnice:
create 0640 centos centos
vytvoří prázdný soubor protokolu po otočení se zadanými oprávněními0640
a zadaný uživatel a skupinacentos
sharedscripts
znamená, že všechny skripty přidané do konfigurace jsou spuštěny pouze jednou za běh, namísto pro každý rotovaný soubor. Pokud je direktiva/var/log/our-app/*.log
odpovídá více než jednomu souboru protokolu, skript specifikovaný vpostrotate
bez této možnosti by běžel dvakrátpostrotate
doendscript
blok obsahuje skript, který se spustí po otočení souboru protokolu. V našem případě znovu načtení aplikace. To je někdy nutné, aby se aplikace přepnula na nově vytvořený soubor protokolu. Všimněte si, žepostrotate
běží před komprimací protokolů. Komprese může trvat dlouho a váš software by se měl okamžitě přepnout na nový soubor protokolu. Pro úlohy, které je třeba spustit po protokoly jsou komprimovány, použijtelastaction
místo toho blokovat.
Chcete-li otestovat výše uvedenou konfiguraci, použijte tento příkaz:
sudo logrotate /etc/logrotate.conf --debug
Výstup bude o tom, které soubory protokolu Logrotate zpracovává a co by s nimi udělal. Standardní úloha Logrotate se bude spouštět jednou denně a bude zahrnovat vaši novou konfiguraci.
Ukázková data ve výstupu
...
rotating pattern: /var/log/our-app/*.log after 1 days (30 rotations)
empty log files are not rotated, old logs are removed
No logs found. Rotation not needed.
...
Pomocí logrotate
příkaz pro vlastní konfiguraci
Pokud nemáte root přístup k systému a chcete logrotovat své vlastní soubory, tato sekce vám nabízí způsob, jak toho dosáhnout.
Řekněme aplikace our-app
je generování souborů protokolu a ukládání do vlastní cesty v rámci našeho domovského adresáře, např. ~/apps/our-app/logs/
. Pokud jsou protokoly generovány často, chtěli bychom je střídat hourly
. Ale logrotate nefunguje každou hodinu?
Nejprve vytvoříme konfigurační soubor logrotate. Soubor umístím do adresáře app conf do této cesty ~/apps/our-app/conf/lorotate.conf
s následující konfigurací:
Upravte soubor:
vim ~/apps/our-app/conf/lorotate.conf
S následující konfigurací:
/home/centos/apps/our-app/logs/*.log {
rotate 30
hourly
compress
sharedscripts
delaycompress
missingok
notifempty
dateext
dateformat -%Y-%m-%d-%s
copytruncate
}
Výše uvedená konfigurace otočí soubory v adresáři /home/centos/apps/our-app/logs/*.log
každou hodinu, komprimovat a uchovávat pouze 30 starých protokolů.
copytruncate
zkopíruje obsah souboru protokolu do nového souboru a poté soubor protokolu zkrátí.dateformat
určuje formát otočeného souborudateext
pokyn logrotate, aby zahrnoval příponu data pro otočené soubory.
Pro testování:
mkdir -p ~/apps/our-app/{logs,conf}
touch ~/apps/our-app/logs/app.log
Nyní, když máme soubor na svém místě, můžeme nyní použít logrotate
aby se to otočilo. Jediné, co musíme udělat, je zadat state
soubor. state
soubor zaznamenává, co logrotate
viděl to naposledy, takže ví, co má dělat. Nastavení instalace systému je již zpracováno v /var/lib/logrotate/status
ale v našem případě musíme specifikovat.
Můžeme k tomu použít domovský adresář:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
--verbose
vytiskne podrobné informace o tom, co Logrotate dělá.
Měli byste vidět výstup jako tento:
$ logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose
reading config file /home/centos/apps/our-app/config/logrotate.conf
Allocating hash table for state file, size 15360 B
Handling 1 logs
rotating pattern: /home/centos/apps/our-app/logs/*.log hourly (30 rotations)
empty log files are not rotated, old logs are removed
considering log /home/centos/apps/our-app/logs/app.log
log does not need rotating (log has been already rotated)set default create context
Některé informace byly zaznamenány ve stavovém souboru logrotate:
$ cat ~/logrotate-status
logrotate state -- version 2
"/home/centos/apps/our-app/logs/app.log" 2021-9-4-6:0:0
Logrotate zaznamenal protokoly, které viděl, a kdy je naposledy zvažoval k rotaci. Pokud stejný příkaz spustíme o hodinu později, protokol se otočí podle očekávání.
Pokud chcete přinutit Logrotate, aby otočil soubor protokolu, když by to jinak nebylo, použijte --force
příznak:
logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status --verbose --force
To je užitečné při testování postrotate
a další skripty.
Další věcí je, aby se výše uvedený příkaz spouštěl automaticky. Toho lze dosáhnout pomocí cronů. crontab
příkaz se hodí.
K úpravě cronů můžeme použít tento příkaz:
crontab -e
Tím se otevře textový soubor. V souboru již mohou být nějaké komentáře, které vysvětlují očekávanou základní syntaxi. Přesuňte kurzor dolů na nový prázdný řádek na konec souboru a přidejte následující:
3 * * * * /usr/sbin/logrotate ~/apps/our-app/config/logrotate.conf --state ~/logrotate-status
Výše uvedené spustí příkaz logrotate každou 3. minutu každou hodinu. Používáme úplnou cestu /usr/sbin/logrotate
takže se nám nezobrazuje chyba Příkaz nenalezen.
Uložte soubor a ukončete. Tím se nainstaluje crontab a naše úloha poběží podle zadaného plánu.
Závěr
V této příručce jsme se podívali na logrotate. Podařilo se nám ověřit jeho verzi, zkontrolovat výchozí konfiguraci a nastavit vlastní vlastní nastavení. Chcete-li se dozvědět více o příkazovém řádku a možnostech konfigurace dostupných pro Logrotate, můžete si přečíst jeho manuálovou stránku spuštěním man logrotate
ve vašem terminálu:
man logrotate