GNU/Linux >> Znalost Linux >  >> Ubuntu

Jak nastavit rotaci protokolu pomocí Logrotate na Ubuntu 18.04/20.04

Soubory protokolu jsou určeny k uchování informací o aktivitách systému po přiměřenou dobu, ale démoni protokolování systému neposkytují žádné prostředky pro řízení velikosti souborů protokolu. Pokud ponecháte nezaškrtnuté, soubory protokolu se mohou zvětšit, aby spotřebovaly veškerý dostupný prostor na oddílu, na kterém jsou umístěny. Chcete-li zabránit tomu, aby soubory protokolu zcela zaplnily váš systém, lze zprávy protokolu střídat, což znamená, že po dosažení určité prahové hodnoty se starý soubor protokolu zavře a otevře se nový soubor protokolu.

Zde vám ukážu, jak otočit soubory protokolu pomocí logrotate na Ubuntu 18.04/20.04.

Co je rotace protokolu?

Rotace protokolu je proces, který řeší tyto problémy pravidelnou archivací aktuálního souboru protokolu a spuštěním nového. Přejmenuje a volitelně zkomprimuje aktuální soubory protokolu, odstraní staré soubory protokolu a přinutí systém protokolování, aby začal používat nové soubory protokolu. Obvykle běží automaticky přes cron užitečnost. Pomocí rotace logu můžete

  • spusťte nový soubor protokolu podle plánu, například denně, týdně nebo měsíčně
  • komprimujte staré soubory protokolu, abyste ušetřili místo na disku
  • ořízněte staré archivy, abyste si ponechali pouze určitý počet starých protokolů.
  • přejmenujte staré soubory protokolů razítkem data, abyste věděli, kde hledat starší protokoly.
  • spouštět příkazy před nebo po otočení sady protokolů.

Rotaci protokolu můžete vidět jako proces, který přejmenuje aktuální soubor protokolu a nastaví nový soubor protokolu pro nové položky protokolu. Když se soubor protokolu otočí, starý soubor protokolu se obvykle zkopíruje do souboru, který obsahuje datum rotace.

1) Konfigurační soubory logrotate

Na Ubuntu 18.04 jsou konfigurační soubory logrotate /etc/logrotate.conf , spolu se všemi soubory v /etc/logrotate.d Hlavní logrotate.conf soubor určuje všechna výchozí nastavení a systémové soubory, které se mají otočit. Soubor obsahuje některé možnosti, které jsou dobře vysvětleny v komentářích.

cat /etc/logrotate.conf 
# see "man logrotate" for details
# rotate log files weekly
weekly

# use the syslog group by default, since this is the owning group
# of /var/log/syslog.
su root syslog

# keep 4 weeks worth of backlogs
rotate 4

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress

# packages drop log rotation information into this directory
include /etc/logrotate.d

# no packages own wtmp, or btmp -- we'll rotate them here
/var/log/wtmp {
    missingok
    monthly
    create 0664 root utmp
    rotate 1
}

/var/log/btmp {
    missingok
    monthly
    create 0660 root utmp
    rotate 1
}

# system-specific logs may be configured here

Hlavní možnosti logrotovat jsou:

  • týdně: otočí soubory protokolu jednou týdně
  • su root syslog: archivuje protokoly pomocí konkrétního uživatele (root) a skupina (syslog) abyste předešli problémům s oprávněními
  • otočit 4: zajišťuje, že jsou uloženy čtyři staré verze souboru. Před odstraněním daný protokol čtyřikrát otočí, takže čtyři týdny protokolů zůstanou online.
  • vytvořit: Starý soubor se uloží pod novým názvem a vytvoří se nový soubor
  • komprimovat: komprimovat způsobí, že logrotate komprimuje soubory protokolu, aby se ušetřilo místo. To se standardně provádí pomocí gzip, ale můžete zadat jiný program
  • zahrnout: Tato důležitá volba zajišťuje, že obsah adresáře /etc/logrotate.d je zahrnuto. V tomto adresáři existují soubory, které určují, jak zacházet s některými jednotlivými soubory protokolu.

Každý soubor v /etc/logrotate.d se používá k přidání dalších nastavení nebo přepsání výchozího nastavení pro konkrétní soubory. Složka také obsahuje konfiguraci logrotate všech nainstalovaných balíčků, které vyžadují rotaci log

# ls -l /etc/logrotate.d
total 40
-rw-r--r-- 1 root root 120 Nov 2 2017 alternatives
-rw-r--r-- 1 root root 442 Oct 23 2017 apache2
-rw-r--r-- 1 root root 126 Nov 20 16:39 apport
-rw-r--r-- 1 root root 173 Apr 20 10:08 apt
-rw-r--r-- 1 root root 112 Nov 2 2017 dpkg
-rw-r--r-- 1 root root 146 Apr 17 17:35 lxd
-rw-r--r-- 1 root root 845 Jan 12 10:57 mysql-server
-rw-r--r-- 1 root root 501 Jan 14 16:19 rsyslog
-rw-r--r-- 1 root root 178 Aug 15 2017 ufw
-rw-r--r-- 1 root root 235 Apr 17 14:53 unattended-upgrades

Můžete vidět například konfiguraci logrotate pro webový server apache

# cat /etc/logrotate.d/apache2 
/var/log/apache2/*.log {
	daily
	missingok
	rotate 14
	compress
	delaycompress
	notifempty
	create 640 root adm
	sharedscripts
	postrotate
                if invoke-rc.d apache2 status > /dev/null 2>&1; then \
                    invoke-rc.d apache2 reload > /dev/null 2>&1; \
                fi;
	endscript
	prerotate
		if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
			run-parts /etc/logrotate.d/httpd-prerotate; \
		fi; \
	endscript
}

Logrotate obsahuje některé doplňkové možnosti, které můžete vidět výše:

  • denně: rotuje protokol podle základního dne
  • chybějící: Pokud protokol chybí, nevyvolávat chybu
  • delaycompress: Nekomprimujte soubor, dokud již nebyl otočen. To má zabránit poškození, pokud démon okamžitě nezavře soubor protokolu.
  • notifyempty: Neotáčejte soubor protokolu, když je prázdný
  • vytvořit 640 root adm: tím se vytvoří nové soubory protokolu s nastavenými oprávněními, vlastníkem a skupinou
  • sdílené skripty: Pokud zástupný znak odpovídá několika souborům, spusťte všechny skripty jednou pro všechny soubory
  • postrotate/endscript: Určuje některé příkazy nebo skripty, které by měly být provedeny až do endscript klíčové slovo po otočení protokolů.
  • prerotate/endscript: jako postrotate/endscript , určuje příkazy nebo skripty, které by měly být provedeny před začátkem rotace protokolu.

Některé informace o dalších možnostech můžete získat pomocí manuálu

man logrotate

2) Nakonfigurujte rotaci logu pomocí logrotate

Příkaz logrotate obvykle cyklicky přejmenovává (nebo otáčí) soubory protokolu; soubor protokolu bude přejmenován tak, aby obsahoval číselnou příponu nebo příponu data, a bude vytvořen nový soubor protokolu, který bude přijímat systémové informace. Pokud je logrotate nakonfigurováno tak, aby uchovávalo pouze dvě kopie starých souborů protokolu, pak po dvou rotacích protokolu bude nejstarší soubor protokolu automaticky odstraněn.

Normálně je příkaz logrotate nainstalován ve výchozím nastavení na vašem Ubuntu 18.04 a verzi si můžete zkontrolovat níže

# logrotate --version
logrotate 3.11.0

Ve výchozím nastavení se logrotate spouští denně spuštěním shellového skriptu /etc/cron.daily/logrotate Uvidíte, že ostatní soubory cron neobsahují žádný soubor logrotate

cat /etc/cron.daily/logrotate 
#!/bin/sh

# Clean non existent log file entries from status file
cd /var/lib/logrotate
test -e status || touch status
head -1 status > status.clean
sed 's/"//g' status | while read logfile date
do
    [ -e "$logfile" ] && echo "\"$logfile\" $date"
done >> status.clean
mv status.clean status

test -x /usr/sbin/logrotate || exit 0
/usr/sbin/logrotate /etc/logrotate.conf

Můžete vidět, co by udělala konfigurace logrotate aplikace, pokud by byla spuštěna pomocí -d parametr příkazu

# logrotate -d /etc/logrotate.d/mysql-server 
reading config file /etc/logrotate.d/mysql-server
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /var/log/mysql.log /var/log/mysql/*log  after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/mysql.log
error: skipping "/var/log/mysql.log" because parent directory has insecure permissions (It's world writable or writable by group which is not "root") Set "su" directive in config file to tell logrotate which user/group should be used for rotation.
Creating new state
considering log /var/log/mysql/error.log
Creating new state
  Now: 2018-05-22 06:02
  Last rotated at 2018-05-22 06:00
  log does not need rotating (log has been already rotated)

Rotaci protokolů můžete nakonfigurovat jako uživatel root a jako uživatel bez tohoto oprávnění.

a) Nastavte logrotation pro nainstalované serverové balíčky

Konfigurační soubory Logrotate jako uživatel root se vytvářejí v /etc/logrotate.d složku na denní bázi. Například nakonfigurujeme rotaci protokolu pro supervizora monitorovacího nástroje. Nejprve vytvoříme soubor rotace protokolů, ve kterém označíme konfigurační soubor, který bude protokoly ukládat

# vim /etc/logrotate.d/supervisor
/var/log/supervisor/superviz.log {
        daily
        create 0640 root root
        missingok
        dateext
        rotate 3
        size=1M
        notifempty
        sharedscripts
        mail [email protected]
}

Pojďme si vysvětlit některé možnosti:

  • dateext: používá datum jako příponu pro staré verze souborů protokolu
  • velikost: zaznamenává soubory, které jsou větší než zde uvedená velikost
  • e-mail: instruovat logrotate, aby jeho obsah zaslal e-mailem na zadanou adresu, než jej přepíše. Musíte mít funkční poštovní server

Nyní můžeme otestovat konfiguraci voláním logrotate v režimu ladění, který ukazuje na hlavní konfiguraci obsahující naši složku. Příkaz zobrazí nějaké informace, ale my seřadíme pouze ty o naší konfiguraci

# logrotate /etc/logrotate.conf --debug
reading config file /etc/logrotate.conf
including /etc/logrotate.d
reading config file alternatives
reading config file apache2
reading config file apport
reading config file apt
reading config file dpkg
reading config file lxd
reading config file mysql-server
reading config file rsyslog
reading config file supervisor
reading config file ufw
reading config file unattended-upgrades
Reading state from file: /var/lib/logrotate/status
...
...
rotating pattern: /var/log/supervisor/supervisord.log  1048576 bytes (3 rotations)
empty log files are not rotated, old logs mailed to [email protected]
switching euid to 0 and egid to 106
considering log /var/log/supervisor/supervisord.log
Creating new state
  Now: 2018-05-22 08:16
  Last rotated at 2018-05-22 08:00
  log does not need rotating (log size is below the 'size' threshold)
switching euid to 0 and egid to 0
....
....

Můžete vidět, že naše konfigurace zatím nepotřebuje rotaci. Je to proto, že velikost stavu není dosud ověřena. Jakmile tento příkaz proběhne bez jakýchkoli chyb, znamená to, že konfigurace vypadá dobře.

b) Nastavte rotaci protokolu pro vlastní aplikaci

Můžete nakonfigurovat rotaci protokolů pro vlastní aplikace, které generují protokoly a běží jako uživatel bez oprávnění root. Ve výchozím nastavení logrotate běží denně, takže pokud potřebujeme spouštět naši aplikaci každou hodinu, vytvoříme konfiguraci logrotate mimo výchozí složku.

Vezměme si příklad nakonfigurováním rotace protokolu pro nesoulad. Vytvoříme osobní složku, která bude obsahovat hlavní konfigurační soubor logrotate a složku pro soubory protokolu. Tato aplikace nerozumí rotaci protokolu, takže logrotate to zvládne pomocí implementace kopírování a ořezávání

$ vim apps/logrotate.conf
/home/alain/apps/logs/discord.log {
        hourly
        copytruncate
        missingok
        dateext
        rotate 10
        compress
}

Použili jsme nové možnosti copytruncate který zkrátí starý soubor protokolu na místě po vytvoření kopie, namísto přesunutí starého souboru a vytvoření nového. To je užitečné pro služby, kterým nelze říci, aby zavřely své soubory protokolu.

Můžeme otestovat naši konfiguraci, ale musíme zadat soubor stavu. Tento soubor zaznamenává, co logrotate viděl a udělal při posledním spuštění, aby věděl, co má dělat při příštím spuštění. Všimněte si, že příkaz spouštíme jako uživatel bez oprávnění root

$ logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs are removed
considering log /home/alain/apps/logs/discord.log
Creating new state
  Now: 2018-05-22 10:09
  Last rotated at 2018-05-22 10:00
  log does not need rotating (log has been already rotated)

Pokud stejný příkaz zkusíte po několika hodinách, můžete ve výstupu vidět nějaké další informace, jako jsou informace o zkrácení a kompresi

logrotate /home/alain/apps/logrotate.conf --state /home/alain/apps/logrotate-state --verbose
reading config file /home/alain/apps/logrotate.conf
Reading state from file: /home/alain/apps/logrotate-state
Allocating hash table for state file, size 64 entries
Creating new state

Handling 1 logs

rotating pattern: /home/alain/apps/logs/discord.log  hourly (10 rotations)
empty log files are rotated, old logs mailed to [email protected]
considering log /home/alain/apps/logs/discord.log
  Now: 2018-05-22 22:52
  Last rotated at 2018-05-22 10:23
  log needs rotating
rotating log /home/alain/apps/logs/discord.log, log->rotateCount is 10
dateext suffix '-2018052222'
glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]'
copying /home/alain/apps/logs/discord.log to /home/alain/apps/logs/discord.log-2018052222
truncating /home/alain/apps/logs/discord.log
compressing log with: /bin/gzip

Musíte zachovat, že konfigurace logrotate je definována souborem glob, který odpovídá souborům protokolu, následovaným řadou instrukcí uzavřených ve složených závorkách. Pokud volba není specifikována ve stanze připojené ke jménu souboru protokolu, volba nejvyšší úrovně z /etc/logrotate.conf má přednost. Soubory protokolu, které byly otočeny, se nikde neukládají; jsou prostě pryč, takže byste měli přemýšlet o přijetí opatření.

Přečtěte si také:

  • Jak zkontrolovat protokoly Cron na Ubuntu 18.04
  • lnav – nástroj pro zobrazení a analýzu souborů protokolu z terminálu Linux
  • Jak používat příkaz Systemd journalctl ke správě protokolů

Ubuntu
  1. Jak nastavit FTP server s VSFTPD na Ubuntu 20.04

  2. Jak nastavit FTP server s VSFTPD na Ubuntu 18.04

  3. Jak nastavit IP Failover s KeepAlived na Ubuntu a Debianu

  1. Jak nastavit cluster Apache Tomcat se 3 uzly na Ubuntu

  2. Jak nastavit GlassFish 4.1 s JAVA 8 v Ubuntu 15.04

  3. Jak těžit Ethereum na Ubuntu 16.04/20.04

  1. Jak nastavit rotaci protokolu pomocí Logrotate na Ubuntu 18.04/20.04

  2. Jak nainstalovat Dropbox na Ubuntu 18.04/20.04 (Terminál/GUI)

  3. Jak nakonfigurovat bloky serveru Nginx na Ubuntu 18.04/20.04