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.
- Správa procesu spustenia systému a služieb (SysVinit, Systemd a Upstart)
- Petiti – Open Source Log Analysis Tool pre Linux SysAdmins
- Ako nastaviť a spravovať rotáciu denníka pomocou Logrotate v systéme Linux
- 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.