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 srotate 7
, znamenalo by to, že protokoly budou uchovávány za posledních sedm dní. Další možnosti jsouweekly
,monthly
,yearly
. Je zde takésize
parametr, který otočí soubory protokolu, pokud jejich velikost překročí zadaný limit – napříkladsize 10k
,size 10M
,size 10G
, atd. Pokud není nic zadáno, protokoly se budou rotovat vždy, kdyžlogrotate
běží. Můžete dokonce spustitlogrotate
vcron
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žijtenocompress
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.