Weboldal keresés

Naplóüzenetek kezelése Systemd alatt a Journalctl segítségével [Átfogó útmutató]


A Systemd egy élvonalbeli rendszer- és szolgáltatásmenedzser Linux rendszerek számára: egy init démon csere, amelynek célja a folyamatok párhuzamos elindítása a rendszerindításkor. Mostanra számos jelenlegi mainstream disztribúció támogatja, beleértve a Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS stb.

Korábban kifejtettük az „init” és a „systemd” történetét; ahol megbeszéltük, hogy mi a két démon, miért kellett technikailag az „init”-et „systemd”-re cserélni, valamint a systemd főbb jellemzőit.

A systemd egyik fő előnye a többi általános init rendszerhez képest, hogy támogatja a rendszer- és folyamatnaplózás központi kezelését napló segítségével. Ebből a cikkből megtudhatja, hogyan kezelheti és tekintheti meg a naplóüzeneteket a systemd alatt a journalctl paranccsal Linux alatt.

Fontos: Mielőtt továbblépne ebben az útmutatóban, érdemes megtanulnia, hogyan kezelheti a "Systemd" szolgáltatásokat és egységeket a "Systemctl" paranccsal, valamint hogyan hozhat létre és futtathat újakat szervizegységek a systemd-ben shell szkriptek használatával Linuxban. Ha azonban a fentiekkel minden rendben van, folytassa az olvasást.

A Journald konfigurálása naplóüzenetek gyűjtéséhez a Systemd alatt

A journald egy démon, amely a teljes rendszer naplóbejegyzéseit gyűjti össze és írja; ezek lényegében rendszerindító üzenetek, üzenetek a kernelből és a syslogból vagy különféle alkalmazásokból, és az összes üzenetet egy központi helyen – naplófájlban – tárolja.

A journald viselkedését az alapértelmezett konfigurációs fájlon keresztül szabályozhatja: /etc/systemd/journald.conf, amely a fordításkor jön létre. Ez a fájl olyan beállításokat tartalmaz, amelyek értékeit a helyi környezeti követelményeknek megfelelően módosíthatja.

Az alábbiakban egy példa látható a fájl kinézetére, a cat paranccsal megtekintve.

cat /etc/systemd/journald.conf 
See journald.conf(5) for details.

[Journal]
#Storage=auto
#Compress=yes
#Seal=yes
#SplitMode=uid
#SyncIntervalSec=5m
#RateLimitInterval=30s
#RateLimitBurst=1000
#SystemMaxUse=
#SystemKeepFree=
#SystemMaxFileSize=
#SystemMaxFiles=100
#RuntimeMaxUse=
#RuntimeKeepFree=
#RuntimeMaxFileSize=
#RuntimeMaxFiles=100
#MaxRetentionSec=
#MaxFileSec=1month
#ForwardToSyslog=yes
#ForwardToKMsg=no
#ForwardToConsole=no
#ForwardToWall=yes
#TTYPath=/dev/console
#MaxLevelStore=debug
#MaxLevelSyslog=debug
#MaxLevelKMsg=notice
#MaxLevelConsole=info
#MaxLevelWall=emerg

