Správa protokolových správ pod Systemd pomocou Journalctl [Komplexná príručka]


Systemd je špičkový správca systémov a služieb pre systémy Linux: náhrada init démona určená na spustenie procesov paralelne pri zavádzaní systému. Teraz je podporovaný v mnohých súčasných bežných distribúciách vrátane Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS atď.

Predtým sme vysvetlili príbeh „init“ a „systemd“; kde sme diskutovali o tom, čo sú to dva démoni, prečo bolo potrebné technicky nahradiť „init“ za „systemd“, ako aj o hlavných funkciách systemd.

Jednou z hlavných výhod systemd oproti iným bežným init systémom je podpora centralizovanej správy systému a logovania procesov pomocou žurnálu. V tomto článku sa naučíme, ako spravovať a prezerať správy denníka pod systemd pomocou príkazu journalctl v systéme Linux.

style="color: red;">Dôležité: Skôr než sa v tejto príručke pohnete ďalej, možno sa budete chcieť naučiť spravovať služby a jednotky 'Systemd' pomocou príkazu 'Systemctl' a tiež vytvárať a spúšťať nové servisných jednotiek v systemd pomocou shell skriptov v Linuxe. Ak však súhlasíte so všetkým vyššie uvedeným, pokračujte v čítaní.

Konfigurácia žurnálu na zhromažďovanie protokolových správ pod Systemd

journald je démon, ktorý zhromažďuje a zapisuje záznamy do denníka z celého systému; sú to v podstate zavádzacie správy, správy z jadra a zo syslogu alebo rôznych aplikácií a všetky správy ukladá na centrálne miesto – súbor denníka.

Správanie journald môžete ovládať prostredníctvom jeho predvoleného konfiguračného súboru: /etc/systemd/journald.conf, ktorý sa generuje počas kompilácie. Tento súbor obsahuje voľby, ktorých hodnoty môžete zmeniť tak, aby vyhovovali vašim požiadavkám na miestne prostredie.

Nižšie je ukážka toho, ako súbor vyzerá, zobrazený pomocou príkazu cat.

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

