A Linux alapú rendszerek fejlett naplózási lehetőségekkel rendelkeznek. Egy Linux rendszeren mindig érdemes belenézni az ilyen fájlokba, mert azok értelmes és logikus feljegyzéseket tartalmaz a rendszer állapotáról, hibáiról, történéseiről.
Mi a naplózás célja?
Mit lehet naplózni?
Az első naplózó program a sendmail program kiegészítéseként készült. Hamar jött a gondolat, hogy az egész rendszeren lehetne használni. A neve sylsog lett. Kezdetben minden Linux rendszerre ezt került fel. A syslog hibáinak kiküszöbölésére jött létre a syslog-ng, amit gyorsabbnak és hatékonyabbnak tartanak. A Debian GNU/Linux rendszereken manapság az rsyslog terjedt el, amely kompatibilis a syslog rendszerrel.
Naplózó démonok:
A fent felsorolt démonok mind csomagnevek is a Debian alapú rendszerekben.
Esetleg külső forrásból:
http://metalog.sourceforge.net/
A Debian GNU/Linux rendszerek alapértelmezett naplózó rendszere (2016) a rsyslog.
A programozók rendelkezésre áll egy syslog() nevű függvény, amelyet beépíthetnek a programjukba. A rendszergazdán múlik, hogy a fenti programok közül melyik naplózó rendszer fogadja a naplózásra küldött adatokat.
Naplóba írhatunk:
logger szöveg
A logger /var/log/syslog-ot írja.
Napló elemző:
logcheck
A /var/log/ könyvtár tartalma alapesetben:
# last -f /var/log/btmp root tty3 Sat Oct 29 21:48 still logged in janos :0 :0 Tue Oct 25 17:19 gone - no logout janos :0 :0 Wed Oct 19 18:55 - 17:19 (5+22:23) janos :0 :0 Mon Oct 17 21:25 - 18:55 (1+21:30) janos :0 :0 Sun Oct 9 21:12 - 21:25 (8+00:13) janos :0 :0 Sat Oct 8 11:10 - 21:12 (1+10:01) janos :0 :0 Tue Oct 4 19:58 - 11:10 (3+15:12) janos :0 :0 Mon Oct 3 23:35 - 19:58 (20:23) btmp begins Mon Oct 3 23:35:15 2016
Egyéb:
Az egyes programok általában saját könyvtárat hoznak létre a naplóállományaik számára.
Az üzenetek prioritása:
A tail paranccsal real-time-ban figyelhetjük a naplókat:
tail -f /var/log/syslog
MATE grafikus felületen a mate-system-log programmal tekinthetjük meg a naplófájlokat. A /var/log könyvtár az adm csoportba van. Tegyük a felhasználót ebbe a csoportba.
A mutlitail használata:
multitail -i /var/log/syslog -i /var/log/auth.log
# nano /etc/rsyslog.conf # ls /etc/rsyslog.d/
Naplózás a 12 teletype-ra:
Szerkesszük az rsyslog.conf fájlt:
mcedit /etc/rsyslog.conf
De készíthetünk egy külön fájlt is:
mcedit /etc/rsyslog.d/50-default.conf
Az rsyslog.conf végére vagy a 50-default.conf fájlba írjuk:
*.*/dev/tty12
Indítsuk újra rsyslog szervert:
/etc/init.d/rsyslog restart
Naplózás más számítógépre:
mcedit /etc/rsyslog.d/50-default.conf
Írjuk bele:
*.* @gépnév
A naplófájlok egy idő után túl nagyok lennének, ha nem lennének időnként letörölve. A naplófájlok rotációban, átnevezésre, majd később tömörítésre kerülnek. Egy idő után pedig törlésre kerülnek.
Ezt a feladatot látja el a logrotate program.
A logrotate program fő beállításai a következő helyen találhatók:
/etc/logrotate.conf
A logrotate beállításai a következő könyvtárban lehet:
/etc/logrotate.d/
A könyvtárban minden program számára készíthetünk egy állományt, amelyben leírjuk a rotációt.
A felhasználók a logger paranccsal képesek a syslog fájlba naplózni. Például:
logger üzenet
Bármelyik felhasználó írhat /var/log/syslog fájlba:
logger "Működik a naplózás"
Ezt megteheti név nélkül is, konzolra írással együtt:
logger -p 0 -t kernel "Működik a naplózás"
groupadd log chmod 660 /dev/log chown root.log /dev/log
Ezek után csak azok írhatnak a naplóba, akik bele kerültek a log csoportba.
A beállítások elvégezhetők a /etc/rsyslog.conf állományban vagy a tetszőleges névvel, .conf kiterjesztéssel létrehozunk magunak egyet a /etc/rsyslog.d könyvtárban.
Hozzunk létre egy logserver.conf állományt:
nano /etc/rsyslog.d/logserver.conf
Tartalma a következő legyen:
$ModLoad imtcp $InputTCPServerRun 514 $AllowedSender TCP, 127.0.0.1, 192.168.5.0/24, gepnev1, gepnev2.domain $template LogFiles,"/var/log/%HOSTNAME%/%PROGRAMNAME%.log" *.* ?LogFiles
A beállítás után indítsuk újra a rsyslog szervert:
systemctl restart rsyslog
A %HOSTNAME% helyet IP cím is lehet a könyvtárnév:
$template LogFiles,"/var/log/%fromhost-ip%/%PROGRAMNAME%.log"
Ha megadunk egy gépnevet az $AllowedSender sorban, annak feloldhatónak kell lennie IP címre. Ha DNS szerveren keresztül nem érhető el, akkor állítsuk be az /etc/hosts fájlban.
A beállítások elvégezhetők a /etc/rsyslog.conf állományban vagy a tetszőleges névvel, .conf kiterjesztéssel létrehozunk magunak egyet a /etc/rsyslog.d könyvtárban.
Hozzunk létre egy logserver.conf állományt:
nano /etc/rsyslog.d/logserver.conf
Tartalma a következő legyen:
# Távoli syslog szerver beállítása TCP protokollon *.* @@192.168.5.1:514
Indítsuk újra az rsyslog szervert:
systemctl restart rsyslog
Figyeljünk a kliens gépnevére (hostname)! A szerveroldalon mindig a kliens gépnevével azonos könyvtárba kerülnek a naplóbejegyzések. A kliens gépnevének állítása után a rsyslogot is indítsuk újra:
hostnamectl set-hostname tenger systemctl restart rsyslog
Az 514 port ellenőrzése:
ss -ltn
Bejegyzés küldése:
logger "Működik"
A bejegyzésnek szerepelnie kell a kliens syslog állományában és a szerver root.log állományában.
A journalctl a systemd naplózórendszer kezelője.
A systemd a naplókat a man systemd-journald szerint az alábbi helyeken tárolhatja:
/run/log/journal/machine-id/*.journal /run/log/journal/machine-id/*.journal~ /var/log/journal/machine-id/*.journal /var/log/journal/machine-id/*.journal~
Kérdezzük le, a merevlemezen mennyi helyet foglal a systemd naplója:
journalctl --disk-usage
A kimenet a következőhöz hasonló lehet:
Archived and active journals take up 8.0M in the file system.
A journalctl önmagában kiadva az összes bejegyzést mutatja szűrés nélkül:
journalctl
Egy szolgáltatáshoz tartozó bejegyzések megtekintése:
journalctl _SYSTEMD_UNIT=ssh.service
Másik példa:
journalctl _SYSTEMD_UNIT=avahi-daemon.service
A -u kapcsolóval:
journalctl -u ssh.service
Egy adott program által generált napló:
journalctl /usr/sbin/sshd
PID alapján:
journalctl _PID=7285
Az aktuális rendszerindítási üzeneteket a -b kapcsolóval lehet megtekinteni:
journalctl -b
Ha a tartós tárolás be van állítva, akkor megnézhetjük az aktuális előtti rendszerindítási üzeneteket is:
journalctl -b -1
Kettővel ez előtti:
journalctl -b -2
Rendszerindítási azonosítók listázása:
journalctl --list-boots
Egy órával ez előtt óta:
journalctl --since "1 hour ago"
Két nappal ez előttől:
journalctl --since "2 days ago"
Mettől meddig:
journalctl --since "2018-11-25 20:11:00" --until "2018-11-25 20:35:00"
Adott időpont óta:
journalctl --since "2018-11-25 20:00:00"
Mai napon:
journalctl --since today
Tegnap óta:
journalctl --since yesterday
A naplófájlok alapértelmezetten csak a memóriában tárolódnak:
/run/log/journal/<gép_azonosító>/system.journal
A tartós tárolásról külön gondoskodni kell. Ehhez szerkeszteni kell a journald.conf beállításait:
nano /etc/systemd/journald.conf
A journald.conf fájlban minden beállítás a [Journal] szekcióban található.
Az első tulajdonásg a Storage:
Storage=
Értékei a következő lehetnek:
Az auto beállítás esetén akkor történik tárolás, ha van hely.
Az autóbeállításhoz fájlok, könyvtárak létrehozása:
mkdir -p /var/log/journal systemd-tmpfiles --create --prefix /var/log/journal systemctl restart systemd-journald
journalctl -f
journalctl -u ssh.service -f
Az utolsó 5 sor mutatása:
journalctl -n 5 -u ssh.service
Prioritások:
journalctl -p err
journalctl -p 1..4
journalctl -p emerg..warning
Formázási lehetőségek:
journalctl -b -u ssh.service -o cat
Kernelmag üzenet:
journalctl -k
Boot üzenet:
journalctl -b
Minden üzenet:
journalctl -a
journalctl --rotate
journalclt --no-pager > uzenetek.txt
A napló mérete 1 G lehet:
journalctl --vacuum-size=1G
1 év naplójának megtartása:
journalctl --vacuum-time=1years
Megadható mértékegységek:
Tegyük fel, hogy a sshd démonra vagyunk kíváncsi. Derítsük ki az sshd felhasználó belső azonosítóját:
id sshd
A kimenet ehhez hasonló lehet:
uid=116(sshd) gid=65534(nogroup) csoportok=65534(nogroup)
Ezek után napló megtekintése:
journalctl _UID=116
Naplófájl nézegető.
Telepítés:
apt install lnav
Használatra példa:
lnav
vagy:
lnav /var/log/syslog /var/log/daemon.log
Megnyitunk egy fájl:
less /var/log/auth.log
Ezek után bekapcsoljuk a folyamatos módot:
Shift + F
De indíthatjuk azonnal ebben a módban:
less +F /var/log/auth.log
A tail -f vagy a tailf parancs nagyszerű eszköz egy állomány változásainak folyamatosa figyelésére. A kimenet szűrhető is a grep paranccsal. A következőkben olyan üzeneteket keresünk, ahol janos, mari vagy kati szerepel az üzenetsorban.
tail -f /var/log/auth.log | grep -E '(janos|mari|kati)'
A -v kapcsolóval most megfordítjuk az illeszkedést. Azt adjuk meg, milyen sorokat nem szeretnénk látni:
tail -f /var/log/auth.log | grep -Ev '(janos|mari|kati)'
A grep -E kapcsoló helyett használható a egrep parancs is. A tail -f parancs helyett használható a tailf parancs is.
A Debian 12-ben a syslog helyett systemctl veszi át a szerepet.
A naplófájlok megtekintése:
jornalctl -f
A kernel ring bufferbe a kernel írja az üzeneteit. Magunk is írhatunk ebbe a naplóba a megfelelő eszköz ismeretében.
Írás a dmesg naplóhoz:
echo üzenet > /dev/kmsg