Tips en Trucs 2021

Logboeken

Logbestanden op Linux systemen bevatten een massa informatie - meer dan je ooit zult kunnen bekijken. Een paar tips om de logboeken te raadplegen, zonder kopje onder te gaan.

Logbestanden op Linux systemen roteren meestal automatisch. Het systeem bewaard dus niet alle logbestanden, maar slechts een aantal, waardoor het gebruik van schijfruimte door logboeken beperkt blijft. We bekijken hoe logbestanden roteren en enkele relevante log bestanden.

Log rotatie

Logbestanden roteren regelmatig. Daarbij krijgt het huidige logbestand een andere naam en wordt een nieuw logbestand aangemaakt. We geven als voorbeeld het messages logbestand (op sommige systemen syslog). Logbestanden worden opgeslagen in de map /var/log. We openen deze map met de opdracht:

dany@pindabook:~> cd /var/log/
dany@pindabook:/var/log>

En vragen een overzicht van alle messages logbestanden op met:

dany@pindabook:/var/log> sudo ls -l messages*
[sudo] wachtwoord voor root: 
-rw-r----- 1 root root 671179 22 jan 15:36 messages
-rw-r----- 1 root root 278528  1 aug 09:40 messages-20200801.xz
-rw-r----- 1 root root 261448 17 aug 18:36 messages-20200817.xz
-rw-r----- 1 root root 302164 29 aug 17:43 messages-20200829.xz
-rw-r----- 1 root root 310012 12 sep 17:40 messages-20200912.xz
-rw-r----- 1 root root 241448 19 sep 10:50 messages-20200919.xz
-rw-r----- 1 root root 300876  3 okt 13:57 messages-20201003.xz
-rw-r----- 1 root root 266176 13 okt 09:27 messages-20201013.xz
-rw-r----- 1 root root 268620 25 okt 11:05 messages-20201025.xz
-rw-r----- 1 root root 279004 14 nov 10:55 messages-20201114.xz
-rw-r----- 1 root root 254772 29 nov 10:51 messages-20201129.xz
-rw-r----- 1 root root 265528 12 dec 14:34 messages-20201212.xz
-rw-r----- 1 root root 283220 27 dec 15:15 messages-20201227.xz
-rw-r----- 1 root root 331460 16 jan 17:52 messages-20210116.xz

Je merkt dat er regelmatig oude logbestanden worden gearchiveerd. Zeer oude logbestandarchieven worden daarbij gewist. Je merkt dat bij het archiveren van de logbestanden de naam ervan wordt aangevuld met een datum en gecomprimeerd word (.xz extensie). De compressie zorgt voor een enorme schijfruimtebesparing:

dany@pindabook:/var/log> sudo unxz -l messages-20200801.xz
Strms  Blocks   Compressed Uncompressed  Ratio  Check   Filename
    1       1    272,0 KiB   4483,6 KiB  0,061  CRC64   messages-20200801.xz

Gearchiveerde log bestanden kan je bekijken met:

dany@pindabook:/var/log> sudo unxz --stdout messages-20200801.xz
...
2020-08-01T09:40:01.760818+02:00 pindabook display-manager[1745]: /etc/vconsole.conf available
2020-08-01T09:40:01.761274+02:00 pindabook display-manager[1745]: KEYMAP: be-latin1
2020-08-01T09:40:01.761589+02:00 pindabook display-manager[1745]: Command: localectl set-keymap be-latin1
2020-08-01T09:40:01.788733+02:00 pindabook display-manager[1745]: I: Using systemd /usr/share/systemd/kbd-model-map mapping
2020-08-01T09:40:01.806403+02:00 pindabook dbus-daemon[1143]: [system] Activating via systemd: service name='org.freedesktop.locale1' unit='dbus-org.freedesktop.locale1.service' requested by ':1.12' (uid=0 pid=1779 comm="localectl set-keymap be-latin1 ")
2020-08-01T09:40:02.044659+02:00 pindabook systemd[1]: Reloading System Logging Service.
2020-08-01T09:40:02.047742+02:00 pindabook systemd[1]: Starting Locale Service...

Of doorsturen naar een andere opdracht om de informatie te verwerken, te filteren, te analyseren, enz. Om de laatste tien regels in een gearchiveerd logboek te bekijken, gebruik je:

dany@pindabook:/var/log> sudo unxz --stdout messages-20200801.xz | tail
[sudo] wachtwoord voor root: 
2020-08-01T09:40:01.725959+02:00 pindabook systemd[1]: Starting Postfix Mail Transport Agent...
2020-08-01T09:40:01.727605+02:00 pindabook systemd[1]: Starting X Display Manager...
2020-08-01T09:40:01.728338+02:00 pindabook echo[1743]: Starting mail service (Postfix)
2020-08-01T09:40:01.760818+02:00 pindabook display-manager[1745]: /etc/vconsole.conf available
2020-08-01T09:40:01.761274+02:00 pindabook display-manager[1745]: KEYMAP: be-latin1
2020-08-01T09:40:01.761589+02:00 pindabook display-manager[1745]: Command: localectl set-keymap be-latin1
2020-08-01T09:40:01.788733+02:00 pindabook display-manager[1745]: I: Using systemd /usr/share/systemd/kbd-model-map mapping
2020-08-01T09:40:01.806403+02:00 pindabook dbus-daemon[1143]: [system] Activating via systemd: service name='org.freedesktop.locale1' unit='dbus-org.freedesktop.locale1.service' requested by ':1.12' (uid=0 pid=1779 comm="localectl set-keymap be-latin1 ")
2020-08-01T09:40:02.044659+02:00 pindabook systemd[1]: Reloading System Logging Service.
2020-08-01T09:40:02.047742+02:00 pindabook systemd[1]: Starting Locale Service...

Een ander voorbeeld: het logboek van zypper waarmee software wordt geïnstalleerd, verwijderd en bijgewerkt:

dany@pindabook:/var/log> sudo ls -l zypper.log*
-rw-r----- 1 root root 1977683 15 jan 13:36 zypper.log
-rw-r----- 1 root root  350080 13 nov 16:36 zypper.log-20201114.xz

Log bestanden kunnen roteren op basis van leeftijd of bestandsgrootte. Verschillende logbestanden kunnen op verschillende manieren geroteerd worden. De rotatie-instellingen kan je terugvinden in de configuratiebestanden /etc/rsyslog.conf, /etc/logrotate.conf en de mappen /etc/rsyslog.d/, /etc/logrotate/. Een paar voorbeelden:

dany@pindabook:/var/log> sudo cat /etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly

# keep 4 weeks worth of backlogs
rotate 4

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

# use date as a suffix of the rotated file
dateext

# uncomment this if you want your log files compressed
compress

# comment these to switch compression to use gzip or another
# compression scheme
compresscmd /usr/bin/xz
uncompresscmd /usr/bin/xzdec

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
dany@pindabook:/var/log> sudo ls -l /etc/logrotate.d/
totaal 72
-rw-r--r-- 1 root root  695 17 nov 23:48 apache2
-rw-r--r-- 1 root root  181 23 okt 06:29 chrony
-rw-r--r-- 1 root root   92 24 nov 23:36 dracut
-rw-r--r-- 1 root root  172 14 jan 23:42 iscsiuio
-rw-r--r-- 1 root root 1134  2 dec 14:57 mariadb
-rw-r--r-- 1 root root  267 16 mei  2020 mcelog
-rw-r--r-- 1 root root  345 16 mei  2020 net-snmp
-rw-r--r-- 1 root root  164 26 aug 22:47 pbl
-rw-r--r-- 1 root root  141 16 mei  2020 rsync
-rw-r--r-- 1 root root  289 29 okt 23:59 samba
-rw-r--r-- 1 root root  134 16 mei  2020 snapper
-rw-r--r-- 1 root root  989 16 mei  2020 syslog
-rw-r--r-- 1 root root  148 23 nov 23:38 wpa_supplicant
-rw-r--r-- 1 root root  147 16 mei  2020 wtmp
-rw-r--r-- 1 root root  140  4 mrt  2014 xdm
-rw-r--r-- 1 root root  134  1 okt  2018 zypper.lr
-rw-r--r-- 1 root root  137  1 okt  2018 zypp-history.lr
-rw-r--r-- 1 root root  139  1 okt  2018 zypp-refresh.lr

Logbestanden gebruiken

De eerste stap is waarschijnlijk bepalen welke informatie in welk logbestand is opgeslagen. Logbestanden helemaal van begin tot einde lezen is bijna nooit een goed idee. Bepaalde informatie uit een logbestand filteren om een bepaald probleem op te lossen is de aangewezen methode. Je moet dus enig idee hebben waar wat wordt bewaard. Een paar voorbeelden.

Zo vraag je welke gebruiker, wanneer en vanaf welk systeem heeft aangemeld (:0 is lokaal) (tail -10 zorgt dat je enkel de laatste tien aanmeldingen ziet):

dany@pindabook:/var/log> who wtmp | tail -10
dany     tty7         2021-01-15 13:36 (:0)
dany     pts/0        2021-01-15 13:36 (:0)
dany     pts/1        2021-01-15 13:38 (:0)
dany     tty7         2021-01-16 17:52 (:0)
dany     pts/0        2021-01-16 17:52 (:0)
dany     tty7         2021-01-17 15:20 (:0)
dany     pts/0        2021-01-17 15:20 (:0)
dany     tty7         2021-01-22 15:33 (:0)
dany     pts/0        2021-01-22 15:33 (:0)
dany     pts/1        2021-01-22 15:33 (192.168.1.24)

Wil je dezelfde informatie, maar enkel voor een bepaalde gebruiker (hier: dany):

dany@pindabook:/var/log> who wtmp | grep dany | tail -10
dany     tty7         2021-01-15 13:36 (:0)
dany     pts/0        2021-01-15 13:36 (:0)
dany     pts/1        2021-01-15 13:38 (:0)
dany     tty7         2021-01-16 17:52 (:0)
dany     pts/0        2021-01-16 17:52 (:0)
dany     tty7         2021-01-17 15:20 (:0)
dany     pts/0        2021-01-17 15:20 (:0)
dany     tty7         2021-01-22 15:33 (:0)
dany     pts/0        2021-01-22 15:33 (:0)
dany     pts/1        2021-01-22 15:33 (192.168.1.24)

