GNU/Linux >> Znalost Linux >  >> Linux

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

Protokoly jsou skvělé pro zjištění, co aplikace dělá, nebo pro řešení možných problémů. Téměř každá aplikace, se kterou se zabýváme, generuje protokoly a chceme, aby je generovaly i aplikace, které sami vyvíjíme. Čím podrobnější jsou protokoly, tím více informací máme. Ale ponechány samy sobě, mohou polena narůst do nezvladatelných rozměrů a mohou se zase stát vlastním problémem. Je tedy dobré je nechat ořezané, ponechat si ty, které budeme potřebovat, a zbytek archivovat.

Další zdroje pro Linux

  • Cheat pro příkazy Linuxu
  • Cheat sheet pro pokročilé příkazy systému Linux
  • Bezplatný online kurz:Technický přehled RHEL
  • Síťový cheat pro Linux
  • Cheat sheet SELinux
  • Cheat pro běžné příkazy pro Linux
  • Co jsou kontejnery systému Linux?
  • Naše nejnovější články o Linuxu

Základy

logrotate nástroj je vynikající pro správu protokolů. Může je otáčet, komprimovat, odesílat e-mailem, mazat, archivovat a zakládat nové, když je potřebujete.

Spuštění logrotate je docela jednoduché – stačí spustit logrotate -vs state-file config-file . Ve výše uvedeném příkazu v volba umožňuje podrobný režim, s určuje soubor stavu a konečný config-file zmiňuje konfigurační soubor, kde specifikujete, co potřebujete udělat.

Ruky

Pojďme se podívat na logrotate konfigurace, která v našem systému běží tiše, spravující množství protokolů, které najdeme v /var/log adresář. Podívejte se na aktuální soubory v tomto adresáři. Vidíte hodně *.[number].gz soubory? To je to, co logrotate dělá. Konfigurační soubor naleznete v /etc/logrotate.d/rsyslog . Můj vypadá takto:

/var/log/syslog
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

/var/log/mail.info
/var/log/mail.warn
/var/log/mail.err
/var/log/mail.log
/var/log/daemon.log
/var/log/kern.log
/var/log/auth.log
/var/log/user.log
/var/log/lpr.log
/var/log/cron.log
/var/log/debug
/var/log/messages

{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                reload rsyslog >/dev/null 2>&1 || true
        endscript
}

Soubor začíná definováním pokynů pro otočení /var/log/syslog soubor a pokyny jsou obsaženy v následujících složených závorkách. Zde je jejich význam:

  • rotate 7 :Uchovávejte záznamy z posledních sedmi otočení. Poté je začněte mazat.
  • daily :Denně otáčejte protokolem. Spolu s rotate 7 , znamenalo by to, že protokoly budou uchovávány za posledních sedm dní. Další možnosti jsou weeklymonthlyyearly . Je zde také size parametr, který otočí soubory protokolu, pokud jejich velikost překročí zadaný limit – například size 10ksize 10Msize 10G , atd. Pokud není nic zadáno, protokoly se budou rotovat vždy, když logrotate běží. Můžete dokonce spustit logrotatecron používat v konkrétnějších časových intervalech.
  • missingok :Je v pořádku, pokud soubor protokolu chybí. Nepropadejte panice.
  • notifempty :Neotáčet, pokud je soubor protokolu prázdný.
  • delaycompress :Pokud je komprese zapnutá, zpožďuje kompresi až do další rotace. To umožňuje, aby byl přítomen alespoň jeden otočený, ale nekomprimovaný soubor. Užitečné, pokud chcete, aby včerejší protokoly zůstaly nekomprimované pro odstraňování problémů. Je také užitečné, pokud některý program může stále zapisovat do starého souboru, dokud nebude restartován/znovu načten, jako je Apache.
  • compress :Komprese je zapnutá. Použijte nocompress jej vypnout.
  • postrotate/endscript :Po otočení spusťte skript v této sekci. Užitečné při čištění. K dispozici je také prerotate/endscript pro dělání věcí před začátkem rotace.

Dokážete zjistit, co dělá následující část se všemi soubory uvedenými ve výše uvedené konfiguraci? Jediným dalším parametrem ve druhé části je sharedscripts , který říká logrotate aby se sekce nespouštěla ​​v postrotate/endscript dokud nebude kompletní rotace protokolu. Zabraňuje spuštění skriptu pro každý otočený protokol a spustí se jednou na konci.

Něco nového

Pro řešení přístupu k Nginx a protokolů chyb v mém systému používám následující konfiguraci.

/var/log/nginx/access.log
/var/log/nginx/error.log  {
        size 1
        missingok
        notifempty
        create 544 www-data adm
        rotate 30
        compress
        delaycompress
        dateext
        dateformat -%Y-%m-%d-%s
        sharedscripts
        extension .log
        postrotate
                service nginx reload
        endscript
}

Výše uvedený skript lze spustit pomocí:

logrotate -vs state-file /tmp/logrotate

První spuštění příkazu poskytne tento výstup:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508250'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
glob finding logs to compress failed
glob finding old rotated logs failed
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508250.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

A spustím to podruhé:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508280'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508280.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

A spustím to potřetí:

reading config file /tmp/logrotate
extension is now .log

Handling 1 logs

rotating pattern: /var/log/nginx/access.log
/var/log/nginx/error.log   1 bytes (30 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/nginx/access.log
  log needs rotating
considering log /var/log/nginx/error.log
  log does not need rotating
rotating log /var/log/nginx/access.log, log->rotateCount is 30
Converted ' -%Y-%m-%d-%s' -> '-%Y-%m-%d-%s'
dateext suffix '-2021-08-27-1485508316'
glob pattern '-[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
compressing log with: /bin/gzip
renaming /var/log/nginx/access.log to /var/log/nginx/access-2021-08-27-1485508316.log
creating new /var/log/nginx/access.log mode = 0544 uid = 33 gid = 4
running postrotate script
* Reloading nginx configuration nginx

Obsah souboru stavu vypadá takto:

logrotate state -- version 2
"/var/log/nginx/error.log" 2021-08-27-9:0:0
"/var/log/nginx/access.log" 2021-08-27-9:11:56

Stáhněte si cheat sheet logrotate pro Linux.

Tento článek byl původně publikován na autorově osobním blogu a byl se svolením upraven.


Linux
  1. Sledujte příkazy a úkoly pomocí příkazu watch v systému Linux

  2. Nahraďte chytré uvozovky příkazem sed pro Linux

  3. Najděte soubory a adresáře v Linuxu pomocí příkazu find

  1. Zkontrolujte stav souboru v systému Linux pomocí příkazu stat

  2. Začínáme s příkazem tac systému Linux

  3. Začínáme s linuxovým příkazem cat

  1. Plánování úloh pomocí linuxového příkazu cron

  2. Diagnostikujte problémy s připojením pomocí příkazu Linux ping

  3. Naplánujte si úlohu pomocí příkazu Linux at