Vegye figyelembe, hogy a /usr/lib/systemd/*.conf.d/ különböző csomagtelepítések és konfigurációs kivonatok, valamint a futásidejű konfigurációk a /run/systemd/journald.conf fájlban találhatók. d/*.conf, amelyet nem feltétlenül használ.

A naplóadattárolás engedélyezése a lemezen

Számos Linux disztribúció, köztük az Ubuntu és származékai, például a Linux Mint, alapértelmezés szerint nem teszik lehetővé a rendszerindító üzenetek tartós tárolását a lemezen.

Ezt úgy engedélyezheti, hogy a „Tárolás” lehetőséget „persistent” értékre állítja, az alábbiak szerint. Ezzel létrehozza a /var/log/journal könyvtárat, és az összes naplófájlt ebben tárolja.

sudo vi /etc/systemd/journald.conf 
OR
sudo nano /etc/systemd/journald.conf 
[Journal]
Storage=persistent

További beállításokhoz gépelve keresse meg az összes konfigurálandó beállítás jelentését a „[Journal]” szakaszban.

man journald.conf

A helyes rendszeridő beállítása a Timedatectl paranccsal

A naplózott szolgáltatást használó systemd rendszerben történő megbízható naplókezelés érdekében ellenőrizze, hogy az időbeállítások, beleértve az időzónát is, helyesek-e a rendszeren.

A rendszer aktuális dátum- és időbeállításainak megtekintéséhez írja be.

timedatectl 
OR
timedatectl status

Local time: Thu 2017-06-15 13:29:09 EAT
Universal time: Thu 2017-06-15 10:29:09 UTC
RTC time: Thu 2017-06-15 10:29:09
Time zone: Africa/Kampala (EAT, +0300)
Network time on: yes
NTP synchronized: yes
 RTC in local TZ: no

A megfelelő időzóna és esetleg rendszeridő beállításához használja az alábbi parancsokat.

sudo timedatectl set-timezone  Africa/Kampala
sudo timedatectl set-time “13:50:00”

Naplóüzenetek megtekintése a Journalctl paranccsal

A journalctl egy segédprogram, amellyel megtekintheti a systemd napló tartalmát (amelyet a naplózott szolgáltatás ír).

Az összes összegyűjtött napló megjelenítéséhez szűrés nélkül írja be a következőt:

journalctl
-- Logs begin at Wed 2017-06-14 21:56:43 EAT, end at Thu 2017-06-15 12:28:19 EAT
Jun 14 21:56:43 tecmint systemd-journald[336]: Runtime journal (/run/log/journal
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuset
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpu
Jun 14 21:56:43 tecmint kernel: Initializing cgroup subsys cpuacct
Jun 14 21:56:43 tecmint kernel: Linux version 4.4.0-21-generic (buildd@lgw01-21)
Jun 14 21:56:43 tecmint kernel: Command line: BOOT_IMAGE=/boot/vmlinuz-4.4.0-21-
Jun 14 21:56:43 tecmint kernel: KERNEL supported cpus:
Jun 14 21:56:43 tecmint kernel:   Intel GenuineIntel
Jun 14 21:56:43 tecmint kernel:   AMD AuthenticAMD
Jun 14 21:56:43 tecmint kernel:   Centaur CentaurHauls
Jun 14 21:56:43 tecmint kernel: x86/fpu: xstate_offset[2]:  576, xstate_sizes[2]
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x01: 'x87 flo
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x02: 'SSE reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Supporting XSAVE feature 0x04: 'AVX reg
Jun 14 21:56:43 tecmint kernel: x86/fpu: Enabled xstate features 0x7, context si
Jun 14 21:56:43 tecmint kernel: x86/fpu: Using 'eager' FPU context switches.
Jun 14 21:56:43 tecmint kernel: e820: BIOS-provided physical RAM map:
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000000000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000090000-0x00000000000
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000000100000-0x000000001ff
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020000000-0x00000000201
Jun 14 21:56:43 tecmint kernel: BIOS-e820: [mem 0x0000000020200000-0x00000000400

Naplóüzenetek megtekintése a rendszerindítás alapján

A --list-boots kapcsolóval megjelenítheti a rendszerindítási számok listáját (az aktuális rendszerindításhoz viszonyítva), azok azonosítóit, valamint a rendszerindításhoz tartozó első és utolsó üzenet időbélyegét.

journalctl --list-boots

-1 9fb590b48e1242f58c2579defdbbddc9 Thu 2017-06-15 16:43:36 EAT—Thu 2017-06-15 1
 0 464ae35c6e264a4ca087949936be434a Thu 2017-06-15 16:47:36 EAT—Thu 2017-06-15 1 

A naplóbejegyzések megtekintéséhez az aktuális rendszerindításból (szám: 0), használja a -b kapcsolót így (ugyanúgy, mint a fenti mintakimenet).

journalctl -b

és az előző rendszerindításból származó napló megtekintéséhez használja a -1 relatív mutatót a -b opcióval az alábbiak szerint.

journalctl -b -1

Alternatív megoldásként használja a rendszerindító azonosítót így.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Naplóüzenetek szűrése idő alapján

Ha az időt koordinált világidő (UTC) formátumban szeretné használni, adja hozzá az --utc paramétereket az alábbiak szerint.

journalctl --utc

Ha látni szeretné az összes bejegyzést egy adott dátum és időpont óta, pl. 2017. június 15-én 8:15-kor írja be ezt a parancsot.

journalctl --since "2017-06-15 08:15:00"
journalctl --since today
journalctl --since yesterday

Legutóbbi naplóüzenetek megtekintése

A legutóbbi naplóüzenetek (alapértelmezés szerint 10) megtekintéséhez használja a -n jelzőt az alábbiak szerint.

journalctl -n
journalctl -n 20 

Kernel által generált naplóüzenetek megtekintése

Ha csak a kernel üzeneteit szeretné látni, hasonlóan a dmesg parancs kimenetéhez, használja a -k jelzőt.

journalctl -k 
journalctl -k -b 
journalctl -k -b 9fb590b48e1242f58c2579defdbbddc9

Egységek által generált naplóüzenetek megtekintése

Egy adott egység összes naplóbejegyzésének megtekintéséhez használja a -u kapcsolót az alábbiak szerint.

journalctl -u apache2.service

Az aktuális rendszerindítás nullázásához írja be ezt a parancsot.

journalctl -b -u apache2.service

Az előző rendszerindítás naplóinak megjelenítéséhez használja ezt.

journalctl -b -1 -u apache2.service

Íme néhány további hasznos parancs:

journalctl -u apache2.service  
journalctl -u apache2.service --since today
journalctl -u apache2.service -u nagios.service --since yesterday

A folyamatok által generált naplóüzenetek megtekintése

Egy adott folyamat által generált naplók megtekintéséhez adja meg a PID-t így.

journalctl _PID=19487
journalctl _PID=19487 --since today
journalctl _PID=19487 --since yesterday

Felhasználói vagy csoportazonosító által generált naplóüzenetek megtekintése

Egy adott felhasználó vagy csoport által generált naplók megtekintéséhez adja meg a felhasználó vagy csoport azonosítóját, így.

journalctl _UID=1000
journalctl _UID=1000 --since today
journalctl _UID=1000 -b -1 --since today

Fájl által generált naplók megtekintése

Egy fájl (esetleg egy végrehajtható fájl) által generált összes napló megjelenítéséhez, például a D-Bus vagy a bash futtatható fájlok, egyszerűen írja be.

journalctl /usr/bin/dbus-daemon
journalctl /usr/bin/bash

Naplóüzenetek megtekintése prioritás szerint

A kimenetet üzenetprioritások vagy prioritási tartományok alapján is szűrheti a -p jelző használatával. A lehetséges értékek: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – Figyelmeztetés, 5 – Figyelmeztetés, 6 – Info, 7 – Debug):

journalctl -p err

Tartomány megadásához használja az alábbi formátumot (figyelmeztetés).

journalctl -p 1..4
OR
journalctl -p emerg..warning

Tekintse meg a naplóüzeneteket valós időben

Gyakorlatilag megtekintheti a naplók írását a -f opcióval (hasonlóan a tail -f funkcióhoz).

journalctl -f

Napló megjelenítési formázás kezelése

Ha szabályozni szeretné a naplóbejegyzések kimeneti formázását, adja hozzá a -o jelzőt, és használja a következő beállításokat: cat, export, json, json-pretty, json-sse, short, short-iso, rövid-monoton, röviden pontos és bőbeszédű (ellenőrizd a lehetőségek jelentését a man oldalon:

A cat opció megjeleníti az egyes naplóbejegyzések tényleges üzenetét metaadatok (időbélyeg és így tovább) nélkül.

journalctl -b -u apache2.service -o cat

Naplók kezelése rendszeren

A naplófájl belső konzisztenciájának ellenőrzéséhez használja a --verify opciót. Ha minden rendben van, a kimenetnek PASS-t kell jeleznie.

journalctl --verify

PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal                               
491f68: Unused data (entry_offset==0)                                                                
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000003184-000551f9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000001fc8-000551f5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000d4f-000551f1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system@816533ecd00843c4a877a0a962e124f2-0000000000000001-000551f01cfcedff.journal

Régi naplófájlok törlése

Az összes naplófájl aktuális lemezhasználatát is megjelenítheti a --disk-usage opciókkal. Megmutatja az összes archivált és aktív naplófájl lemezhasználatának összegét:

journalctl --disk-usage

A régi (archivált) naplófájlok törléséhez futtassa az alábbi parancsokat:

sudo journalctl --vacuum-size=50M  #delete files until the disk space they use falls below the specified size
sudo journalctl --vacuum-time=1years	#delete files so that all journal files contain no data older than the specified timespan
sudo journalctl --vacuum-files=4     #delete files so that no more than the specified number of separate journal files remain in storage location

Naplófájlok forgatása

Végül, de nem utolsósorban, a --rotate kapcsolóval utasíthatja a naplót a naplófájlok elforgatására. Vegye figyelembe, hogy ez az utasítás nem tér vissza addig, amíg az elforgatási művelet be nem fejeződik:

sudo journalctl --rotate

A részletes használati útmutatóért és a lehetőségekért tekintse meg a Journalctl kézikönyvoldalát az alábbiak szerint.

man journalctl

Nézzen meg néhány hasznos cikket.

  1. Rendszerindítási folyamatok és szolgáltatások kezelése (SysVinit, Systemd és Upstart)
  2. Petiti – Nyílt forráskódú naplóelemző eszköz Linux SysAdmins számára
  3. A naplóforgatás beállítása és kezelése a Logrotate használatával Linux alatt
  4. lnav – Az Apache naplók megtekintése és elemzése Linux terminálról

Egyelőre ennyi. Használja az alábbi visszajelzéseket, ha kérdéseket szeretne feltenni vagy gondolatait feltenni a témával kapcsolatban.