108.2 Lecke 2
Tanúsítvány: |
LPIC-1 |
---|---|
Verzió: |
5.0 |
Témakör: |
108 Alapvető rendszerszolgáltatások |
Fejezet: |
108.2 Rendszernaplózás |
Lecke: |
2/2 |
Bevezetés
A systemd
általános elterjedésével minden nagyobb disztribúcióban a naplózó daemon (systemd-journald
) vált a szabványos naplózási szolgáltatássá. Ebben a leckében arról lesz szó, hogyan működik, és arról, hogy hogyan használhatjuk számos dologra: lekérdezhetjük, szűrhetjük az információkat különböző kritériumok szerint, konfigurálhatjuk a tárolását és a méretét, törölhetjük a régi adatokat, lekérdezhetjük az adatait egy mentési rendszerből vagy a fájlrendszer másolatából, és — végül, de nem utolsósorban — megérthetjük az rsyslod
-vel való kölcsönhatását.
A systemd
alapjai
A Fedora rendszerben először bevezetett systemd
fokozatosan felváltotta a SysV Init-et, mint de facto rendszer- és szolgáltatáskezelőt a legtöbb nagyobb Linux disztribúcióban. Erősségei közé tartoznak a következők:
-
Könnyű konfiguráció: unit fájlok a SysV Init scriptekkel szemben.
-
Sokoldalú kezelés: a daemonok és folyamatok mellett eszközöket, socketeket és csatolási pontokat (mount point) is kezel.
-
Visszafelé kompatibilis (backward compatibility) mind a SysV Init, mind az Upstart rendszerrel.
-
Párhuzamos betöltés a rendszerindítás során: a szolgáltatások párhuzamosan töltődnek be, szemben a Sysv Init szekvenciális betöltésével.
-
A journal nevű naplózási szolgáltatást használja, amely a következő előnyökkel jár:
-
Az összes logot egy helyen központosítja.
-
Nem igényel logrotációt.
-
A logok letilthatók, RAM-ba tölthetők vagy állandóvá tehetők.
-
Egységek és célpontok
A systemd
egységekkel (unit) dolgozik. A unit bármilyen erőforrás, amelyet a systemd
kezelni tud (pl. hálózat, bluetooth, stb.). A unitokat — viszont — a unit fájlok szabályozzák. Ezek egyszerű szöveges fájlok, amelyek a /lib/systemd/system
állományban találhatók, és tartalmazzák a konfigurációs beállításokat — szekciók (sections) és direktívák (directives) formájában — egy adott kezelendő erőforráshoz. Számos egységtípus létezik: service
, mount
, automount
, swap
, timer
, device
, socket
, path
, timer
, snapshot
, slice
, scope
és target
. Így minden egységfájl neve a <forrás_név>.<egység_típus>
mintát követi (pl. reboot.service
).
A célpont (target) egy speciális egységtípus, amely hasonlít a SysV Init klasszikus futási szintjeihez (runlevel). Ennek oka, hogy a target unit különböző erőforrásokat egyesít egy adott rendszerállapot reprezentálására (pl. a graphical.target
hasonló a runlevel 5
-hez, stb.). A rendszerben lévő aktuális célpontot a systemctl get-default
paranccsal ellenőrizhetjük:
carol@debian:~$ systemctl get-default graphical.target
Másrészt a célpontok és a futási szintek abban különböznek egymástól, hogy az előbbiek kölcsönösen magukban foglalják egymást, míg az utóbbiak nem. Így egy célpont más célpontokat is előhívhat — ami a runlevelek esetében nem lehetséges.
Note
|
A |
A System Journal: systemd-journald
A systemd-journald
a rendszer szolgáltatása, amely a naplózási információk fogadásáról gondoskodik a különböző forrásokból: kernelüzenetek, egyszerű és strukturált rendszerüzenetek, szolgáltatások standard output és standard error üzenetei és a kernel audit alrendszeréből származó auditrekordok (további részletek a systemd-journald
man oldalán). Feladata egy strukturált és indexált napló (journal) létrehozása és fenntartása.
A konfigurációs fájlja a /etc/systemd/journald.conf
; és — ahogy sok más szolgáltatás esetén — a systemctl
paranccsal indíthatjuk el, indíthatjuk újra, állíthatjuk meg vagy — egyszerűen — ellenőrizhetjük a státuszát:
root@debian:~# systemctl status systemd-journald systemd-journald.service - Journal Service Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled) Active: active (running) since Sat 2019-10-12 13:43:06 CEST; 5min ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 178 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 4915) CGroup: /system.slice/systemd-journald.service └─178 /lib/systemd/systemd-journald (...)
A journal.conf.d/*.conf
típusú konfigurációs fájlok — amelyek tartalmazhatnak csomag-specifikus konfigurációkat — szintén létezhetnek (további információkért lsd. a journald.conf
man oldalát).
Ha engedélyezve van, a napló tárolható tartósan a lemezen vagy volatilis módon egy RAM-alapú fájlrendszerben. A napló nem egyszerű szöveges fájl, hanem bináris, így nem használhatunk szövegelemző eszközöket, mint például a less
vagy a more
a tartalmának olvasására; helyette a journalctl
parancsot kell használni.
A journal tartalmának lekérdezése
A journalctl
az a segédprogram, amellyel a systemd
naplót lekérdezhetjük. Vagy root-nak kell lennünk, vagy a sudo
parancsot kell használnunk a meghívásához. Ha kapcsolók használata nélkül kérdezzük le, akkor a teljes naplót időrendi sorrendben fogja kiírni (a legrégebbi bejegyzésekkel az élen):
root@debian:~# journalctl -- Logs begin at Sat 2019-10-12 13:43:06 CEST, end at Sat 2019-10-12 14:19:46 CEST. -- Oct 12 13:43:06 debian kernel: Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (...) Oct 12 13:43:06 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=b6be6117-5226-4a8a-bade-2db35ccf4cf4 ro qu (...)
Számos kapcsoló segítségével specifikusabbá tehetjük a lekérdezéseket:
-r
-
A journal üzenetei fordított sorrendben kerülnek megjelenítésre:
root@debian:~# journalctl -r -- Logs begin at Sat 2019-10-12 13:43:06 CEST, end at Sat 2019-10-12 14:30:30 CEST. -- Oct 12 14:30:30 debian sudo[1356]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 14:30:30 debian sudo[1356]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -r Oct 12 14:19:53 debian sudo[1348]: pam_unix(sudo:session): session closed for user root (...)
-f
-
Kiírja a legfrissebb naplóüzeneteket, és folyamatosan frissíti az új bejegyzésekkel, amint azok hozzáadásra kerülnek — hasonlóan a
tail -f
-hez:root@debian:~# journalctl -f -- Logs begin at Sat 2019-10-12 13:43:06 CEST. -- (...) Oct 12 14:44:42 debian sudo[1356]: pam_unix(sudo:session): session closed for user root Oct 12 14:44:44 debian sudo[1375]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -f Oct 12 14:44:44 debian sudo[1375]: pam_unix(sudo:session): session opened for user root by carol(uid=0) (...)
-e
-
A napló végére ugrik, így a legfrissebb bejegyzések láthatók a lapozóban:
root@debian:~# journalctl -e (...) Oct 12 14:44:44 debian sudo[1375]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -f Oct 12 14:44:44 debian sudo[1375]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 14:45:57 debian sudo[1375]: pam_unix(sudo:session): session closed for user root Oct 12 14:48:39 debian sudo[1378]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -e Oct 12 14:48:39 debian sudo[1378]: pam_unix(sudo:session): session opened for user root by carol(uid=0)
-n <value>, --lines=<value>
-
A legfrissebb sorok értékét fogja kiírni (ha nincs megadva
<value>
, az alapértelmezett érték 10):root@debian:~# journalctl -n 5 (...) Oct 12 14:44:44 debian sudo[1375]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -f Oct 12 14:44:44 debian sudo[1375]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 14:45:57 debian sudo[1375]: pam_unix(sudo:session): session closed for user root Oct 12 14:48:39 debian sudo[1378]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/journalctl -e Oct 12 14:48:39 debian sudo[1378]: pam_unix(sudo:session): session opened for user root by carol(uid=0)
-k
,--dmesg
-
A
dmesg
parancs használatával egyenértékű:root@debian:~# journalctl -k -- Logs begin at Sat 2019-10-12 13:43:06 CEST, end at Sat 2019-10-12 14:53:20 CEST. -- Oct 12 13:43:06 debian kernel: Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (gcc version 6.3.0 20170516 (Debian 6.3.0-18 Oct 12 13:43:06 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID=b6be6117-5226-4a8a-bade-2db35ccf4cf4 ro qu Oct 12 13:43:06 debian kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' Oct 12 13:43:06 debian kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' (...)
Navigáció és keresés a journalban
A journal kimenetében az alábbi módokon navigálhatunk:
-
A PageUp, PageDown és a kurzorbillentyűk a felfelé, lefelé, balra és jobbra mozgatáshoz.
-
> a kimenet végére való ugrás.
-
< a kimenet elejére való ugrás.
Az aktuális pozíciótól előre és hátrafelé is kereshetünk stringeket:
-
Keresés előre: A / lenyomása után írjuk be a keresni kívánt stringet és nyomjuk meg az Entert.
-
Keresés hátra: A ? lenyomása után írjuk be a keresni kívánt stringet és nyomjuk meg az Entert.
A keresésekben található találatok között a N billentyűkombinációval léphetünk a találat következő előfordulásához, a Shift+N billentyűkombinációval pedig az előzőhöz.
A journal adatainak szűrése
A journal lehetővé teszi a logok szűrését különböző kritériumok alapján:
- Boot number
-
--list-boots
-
Az összes elérhető bootot felsorolja. A kimenet három oszlopból áll; az első a boot számát adja meg (
0
az aktuális bootra utal,-1
az előző,-2
az előzőt megelőző és így tovább); a második oszlop a boot azonosítója; a harmadik az időbélyegeket mutatja:root@debian:~# journalctl --list-boots 0 83df3e8653474ea5aed19b41cdb45b78 Sat 2019-10-12 18:55:41 CEST—Sat 2019-10-12 19:02:24 CEST
-b
,--boot
-
Megjeleníti az aktuális rendszerindítás összes üzenetét. A korábbi rendszerindítások naplóüzeneteinek megtekintéséhez csak adjunk hozzá egy offset paramétert a fentiek szerint! Például, ha az előző indításból származó üzeneteket szeretnénk látni, akkor írjuk be a
journalctl -b -1
paramétert! Ne feledjük azonban, hogy a korábbi logokból származó információk visszaállításához engedélyezni kell a journal állandóságát (persistence — ennek módját a következő szekcióban fogjuk megtanulni):root@debian:~# journalctl -b -1 Specifying boot ID has no effect, no persistent journal was found
- Priority
-
-p
-
Érdekes módon a
p
kapcsolóval súlyosság/prioritás szerint is szűrhetünk:root@debian:~# journalctl -b -0 -p err -- No entries --
A journal tájékoztat minket arról, hogy — eddig — nem érkezett egyetlen
error
(vagy annál magasabb) prioritású üzenet sem az aktuális rendszerindításból. Megjegyzés: a-b -0
elhagyható, ha az aktuális indításról van szó.NoteAz összes
syslog
súlyossági fokozat (más néven prioritás) teljes listáját lsd. az előző leckében.
- Time Interval
-
A
--since
és--until
kapcsolók használatával ajournalctl
csak a meghatározott időn belül naplózott üzeneteket írja ki. A dátum megadásával azYYYY-MM-DD HH:MM:SS
formátumot kell követnie. Ha az időt kihagyjuk, éjfél lesz az alapértelmezés, ha pedig a dátumot, akkor az aktuális nap. Például, ha a 19:00 és 19:01 között naplózott üzeneteket szeretnénk látni, akkor a következőket kell beírnunk:root@debian:~# journalctl --since "19:00:00" --until "19:01:00" -- Logs begin at Sat 2019-10-12 18:55:41 CEST, end at Sat 2019-10-12 20:10:50 CEST. -- Oct 12 19:00:14 debian systemd[1]: Started Run anacron jobs. Oct 12 19:00:14 debian anacron[1057]: Anacron 2.3 started on 2019-10-12 Oct 12 19:00:14 debian anacron[1057]: Normal exit (0 jobs run) Oct 12 19:00:14 debian systemd[1]: anacron.timer: Adding 2min 47.988096s random time.
Használhatunk egy kissé eltérő időmeghatározást is:
"integer time-unit ago"
. Így a két perccel ezelőtt naplózott üzenetek megtekintéséhez asudo journalctl --since "2 minutes ago"
-t kell beírni. A+
és a-
is használható az aktuális időhöz viszonyított időpontok megadására, így a--since "-2 minutes"
és a--since "2 minutes ago"
egyenértékű.A numerikus kifejezések helyett használhatunk néhány kulcsszót is:
yesterday
-
Az aktuális napot megelőző nap éjfélkor.
today
-
Az aktuális nap éjfélkor.
tomorrow
-
Az aktuális napot követő nap éjfélkor.
now
-
Az aktuális idő.
Nézzük meg az összes üzenetet, amik tegnap éjfél és ma 21:00 között keletkeztek:
root@debian:~# journalctl --since "today" --until "21:00:00" -- Logs begin at Sat 2019-10-12 20:45:29 CEST, end at Sat 2019-10-12 21:06:15 CEST. -- Oct 12 20:45:29 debian sudo[1416]: carol : TTY=pts/0 ; PWD=/home/carol ; USER=root ; COMMAND=/bin/systemctl r Oct 12 20:45:29 debian sudo[1416]: pam_unix(sudo:session): session opened for user root by carol(uid=0) Oct 12 20:45:29 debian systemd[1]: Stopped Flush Journal to Persistent Storage. (...)
NoteAz időspecifikáció különböző szintaxisairől többet tudhatunk meg a
systemd.time
man oldalán.
- Program
-
Egy adott futtatható programhoz kapcsolódó journal üzenetek megtekintéséhez a következő szintaxis használható:
journalctl /path/to/executable
:root@debian:~# journalctl /usr/sbin/sshd -- Logs begin at Sat 2019-10-12 20:45:29 CEST, end at Sat 2019-10-12 21:54:49 CEST. -- Oct 12 21:16:28 debian sshd[1569]: Accepted password for carol from 192.168.1.65 port 34050 ssh2 Oct 12 21:16:28 debian sshd[1569]: pam_unix(sshd:session): session opened for user carol by (uid=0) Oct 12 21:16:54 debian sshd[1590]: Accepted password for carol from 192.168.1.65 port 34052 ssh2 Oct 12 21:16:54 debian sshd[1590]: pam_unix(sshd:session): session opened for user carol by (uid=0)
- Unit
-
Ne feledjük, hogy az egység bármely erőforrás, amelyet a
systemd
kezel, és ezek alapján is szűrhetünk.-u
-
Egy adott egységről jelenít meg üzeneteket:
root@debian:~# journalctl -u ssh.service -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 12:22:59 CEST. -- Oct 13 10:51:00 debian systemd[1]: Starting OpenBSD Secure Shell server... Oct 13 10:51:00 debian sshd[409]: Server listening on 0.0.0.0 port 22. Oct 13 10:51:00 debian sshd[409]: Server listening on :: port 22. (...)
NoteAz összes betöltött és aktív egység kiíratásához használjuk a
systemctl list-units
; az összes telepített unit-fájlok kiíratásához pedig asystemctl list-unit-files
parancsot!
- Fields
-
A naplót meghatározott mezők (field) szerint is lehet szűrni az alábbi szintaxisok bármelyikével:
-
<mező-neve>=<érték>
-
_<mező-neve>=<érték>_
-
__<mező-neve>=<érték>
PRIORITY=
-
A nyolc lehetséges
syslog
prioritási érték egyike, decimális stringként formázva:root@debian:~# journalctl PRIORITY=3 -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 14:30:50 CEST. -- Oct 13 10:51:00 debian avahi-daemon[314]: chroot.c: open() failed: No such file or directory
Figyeljük meg, hogy ugyanezt a kimenetet elérhettük volna a fentebb látott
sudo journalctl -p err
paranccsal is! SYSLOG_FACILITY=
-
A lehetséges eszközkódok bármelyike tizedes stringként formázva. Például az összes felhasználói szintű üzenet megtekintéséhez használhatjuk az alábbit:
root@debian:~# journalctl SYSLOG_FACILITY=1 -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 14:42:52 CEST. -- Oct 13 10:50:59 debian mtp-probe[227]: checking bus 1, device 2: "/sys/devices/pci0000:00/0000:00:06.0/usb1/1-1" Oct 13 10:50:59 debian mtp-probe[227]: bus: 1, device: 2 was not an MTP device Oct 13 10:50:59 debian mtp-probe[238]: checking bus 1, device 2: "/sys/devices/pci0000:00/0000:00:06.0/usb1/1-1" Oct 13 10:50:59 debian mtp-probe[238]: bus: 1, device: 2 was not an MTP device
_PID=
-
Egy adott folyamat ID által előállított üzenetek megjelenítése. A
systemd
által előállított összes üzenet megtekintéséhez írjuk be a következőt:root@debian:~# journalctl _PID=1 -- Logs begin at Sun 2019-10-13 10:50:59 CEST, end at Sun 2019-10-13 14:50:15 CEST. -- Oct 13 10:50:59 debian systemd[1]: Mounted Debug File System. Oct 13 10:50:59 debian systemd[1]: Mounted POSIX Message Queue File System. Oct 13 10:50:59 debian systemd[1]: Mounted Huge Pages File System. Oct 13 10:50:59 debian systemd[1]: Started Remount Root and Kernel File Systems. Oct 13 10:50:59 debian systemd[1]: Starting Flush Journal to Persistent Storage... (...)
_BOOT_ID
-
A rendszerindítási azonosító alapján kiválaszthatjuk az adott rendszerindításból származó üzeneteket, például:
sudo journalctl _BOOT_ID=83df3e8653474ea5aed19b41cdb45b78
. _TRANSPORT
-
Egy adott transzportról érkezett üzenetek megjelenítése. A lehetséges értékek a következők:
audit
(kernel audit alrendszer),driver
(belsőleg generált),syslog
(syslog socket),journal
(natív journal protokoll),stdout
(szolgáltatások standard kimenete vagy hibája),kernel
(kernel gyűrűpuffer — ugyanaz, mint admesg
,journalctl -k
vagyjournalctl --dmesg
):root@debian:~# journalctl _TRANSPORT=journal -- Logs begin at Sun 2019-10-13 20:19:58 CEST, end at Sun 2019-10-13 20:46:36 CEST. -- Oct 13 20:19:58 debian systemd[1]: Started Create list of required static device nodes for the current kernel. Oct 13 20:19:58 debian systemd[1]: Starting Create Static Device Nodes in /dev... Oct 13 20:19:58 debian systemd[1]: Started Create Static Device Nodes in /dev. Oct 13 20:19:58 debian systemd[1]: Starting udev Kernel Device Manager... (...)
-
Mezők kombinálása
A mezők nem zárják ki egymást, így egy lekérdezésben több mezőt is használhatunk, azonban csak azok az üzenetek jelennek meg, amelyek mindkét mező értékének egyidejűleg megfelelnek:
root@debian:~# journalctl PRIORITY=3 SYSLOG_FACILITY=0 -- No entries -- root@debian:~# journalctl PRIORITY=4 SYSLOG_FACILITY=0 -- Logs begin at Sun 2019-10-13 20:19:58 CEST, end at Sun 2019-10-13 20:21:55 CEST. -- Oct 13 20:19:58 debian kernel: acpi PNP0A03:00: fail to add MMCONFIG information, can't access extended PCI configuration (...)
Hacsak nem használjuk a +
elválasztójelet két kifejezés összekapcsolására a logikai OR (VAGY) módjára:
root@debian:~# journalctl PRIORITY=3 + SYSLOG_FACILITY=0 -- Logs begin at Sun 2019-10-13 20:19:58 CEST, end at Sun 2019-10-13 20:24:02 CEST. -- Oct 13 20:19:58 debian kernel: Linux version 4.9.0-9-amd64 (debian-kernel@lists.debian.org) (...9 Oct 13 20:19:58 debian kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.0-9-amd64 root=UUID= (...) (...)
Másrészt, két értéket is megadhatunk ugyanarra a mezőre, és akkor az összes olyan bejegyzés megjelenik, amely bármelyik értéknek megfelel:
root@debian:~# journalctl PRIORITY=1 -- Logs begin at Sun 2019-10-13 17:16:24 CEST, end at Sun 2019-10-13 17:30:14 CEST. -- -- No entries -- root@debian:~# journalctl PRIORITY=1 PRIORITY=3 -- Logs begin at Sun 2019-10-13 17:16:24 CEST, end at Sun 2019-10-13 17:32:12 CEST. -- Oct 13 17:16:27 debian connmand[459]: __connman_inet_get_pnp_nameservers: Cannot read /pro Oct 13 17:16:27 debian connmand[459]: The name net.connman.vpn was not provided by any .se
Note
|
A journal mezők az alábbi kategóriák valamelyikébe tartoznak: “User Journal Fields”, “Trusted Journal Fields”, “Kernel Journal Fields”, “Fields on behalf of a different program” és “Address Fields”. A témáról többet — beleértve a mezők teljes listáját — a |
Manuális bejegyzések a system journalban: systemd-cat
Ahogy a logger
parancsot arra használjuk, hogy a parancssorból üzeneteket küldjünk a rendszerlogba (ahogy azt az előző leckében láttuk), a systemd-cat
parancs hasonló — de sokkal szélesebb körű — célt szolgál a rendszer journallal. Lehetővé teszi, hogy szabványos bemeneti (stdin), kimeneti (stdout) és hiba (stderr) üzeneteket küldjünk a journalba.
Ha paraméterek nélkül hívjuk meg, akkor mindent, amit az stdin-ből beolvas, elküld a journalba. Ha végeztünk, nyomjuk meg a Ctrl+C: billentyűkombinációt!
carol@debian:~$ systemd-cat This line goes into the journal. ^C
Ha egy csővezetékezett (piped) parancs kimenete kerül átadásra, akkor ez is elküldésre kerül:
carol@debian:~$ echo "And so does this line." | systemd-cat
Ha egy parancs követi, akkor a parancs kimenete is elküldésre kerül a — a stderr-rel együtt (ha van ilyen):
carol@debian:~$ systemd-cat echo "And so does this line too."
Lehetőség van a prioritási szint megadására is a -p
kapcsolóval:
carol@debian:~$ systemd-cat -p emerg echo "This is not a real emergency."
A többi opcióról a systemd-cat
man oldalán tudhatunk meg többet.
A journal utolsó négy sorának megjelenítése:
carol@debian:~$ journalctl -n 4 (...) -- Logs begin at Sun 2019-10-20 13:43:54 CEST. -- Nov 13 23:14:39 debian cat[1997]: This line goes into the journal. Nov 13 23:19:16 debian cat[2027]: And so does this line. Nov 13 23:23:21 debian echo[2030]: And so does this line too. Nov 13 23:26:48 debian echo[2034]: This is not a real emergency.
Note
|
Az emergency prioritási szintű naplóbejegyzések a legtöbb rendszeren félkövéren és piros színűen jelennek meg. |
Perzisztens journal tárhely
Amint korábban említettük, három lehetőség közül választhatunk a journal helyére vonatkozóan:
-
A naplózás (journaling) teljesen kikapcsolható (az átirányítás más eszközökre, például a konzolra továbbra is lehetséges).
-
Memóriában tartás — ami volatilissé teszi — és törlésük minden újraindításkor. Ebben az esetben a
/run/log/journal
mappa jön létre és az lesz használatban. -
Perzisztenssé tehetjük, hogy a naplók a lemezre kerüljenek. Ebben az esetben a naplóüzenetek a
/var/log/journal
mappába kerülnek.
Az alapértelmezett viselkedés a következő: ha a /var/log/journal/
nem létezik, a naplófájlok a /run/log/journal/
mappába mentődnek, és — ezért — újraindításkor elvesznek. A mappa neve — az /etc/machine-id
— egy newline-terminált, hexadecimális, 32 karakteres, kisbetűs string:
carol@debian:~$ ls /run/log/journal/8821e1fdf176445697223244d1dfbd73/ system.journal
Ha megpróbálunk beleolvasni a less-el, figyelmeztetést kapunk, ezért használjuk helyette a journalctl
parancsot:
root@debian:~# less /run/log/journal/9a32ba45ce44423a97d6397918de1fa5/system.journal "/run/log/journal/9a32ba45ce44423a97d6397918de1fa5/system.journal" may be a binary file. See it anyway? root@debian:~# journalctl -- Logs begin at Sat 2019-10-05 21:26:38 CEST, end at Sat 2019-10-05 21:31:27 CEST. -- (...) Oct 05 21:26:44 debian systemd-journald[1712]: Runtime journal (/run/log/journal/9a32ba45ce44423a97d6397918de1fa5) is 4.9M, max 39.5M, 34.6M free. Oct 05 21:26:44 debian systemd[1]: Started Journal Service. (...)
Ha a /var/log/journal/
létezik, a naplófájlok tartósan ott lesznek tárolva. Ha ez a mappa törlődik, a systemd-journald
nem hozza létre újra, hanem a /run/log/journal
mappába ír. Amint újra létrehozzuk a /var/log/journal/
-t és újraindítjuk a daemont, a perzisztens naplózás újraindul:
root@debian:~# mkdir /var/log/journal/ root@debian:~# systemctl restart systemd-journald root@debian:~# journalctl (...) Oct 05 21:33:49 debian systemd-journald[1712]: Received SIGTERM from PID 1 (systemd). Oct 05 21:33:49 debian systemd[1]: Stopped Journal Service. Oct 05 21:33:49 debian systemd[1]: Starting Journal Service... Oct 05 21:33:49 debian systemd-journald[1768]: Journal started Oct 05 21:33:49 debian systemd-journald[1768]: System journal (/var/log/journal/9a32ba45ce44423a97d6397918de1fa5) is 8.0M, max 1.1G, 1.1G free. Oct 05 21:33:49 debian systemd[1]: Started Journal Service. Oct 05 21:33:49 debian systemd[1]: Starting Flush Journal to Persistent Storage... (...)
Note
|
Alapértelmezés szerint minden bejelentkezett felhasználóhoz külön naplófájlok tartoznak, amelyek a |
Az imént említetteken túlmenően a journal daemon naplótárolási módját a telepítés után a konfigurációs fájl módosításával meg lehet változtatni: /etc/systemd/journald.conf
. A legfontosabb opció a Storage=
, és a következő értékeket veheti fel:
Storage=volatile
-
A naplóadatok kizárólag a memóriában tárolódnak — a
/run/log/journal/
alatt. Ha nincs ilyen mappa, akkor létrejön. Storage=persistent
-
Alapértelmezés szerint a naplóadatok a lemezen tárolódnak — a
/var/log/journal/
alatt — ami visszakerül a memóriába (/run/log/journal/
) a boot korai fázisaiban, és ha a lemez nem írható. Szükség esetén mindkét mappa létrejön. Storage=auto
-
Az
auto
hasonló apersistent
-hez, de a/var/log/journal
mappa nem jön létre, akkor sem, ha szükség van rá. Ez az alapértelmezés. Storage=none
-
Az összes naplóadatot el kell vetni. A továbbítás más célpontokra, például a konzolra, a kernel naplózási pufferébe vagy egy syslog socketre azonban továbbra is lehetséges.
Például, ha a systemd-journald
létrehozza a /var/log/journal/
-t és átáll a perzisztens tárolásra, akkor szerkesszük az /etc/systemd/journald.conf
fájlt és állítsuk be a Storage=persistent
értéket, mentsük el a fájlt és indítsuk újra a daemont a sudo systemctl restart systemd-journald
-al. Hogy megbizonyosodjunk arról, hogy az újraindítás hibátlanul ment, bármikor ellenőrizhetjük a daemon állapotát:
root@debian:~# systemctl status systemd-journald systemd-journald.service - Journal Service Loaded: loaded (/lib/systemd/system/systemd-journald.service; static; vendor preset: enabled) Active: active (running) since Wed 2019-10-09 10:03:40 CEST; 2s ago Docs: man:systemd-journald.service(8) man:journald.conf(5) Main PID: 1872 (systemd-journal) Status: "Processing requests..." Tasks: 1 (limit: 3558) Memory: 1.1M CGroup: /system.slice/systemd-journald.service └─1872 /lib/systemd/systemd-journald Oct 09 10:03:40 debian10 systemd-journald[1872]: Journal started Oct 09 10:03:40 debian10 systemd-journald[1872]: System journal (/var/log/journal/9a32ba45ce44423a97d6397918de1fa5) is 8.0M, max 1.2G, 1.2G free.
Note
|
A |
Régi journal adatok törlése: a journal mérete
A naplók journal fájlokban kerülnek mentésre, amelyek fájlneve .journal
-ra vagy .journal~
-ra végződik , és a megfelelő mappában (/run/log/journal
vagy /var/log/journal
a beállítások szerint) található. Annak ellenőrzéséhez, hogy mennyi lemezterületet foglalnak jelenleg a naplófájlok (mind az archivált, mind az aktív), használjuk a --disk-usage
kapcsolót:
root@debian:~# journalctl --disk-usage Archived and active journals take up 24.0M in the filesystem.
A systemd
naplófájlok alapértelmezés szerint legfeljebb a tároló fájlrendszer méretének 10%-át foglalják el. Például egy 1 GB-os fájlrendszeren nem foglalnak el több, mint 100 MB-ot. Amint ezt a határt elérjük, a régi naplók elkezdenek eltűnni, hogy a határérték közelében maradjunk.
A tárolt naplófájlok méretkorlátozásának beállítása azonban az /etc/systemd/journald.conf
állományban található konfiguráció módosításával kezelhető. Ezek az opciók a használt fájlrendszer típusától függően két kategóriába sorolhatók: állandó (/var/log/journal
) vagy memórián belüli (/run/log/journal
). Az előbbi a System
előtaggal ellátott opciókat használja, és csak akkor érvényes, ha a tartós naplózás megfelelően engedélyezve van, és ha a rendszer teljesen elindult. Az utóbbiban az opciónevek a Runtime
szóval kezdődnek, és a következő esetekben lesznek alkalmazhatók:
SystemMaxUse=
,RuntimeMaxUse=
-
Ezek szabályozzák a journal által elfoglalható lemezterület nagyságát. Alapértelmezés szerint a fájlrendszer méretének 10%-a, de módosítható (pl.
SystemMaxUse=500M
), amíg nem haladja meg a maximális 4GiB-ot. SystemKeepFree=
,RuntimeKeepFree=
-
Ezek szabályozzák a többi felhasználó számára szabadon hagyandó lemezterület mennyiségét. Alapértelmezés szerint a fájlrendszer méretének 15%-a, de módosítható (pl.
SystemKeepFree=500M
), amíg nem haladja meg a maximális 4GiB-ot.Ami a
*MaxUse
és a*KeepFree
elsőbbségét illeti, asystemd-journald
a két érték közül a kisebbet használja. Ne feledjük, hogy csak az archivált (nem pedig az aktív) naplófájlok kerülnek törlésre. SystemMaxFileSize=
,RuntimeMaxFileSize=
-
Ezek szabályozzák az egyes naplófájlok maximális méretét. Az alapértelmezett érték a
*MaxUse
1/8-a. A méretcsökkentés szinkron módon történik, és az értékek megadhatók bájtban vagy aK
,M
,G
,T
,P
,E
használatával, utalva a Kibibyte, Mebibyte, Gibibyte, Tebibyte, Pebibyte and Exbibyte kifejezésekre. SystemMaxFiles=
,RuntimeMaxFiles=
-
Meghatározzák a tárolható egyedi és archivált naplófájlok maximális számát (az aktív naplófájlokat ez nem érinti). Az alapértelmezett érték 100.
A naplóüzenetek méretalapú törlése és rotációja mellett a systemd-journald
a következő két opcióval időalapú kritériumokat is lehetővé tesz: MaxRetentionSec=
és MaxFileSec=
. A journald.conf
man oldalán találhatunk további információkat ezekről és más opciókról.
Note
|
Amikor a |
A journal kiporszívózása
Az archivált naplófájlokat bármikor manuálisan kitakaríthatjuk az alábbi három lehetőség bármelyikével:
--vacuum-time=
-
Ez az időalapú beállítás a megadott időkeretnél régebbi időbélyegzővel rendelkező üzeneteket törli a naplófájlokból. Az értékeket a következő utótagok bármelyikével kell írni:
s
,m
,h
,days
(vagyd
),months
,weeks
(vagyw
) ésyears
(vagyy
). Például az archivált journal fájlokban lévő, 1 hónapnál régebbi üzenetek eltávolításához használhatjuk a következőt:root@debian:~# journalctl --vacuum-time=1months Deleted archived journal /var/log/journal/7203088f20394d9c8b252b64a0171e08/system@27dd08376f71405a91794e632ede97ed-0000000000000001-00059475764d46d6.journal (16.0M). Deleted archived journal /var/log/journal/7203088f20394d9c8b252b64a0171e08/user-1000@e7020d80d3af42f0bc31592b39647e9c-000000000000008e-00059479df9677c8.journal (8.0M).
--vacuum-size=
-
Ez a méretalapú opció addig törli az archivált naplófájlokat, amíg azok a megadott méret alatti értéket nem foglalnak el. Az értékeket a következő utótagok bármelyikével kell jelölni:
K
,M
,G
vagyT
. Példa az archivált naplófájlok törlésére, amíg azok mérete nem csökken 100 Mebibyte alá:root@debian:~# journalctl --vacuum-size=100M Vacuuming done, freed 0B of archived journals from /run/log/journal/9a32ba45ce44423a97d6397918de1fa5.
--vacuum-files=
-
Ez az opció gondoskodik arról, hogy a megadott számnál több archivált naplófájl ne maradjon. Az érték egy egész szám. Példa az archivált naplófájlok számának 10-re való korlátozására:
root@debian:~# journalctl --vacuum-files=10 Vacuuming done, freed 0B of archived journals from /run/log/journal/9a32ba45ce44423a97d6397918de1fa5.
Az úgynevezett porszívózás (vacuuming) csak az archivált journal fájlokat távolítja el. Ha mindentől meg akarunk szabadulni (beleértve az aktív journal fájlokat is), akkor egy olyan jelet (signal) kell használnunk (SIGUSR2
), amely a --rotate
kapcsolóval kéri az azonnali rotálásukat. Más fontos jeleket a következő opciókkal lehet meghívni:
--flush
(SIGUSR1)
-
A journal lehúzását kéri a
/run/'-ből a `/var/'-be, hogy perzisztens legyen. Ehhez az kell, hogy a perzisztens naplózás engedélyezve legyen, és a `/var/
mountolva legyen. --sync
(SIGRTMIN+1
)-
Arra szolgál, hogy az összes meg nem írt naplóadatot a lemezre írja.
Note
|
A naplófájl belső konzisztenciájának ellenőrzéséhez használjuk a |
Journal adatok kinyerése egy rescue rendszerből
Rendszergazdaként előfordulhat, hogy olyan helyzetbe kerülünk, amikor egy meghibásodott gép merevlemezén lévő naplófájlokhoz kell hozzáférnünk egy rescue rendszeren keresztül (egy bootolható CD vagy USB-kulcs, amely egy élő Linux-disztribúciót tartalmaz).
A journalctl
a /var/log/journal/<gép-id>/
mappában keresi a naplófájlokat. Mivel a rescue- és a hibás rendszer gépazonosítója eltérő lesz, a következő kapcsolót kell használnunk:
-D </path/to/dir>
,--directory=</path/to/dir>
-
Ezzel a kapcsolóval megadjuk egy mappa elérési útvonalát, ahol a
journalctl
a naplófájlokat keresi az alapértelmezett futásidejű és a rendszer lokációi helyett.
Ezért szükséges, hogy a hibás rendszer rootfs'-jét (
/dev/sda1`) csatlakoztassuk a rescue rendszer fájlrendszerére, és így olvassuk be a naplófájlokat:
root@debian:~# journalctl -D /media/carol/faulty.system/var/log/journal/ -- Logs begin at Sun 2019-10-20 12:30:45 CEST, end at Sun 2019-10-20 12:32:57 CEST. -- oct 20 12:30:45 suse-server kernel: Linux version 4.12.14-lp151.28.16-default (geeko@buildhost) (...) oct 20 12:30:45 suse-server kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.12.14-lp151.28.16-default root=UUID=7570f67f-4a08-448e-aa09-168769cb9289 splash=> oct 20 12:30:45 suse-server kernel: x86/fpu: Supporting XSAVE feature 0x001: 'x87 floating point registers' oct 20 12:30:45 suse-server kernel: x86/fpu: Supporting XSAVE feature 0x002: 'SSE registers' (...)
Más, ebben a helyzetben hasznos kapcsolók az alábbiak lehetnek:
-m
,--merge
-
Összefűzi az összes elérhető journal bejegyzését a
/var/log/journal
alatt, beleértve a remote naplókat is. --file
-
Megmutatja egy adott fájl bejegyzéseit, például:
journalctl --file /var/log/journal/64319965bda04dfa81d3bc4e7919814a/user-1000.journal
. --root
-
A gyökérmappát jelölő mappa elérési útját adja át argumentumként. A
journalctl
ott fogja keresni a naplófájlokat (pl.journalctl --root /faulty.system/
).
A journalctl
man oldalán több információt is találhatunk.
Naplóadatok továbbítása egy hagyományos syslog
daemonnak
A journal naplóadatai elérhetővé tehetők egy hagyományos syslog
daemon számára a következő módon:
-
Üzenetek továbbítása a
/run/systemd/journal/syslog
socket fájlba, hogy asyslogd
olvashassa. Ez a lehetőség aForwardToSyslog=yes
opcióval engedélyezhető. -
Egy
syslog
daemon, amely úgy viselkedik, mint ajournalctl
, tehát a naplóüzeneteket közvetlenül a journal fájlokból olvassa. Ebben az esetben aStorage
opció a releváns; ennek az értéke bármi lehet, ami nemnone
.
Note
|
Hasonlóképpen, a következő beállításokkal továbbíthatjuk a naplóüzeneteket más célállomásokra: |
Gyakorló feladatok
-
Feltételezve, hogy
root
jogunk van, töltsük ki a táblázatot a megfelelőjournalctl
paranccsal:Cél Parancs Kernel bejegyzések kiíratása
Üzenetek kiíratása a második indítástól a journal elejétől kezdve
Üzenetek kiíratása a második indítástól a journal végétől kezdve
Legutóbbi naplóüzenetek kiíratása és az újak figyelése
Csak az új üzenetek nyomtatása mostantól, és a kimenet folyamatos frissítése
Az előző rendszerindításból származó,
warning
prioritású üzenetek kiíratása fordított sorrendben -
A journal daemon tárolással kapcsolatos viselkedését leginkább a
/etc/systemd/journald.conf
állományban találhatóStorage
opció értéke szabályozza. Jelezzük az alábbi táblázatban, hogy milyen viselkedés milyen értékhez kapcsolódik:Viselkedés Storage=auto
Storage=none
Storage=persistent
Storage=volatile
A naplóadatok törlésre kerülnek, de a továbbítás lehetséges.
A rendszer indítása után a naplóadatok a
/var/log/journal
alatt kerülnek tárolásra. Ha még nem létezik, a mappa létrejön.A rendszer indítása után a naplóadatok a
/var/log/journal
alatt kerülnek tárolásra. A mappa akkor sem jön létre, ha még nem létezik.A naplóadatokat a
/var/run/journal
alatt tárolja, de nem maradnak meg az újraindítások után. -
Mint azt megtanultuk, a naplót idő, méret és a fájlok száma alapján manuálisan is ki lehet takarítani. Végezzük el a következő feladatokat a
journalctl
és a megfelelő kapcsolók segítségével:-
Ellenőrizzük, hogy mennyi lemezterületet foglalnak el a naplófájlok:
-
Csökkentsük az archivált naplófájlok számára fenntartott hely mennyiségét, és állítsuk be 200MiB-ra:
-
Ellenőrizzük a lemezterületet ismét és magyarázzuk meg a részleteket:
-
Gondolkodtató feladatok
-
Milyen beállításokat kell módosítanunk az
/etc/systemd/journald.conf
állományban, hogy az üzeneteket a/dev/tty5
-be továbbítsuk? Milyen értékeket kell adni a kapcsolóknak? -
Adjuk meg a megfelelő
journalctl
szűrőt a következők kiírásához:Cél Szűrő + érték Egy adott felhasználóhoz tartozó üzenetek kiíratása
Egy
debian
nevű host üzeneteinek kiíratásaEgy adott csoporthoz tartozó üzenetek kiíratása
A
root
csoporthoz tartozó üzenetek kiíratásaA futtatható elérési útvonal alapján
sudo
üzenetek kiíratásaA parancs neve alapján
sudo
üzenetek kiíratása -
Prioritás szerinti szűrés esetén a megadottnál magasabb prioritású naplók is szerepelnek a listában; például a
journalctl -p err
az error, critical, alert és emergency üzeneteket fogja kiírni. Ajournalctl
azonban csak egy adott tartományt is megjeleníthet. Milyen parancsot kellene használnunk ahhoz, hogy ajournalctl
csak a warning, error és critical prioritási szintekbe tartozó üzeneteket írja ki? -
A prioritási szintek numerikusan is megadhatók. Írjuk át az előző feladatban szereplő parancsot a prioritási szintek numerikus ábrázolásával:
Összefoglalás
Ebben a leckében megtanultuk:
-
A
systemd
rendszer- és szolgáltatásmenedzser használatának előnyeit. -
A
systemd
egységeinek (unit) és célpontjainak (target) alapjait. -
Honnan kapja a
systemd-journald
a naplózási adatokat. -
A kapcsolókat, amiket átadhatunk a
systemctl
-nek, hogy irányítsa asystemd-journald
-t:start
,status
,restart
ésstop
. -
Hol található a journal konfigurációs fájlja —
/etc/systemd/journald.conf
— és a fő opcióit. -
Hogyan lehet lekérni általánosságban journalt és hogyan lehet konkrét adatokat lekérni szűrők használatával.
-
Hogyan lehet navigálni és keresni a journalban.
-
Hogyan kezeljük a journal fájlok tárolását: memóriában vagy lemezen.
-
A naplózás teljes letiltása.
-
Hogyan ellenőrizhetjük a journal által elfoglalt lemezterületet, hogyan érvényesíthetjük a tárolt naplófájlok méretkorlátozását és hogyan törölhetjük az archivált naplófájlokat manuálisan (vacumming).
-
Hogyan lehet lekérni a naplóadatokat egy rescue rendszerből.
-
Hogyan továbbítsuk a naplóadatokat egy hagyományos
syslog
daemonnak.
A leckében használt parancsok:
systemctl
-
A
systemd
rendszer- és szolgáltatáskezelő vezérlése. journalctl
-
A
systemd
journal lekérdezése. ls
-
Mappa tartalmának listázása.
less
-
Fájl tartalmának megtekintése.
mkdir
-
Mappa létrehozása.
Válaszok a gyakorló feladatokra
-
Feltételezve, hogy
root
jogunk van, töltsük ki a táblázatot a megfelelőjournalctl
paranccsal:Cél Parancs Kernel bejegyzések kiíratása
journalctl -k
vagyjournalctl --dmesg
Üzenetek kiíratása a második indítástól a journal elejétől kezdve
journalctl -b 2
Üzenetek kiíratása a második indítástól a journal végétől kezdve
journalctl -b -2 -r
vagyjournalctl -r -b -2
Legutóbbi naplóüzenetek kiíratása és az újak figyelése
journalctl -f
Csak az új üzenetek nyomtatása mostantól, és a kimenet folyamatos frissítése
journalctl --since "now" -f
Az előző rendszerindításból származó,
warning
prioritású üzenetek kiíratása fordított sorrendbenjournalctl -b -1 -p warning -r
-
A journal daemon tárolással kapcsolatos viselkedését leginkább a
/etc/systemd/journald.conf
állományban találhatóStorage
opció értéke szabályozza. Jelezzük az alábbi táblázatban, hogy milyen viselkedés milyen értékhez kapcsolódik:Viselkedés Storage=auto
Storage=none
Storage=persistent
Storage=volatile
A naplóadatok törlésre kerülnek, de a továbbítás lehetséges.
x
A rendszer indítása után a naplóadatok a
/var/log/journal
alatt kerülnek tárolásra. Ha még nem létezik, a mappa létrejön.x
A rendszer indítása után a naplóadatok a
/var/log/journal
alatt kerülnek tárolásra. A mappa akkor sem jön létre, ha még nem létezik.x
A naplóadatokat a
/var/run/journal
alatt tárolja, de nem maradnak meg az újraindítások után.x
-
Mint azt megtanultuk, a naplót idő, méret és a fájlok száma alapján manuálisan is ki lehet takarítani. Végezzük el a következő feladatokat a
journalctl
és a megfelelő kapcsolók segítségével:-
Ellenőrizzük, hogy mennyi lemezterületet foglalnak el a naplófájlok:
journalctl --disk-usage
-
Csökkentsük az archivált naplófájlok számára fenntartott hely mennyiségét, és állítsuk be 200MiB-ra:
journalctl --vacuum-size=200M
-
Ellenőrizzük a lemezterületet ismét és magyarázzuk meg a részleteket:
journalctl --disk-usage
Nincs összefüggés, mivel a
--disk-usage
az aktív és az archivált naplófájlok által elfoglalt helyet mutatja, míg a--vacuum-size
csak az archivált fájlokra vonatkozik.
-
Válaszok a gondolkodtató feladatokra
-
Milyen beállításokat kell módosítanunk az
/etc/systemd/journald.conf
állományban, hogy az üzeneteket a/dev/tty5
-be továbbítsuk? Milyen értékeket kell adni a kapcsolóknak?ForwardToConsole=yes TTYPath=/dev/tty5
-
Adjuk meg a megfelelő
journalctl
szűrőt a következők kiírásához:Cél Szűrő + érték Egy adott felhasználóhoz tartozó üzenetek kiíratása
_ID=<user-id>
Egy
debian
nevű host üzeneteinek kiíratása_HOSTNAME=debian
Egy adott csoporthoz tartozó üzenetek kiíratása
_GID=<group-id>
A
root
csoporthoz tartozó üzenetek kiíratása_UID=0
A futtatható elérési útvonal alapján
sudo
üzenetek kiíratása_EXE=/usr/bin/sudo
Based on the command name, print
sudo
messages_COMM=sudo
-
Prioritás szerinti szűrés esetén a megadottnál magasabb prioritású naplók is szerepelnek a listában; például a
journalctl -p err
az error, critical, alert és emergency üzeneteket fogja kiírni. Ajournalctl
azonban csak egy adott tartományt is megjeleníthet. Milyen parancsot kellene használnunk ahhoz, hogy ajournalctl
csak a warning, error és critical prioritási szintekbe tartozó üzeneteket írja ki?journalctl -p warning..crit
-
A prioritási szintek numerikusan is megadhatók. Írjuk át az előző feladatban szereplő parancsot a prioritási szintek numerikus ábrázolásával:
journalctl -p 4..2