Om meer informatie (tijdstip, gebruiker, opdracht) op te halen over de laatste 10 uitgevoerde sudo opdrachten:

dany@pindabook:/var/log> sudo grep "sudo:" messages | tail -10
2021-01-22T16:24:52.601759+01:00 pindabook sudo: pam_unix(sudo:session): session opened for user root by dany(uid=1000)
2021-01-22T16:24:52.605056+01:00 pindabook sudo: pam_unix(sudo:session): session closed for user root
2021-01-22T16:39:40.420722+01:00 pindabook sudo:     dany : TTY=pts/1 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/who wtmp
2021-01-22T16:39:40.422743+01:00 pindabook sudo: pam_unix(sudo:session): session opened for user root by dany(uid=1000)
2021-01-22T16:39:40.434677+01:00 pindabook sudo: pam_unix(sudo:session): session closed for user root
2021-01-22T16:42:40.546467+01:00 pindabook sudo:     dany : TTY=pts/1 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/grep sudo: messages
2021-01-22T16:42:40.548338+01:00 pindabook sudo: pam_unix(sudo:session): session opened for user root by dany(uid=1000)
2021-01-22T16:42:40.555471+01:00 pindabook sudo: pam_unix(sudo:session): session closed for user root
2021-01-22T16:42:49.968617+01:00 pindabook sudo:     dany : TTY=pts/1 ; PWD=/var/log ; USER=root ; COMMAND=/usr/bin/grep sudo: messages
2021-01-22T16:42:49.970676+01:00 pindabook sudo: pam_unix(sudo:session): session opened for user root by dany(uid=1000)

Om de laatste 10 kernel boodschappen weer te geven:

dany@main:/var/log> dmesg -T | tail
[vr jan 22 15:48:06 2021] drm_dp_i2c_do_msg: 2 callbacks suppressed
[vr jan 22 15:55:13 2021] userif-3: sent link down event.
[vr jan 22 15:55:13 2021] userif-3: sent link up event.
[vr jan 22 15:56:14 2021] drm_dp_i2c_do_msg: 2 callbacks suppressed
[vr jan 22 16:09:27 2021] drm_dp_i2c_do_msg: 2 callbacks suppressed
[vr jan 22 16:16:34 2021] drm_dp_i2c_do_msg: 2 callbacks suppressed
[vr jan 22 16:21:40 2021] drm_dp_i2c_do_msg: 2 callbacks suppressed
[vr jan 22 16:23:12 2021] userif-3: sent link down event.
[vr jan 22 16:23:12 2021] userif-3: sent link up event.
[vr jan 22 16:40:57 2021] drm_dp_i2c_do_msg: 2 callbacks suppressed

Om de 10 laatste softwareaanpassingen weer te geven:

dany@pindabook:/var/log> sudo cat zypp/history | tail
2021-01-22 15:36:53|patch  |openSUSE-2021-124|1|noarch|http-download.opensuse.org-e13e5001|important|security|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-100|1|noarch|repo-update|moderate|recommended|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-94|1|noarch|repo-update|moderate|recommended|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-89|1|noarch|repo-update|important|security|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-106|1|noarch|repo-update|moderate|security|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-107|1|noarch|repo-update|moderate|security|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-116|1|noarch|repo-update|moderate|recommended|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-115|1|noarch|repo-update|moderate|recommended|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-136|1|noarch|repo-update|moderate|security|needed|applied|
2021-01-22 15:36:53|patch  |openSUSE-2021-124|1|noarch|repo-update|important|security|needed|applied|

Sommige opdrachten halen de informatie uit de logbestanden, zoals de opdracht om een lijst met wanneer het systeem herstartte:

dany@pindabook:~> last reboot
reboot   system boot  5.3.18-lp152.60- Sat Jan 23 14:52   still running
reboot   system boot  5.3.18-lp152.60- Fri Jan 22 15:32 - 16:57  (01:24)
reboot   system boot  5.3.18-lp152.60- Sun Jan 17 15:20 - 15:45  (00:25)
reboot   system boot  5.3.18-lp152.60- Sat Jan 16 17:51 - 18:11  (00:19)
...
reboot   system boot  5.3.18-lp152.44- Wed Oct 14 20:14 - 20:17  (00:02)

wtmp begins Tue Oct 13 09:27:48 2020
last reboot

Geavanceerde logboek beheerders

Hoewel je scripts kunt schrijven om gemakkelijker interessante informatie in de logbestanden te vinden, kan je ook gebruik maken van zeer gesofistikeerde hulpmiddelen om logbestanden te analyseren. Sommige gebruiken informatie uit verschillende bronnen om een beter beeld te krijgen van wat er op het netwerk gebeurd. Ze kunnen eveneens realtime gegevens weergeven. Voorbeelden daarvan zijn Solarwinds Log & Event Manager en PRTG Network Monitor.

De volgende hulpmiddelen zijn gratis en helpen je bij het analyseren van logbestanden: