GNU/Linux >> Znalost Linux >  >> Linux

Použití Logrotate v linuxu ke správě souborů protokolu (s příklady)

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 skupina
  • rotate 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 souboru
  • dateex použijte datum jako příponu otočeného souboru
  • compress 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 konfigurace
  • missingok pokud soubor neexistuje, je stále v pořádku a logrotate by nemělo chybovat ani zaznamenávat žádnou chybu
  • notifempty neotáčejte soubor protokolu, pokud je prázdný
  • maxsize pokud velikost přesahuje 30 kB, otočte
  • yearly běžet jednou ročně
  • create 0600 root root vytvořte nový otočený soubor jako root :root s oprávněním 0600

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íc
  • compress 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ími 0640 a zadaný uživatel a skupina centos
  • 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ý v postrotate bez této možnosti by běžel dvakrát
  • postrotate do endscript 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, že postrotate 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žijte lastaction 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 souboru
  • dateext 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

Linux
  1. 10+ Linux VI příkazy s příklady

  2. Jak spravovat soubory protokolu pomocí Logrotate v Linuxu

  3. příkaz chattr v Linuxu s příklady

  1. wc Linux Command s příklady

  2. 10 Quick Linux Tail Command s příklady

  3. Třídit příkaz v Linuxu s příklady

  1. 17 Užitečný příkaz Tar s praktickými příklady v Linuxu

  2. Linux Zip a Unzip Command s příklady

  3. Linux ip příkaz s příklady