Všimnite si, že rôzne inštalácie balíkov a výpisy z konfigurácie použitia v /usr/lib/systemd/*.conf.d/ a konfigurácie doby spustenia možno nájsť v /run/systemd/journald.conf. d/*.confktorý nemusíte nevyhnutne použiť.

Povoliť ukladanie údajov denníka na disk

Mnohé distribúcie Linuxu vrátane Ubuntu a jeho derivátov, ako je Linux Mint, v predvolenom nastavení neumožňujú trvalé ukladanie zavádzacích správ na disk.

Je možné to povoliť nastavením možnosti „Úložisko “ na „trvalé “, ako je uvedené nižšie. Tým sa vytvorí adresár /var/log/journal a v ňom budú uložené všetky súbory denníka.

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

Ak chcete získať ďalšie nastavenia, nájdite význam všetkých možností, ktoré sa majú konfigurovať, v sekcii “[Journal]” zadaním.

man journald.conf

Nastavenie správneho systémového času pomocou príkazu Timedatectl

Pre spoľahlivú správu protokolov pod systemd pomocou služby journald sa uistite, že nastavenia času vrátane časového pásma sú v systéme správne.

Ak chcete zobraziť aktuálne nastavenia dátumu a času vo vašom systéme, napíšte.

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

Ak chcete nastaviť správne časové pásmo a prípadne systémový čas, použite príkazy nižšie.

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

Zobrazenie správ denníka pomocou príkazu Journalctl

journalctl je pomôcka používaná na zobrazenie obsahu žurnálu systemd (ktorý je zapísaný službou journald).

Ak chcete zobraziť všetky zhromaždené denníky bez akéhokoľvek filtrovania, zadajte.

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

Zobraziť správy denníka založené na topánkach

Pomocou voľby --list-boots môžete zobraziť zoznam čísel zavádzania (vzhľadom na aktuálne spustenie), ich ID a časové pečiatky prvej a poslednej správy zodpovedajúcej zavedeniu.

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 

Ak chcete zobraziť položky žurnálu z aktuálneho zavedenia (číslo 0), použite prepínač -b takto (rovnaký ako vzorový výstup vyššie).

journalctl -b

a na zobrazenie denníka z predchádzajúceho zavedenia použite relatívny ukazovateľ -1 s voľbou -b, ako je uvedené nižšie.

journalctl -b -1

Prípadne použite boot ID takto.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Filtrovanie protokolových správ na základe času

Ak chcete použiť čas vo formáte koordinovaného svetového času (UTC), pridajte možnosti --utc nasledovne.

journalctl --utc

Ak chcete zobraziť všetky záznamy od určitého dátumu a času, napr. 15. júna 2017 o 8:15 zadajte tento príkaz.

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

Zobrazenie posledných správ denníka

Ak chcete zobraziť posledné správy denníka (predvolene 10), použite príznak -n, ako je uvedené nižšie.

journalctl -n
journalctl -n 20 

Zobrazenie správ denníka generovaných jadrom

Ak chcete vidieť iba správy jadra, podobne ako výstup príkazu dmesg, môžete použiť príznak -k.

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

Zobrazenie správ denníka generovaných jednotkami

Ak chcete zobraziť všetky položky denníka pre konkrétnu jednotku, použite prepínač -u nasledovne.

journalctl -u apache2.service

Ak chcete vynulovať až po aktuálne spustenie, zadajte tento príkaz.

journalctl -b -u apache2.service

Ak chcete zobraziť protokoly z predchádzajúceho spustenia, použite toto.

journalctl -b -1 -u apache2.service

Nižšie sú uvedené niektoré ďalšie užitočné príkazy:

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

Zobrazenie správ denníka generovaných procesmi

Ak chcete zobraziť protokoly generované konkrétnym procesom, zadajte jeho PID takto.

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

Zobrazenie správ denníka generovaných ID používateľa alebo skupiny

Ak chcete zobraziť denníky generované konkrétnym používateľom alebo skupinou, zadajte ID používateľa alebo skupiny týmto spôsobom.

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

Prezeranie denníkov generovaných súborom

Ak chcete zobraziť všetky protokoly generované súborom (možno spustiteľným súborom), ako je spustiteľný súbor D-Bus alebo spustiteľný súbor bash, jednoducho napíšte.

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

Zobrazenie správ denníka podľa priority

Výstup môžete filtrovať aj na základe priorít správ alebo rozsahov priorít pomocou príznaku -p. Možné hodnoty sú: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – warning, 5 – notice, 6 – info, 7 – debug):

journalctl -p err

Ak chcete určiť rozsah, použite formát uvedený nižšie (upozornenie).

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

Zobrazenie správ denníka v reálnom čase

Pomocou voľby -f (podobne ako pri funkcii tail -f) môžete prakticky sledovať záznamy počas ich zapisovania.

journalctl -f

Manipulácia s formátovaním zobrazenia denníka

Ak chcete ovládať výstupné formátovanie záznamov denníka, pridajte príznak -o a použite tieto možnosti: cat, export, json, json-pretty, json-sse, short, short-iso, krátke-monotónne, krátke-presné a verbózne (skontrolujte význam možností na manuálovej stránke:

Možnosť cat zobrazuje skutočnú správu každého záznamu v denníku bez akýchkoľvek metadát (časová pečiatka atď.).

journalctl -b -u apache2.service -o cat

Správa žurnálov v systéme

Ak chcete skontrolovať vnútornú konzistenciu súboru denníka, použite možnosť --verify. Ak je všetko v poriadku, výstup by mal indikovať PASS.

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

Odstránenie starých súborov denníka

Môžete tiež zobraziť aktuálne využitie disku všetkými súbormi žurnálu pomocou volieb --disk-usage. Zobrazuje súčet využitia disku všetkých archivovaných a aktívnych žurnálových súborov:

journalctl --disk-usage

Ak chcete odstrániť staré (archivované) súbory denníka, spustite nasledujúce príkazy:

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

Rotujúce súbory denníka

V neposlednom rade môžete pomocou voľby --rotate nariadiť journald rotovať súbory žurnálu. Všimnite si, že táto smernica sa nevráti, kým sa nedokončí operácia rotácie:

sudo journalctl --rotate

Podrobnú príručku používania a možnosti nájdete na manuálovej stránke journalctl nasledovne.

man journalctl

Prečítajte si niekoľko užitočných článkov.

  1. Správa procesu spustenia systému a služieb (SysVinit, Systemd a Upstart)
  2. Petiti – Open Source Log Analysis Tool pre Linux SysAdmins
  3. Ako nastaviť a spravovať rotáciu denníka pomocou Logrotate v systéme Linux
  4. lnav – Sledujte a analyzujte protokoly Apache z terminálu Linux

To je nateraz všetko. Pomocou spätnej väzby nižšie môžete položiť akékoľvek otázky alebo pridať svoje myšlienky na túto tému.

Súvisiace články: