Upravljajte porukama dnevnika pod Systemd koristeći Journalctl [Sveobuhvatni vodič]


Systemd je vrhunski sistem i upravitelj usluga za Linux sisteme: init daemon zamjena namijenjena za pokretanje procesa paralelno pri pokretanju sistema. Sada je podržan u brojnim trenutnim mainstream distribucijama uključujući Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, itd.

Ranije smo objasnili priču iza 'init' i 'systemd'; gdje smo razgovarali o tome koja su dva demona, zašto je 'init' tehnički trebalo zamijeniti sa 'systemd', kao i glavne karakteristike systemd-a.

Jedna od glavnih prednosti systemd-a u odnosu na druge uobičajene init sisteme je podrška za centralizovano upravljanje sistemom i evidentiranjem procesa pomoću dnevnika. U ovom članku ćemo naučiti kako upravljati i pregledavati poruke dnevnika pod systemd pomoću naredbe journalctl u Linuxu.

Važno: Prije nego što krenete dalje u ovom vodiču, možda ćete htjeti naučiti kako upravljati 'Systemd' uslugama i jedinicama koristeći naredbu 'Systemctl', kao i kreirati i pokrenuti nove servisne jedinice u systemd koristeći shell skripte u Linuxu. Međutim, ako ste u redu sa svim gore navedenim, nastavite čitati.

Konfiguriranje dnevnika za prikupljanje poruka dnevnika pod Systemd

journald je demon koji prikuplja i upisuje unose u dnevnik iz cijelog sistema; to su u suštini poruke o pokretanju sistema, poruke iz kernela i iz syslog-a ili raznih aplikacija i pohranjuje sve poruke na centralnu lokaciju – datoteku dnevnika.

Možete kontrolirati ponašanje journald preko njegove zadane konfiguracijske datoteke: /etc/systemd/journald.conf koja se generiše u vrijeme kompajliranja. Ova datoteka sadrži opcije čije vrijednosti možete promijeniti kako bi odgovarale zahtjevima vašeg lokalnog okruženja.

Ispod je primjer kako datoteka izgleda, gledano pomoću naredbe 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

Imajte na umu da se različiti paketi instaliraju i koriste konfiguracijski ekstrakti u /usr/lib/systemd/*.conf.d/ i konfiguracije vremena izvršavanja mogu se naći u /run/systemd/journald.conf. d/*.conf koji ne morate nužno koristiti.

Omogućite pohranu podataka dnevnika na disku

Brojne distribucije Linuxa, uključujući Ubuntu i njegove derivate poput Linux Minta, prema zadanim postavkama ne omogućavaju trajno pohranjivanje poruka o pokretanju na disku.

Ovo je moguće omogućiti postavljanjem opcije “Skladište” na “persistent” kao što je prikazano ispod. Ovo će kreirati /var/log/journal direktorij i sve datoteke dnevnika će biti pohranjene u njemu.

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

Za dodatna podešavanja, pronađite značenje svih opcija koje bi trebalo da budu konfigurisane u odeljku “[Journal]” tako što ćete ukucati.

man journald.conf

Postavljanje tačnog sistemskog vremena pomoću naredbe Timedatectl

Za pouzdano upravljanje dnevnikom pod systemd koristeći journald uslugu, uvjerite se da su postavke vremena uključujući vremensku zonu ispravne na sistemu.

Da biste vidjeli trenutne postavke datuma i vremena na vašem sistemu, otkucajte.

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

Da biste postavili ispravnu vremensku zonu i eventualno sistemsko vrijeme, koristite naredbe ispod.

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

Pregled poruka dnevnika pomoću naredbe Journalctl

journalctl je uslužni program koji se koristi za pregled sadržaja systemd dnevnika (koji piše journald servis).

Da biste prikazali sve prikupljene zapise bez ikakvog filtriranja, otkucajte.

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

Pregledajte poruke dnevnika na osnovu pokretanja

Možete prikazati listu brojeva pokretanja (u odnosu na trenutno pokretanje), njihovih ID-ova i vremenske oznake prve i posljednje poruke koje odgovaraju pokretanju pomoću opcije --list-boots.

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 

Za pregled unosa dnevnika iz trenutnog pokretanja (broj 0), koristite prekidač -b na ovaj način (isto kao i primjer izlaza iznad).

journalctl -b

i da vidite dnevnik iz prethodnog pokretanja, koristite -1 relativni pokazivač sa -b opcijom kao ispod.

journalctl -b -1

Alternativno, koristite ID pokretanja na ovaj način.

journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Filtriranje poruka dnevnika na osnovu vremena

Za korištenje vremena u formatu koordiniranog univerzalnog vremena (UTC), dodajte opcije --utc kako slijedi.

journalctl --utc

Da biste vidjeli sve unose od određenog datuma i vremena, npr. 15. juna 2017. u 8:15 upišite ovu naredbu.

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

Pregled nedavnih poruka dnevnika

Za pregled nedavnih poruka dnevnika (10 po defaultu), koristite oznaku -n kao što je prikazano ispod.

journalctl -n
journalctl -n 20 

Pregled poruka dnevnika generiranih od strane kernela

Da vidite samo poruke kernela, slično kao izlaz komande dmesg, možete koristiti oznaku -k.

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

Pregled poruka dnevnika generiranih od strane jedinica

Da biste mogli vidjeti sve unose u dnevnik za određenu jedinicu, koristite prekidač -u na sljedeći način.

journalctl -u apache2.service

Da biste se spustili na nulu na trenutno pokretanje, unesite ovu naredbu.

journalctl -b -u apache2.service

Za prikaz zapisnika iz prethodnog pokretanja, koristite ovo.

journalctl -b -1 -u apache2.service

Ispod su neke druge korisne komande:

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

Pregled poruka dnevnika generiranih od strane procesa

Za pregled zapisnika generiranih od strane određenog procesa, navedite njegov PID ovako.

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

Pregled poruka dnevnika generiranih od strane ID-a korisnika ili grupe

Za pregled zapisnika koje je generirao određeni korisnik ili grupa, navedite ID korisnika ili grupe na ovaj način.

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

Pregledanje dnevnika koje generiše datoteka

Da biste prikazali sve zapise koje generiše datoteka (možda izvršna), kao što je izvršna datoteka D-Bus ili bash izvršna, jednostavno ukucajte.

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

Pregled poruka dnevnika po prioritetu

Također možete filtrirati izlaz na osnovu prioriteta poruka ili raspona prioriteta pomoću oznake -p. Moguće vrijednosti su: 0 – pojavljivanje, 1 – upozorenje, 2 – kritična, 3 – greška, 4 – upozorenje, 5 – obavijest, 6 – info, 7 – otklanjanje grešaka):

journalctl -p err

Da biste odredili raspon, koristite format ispod (pojavite se do upozorenja).

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

Pregledajte poruke dnevnika u realnom vremenu

Praktično možete gledati zapise dok se pišu pomoću opcije -f (slično funkciji tail -f).

journalctl -f

Rukovanje formatiranjem prikaza dnevnika

Ako želite kontrolirati formatiranje izlaza unosa dnevnika, dodajte oznaku -o i koristite ove opcije: cat, export, json, json-pretty, json-sse, short, short-iso, kratko monotono, kratko precizno i opširno (provjerite značenje opcija na man stranici:

Opcija cat prikazuje stvarnu poruku svakog unosa u dnevnik bez ikakvih metapodataka (vremenska oznaka i tako dalje).

journalctl -b -u apache2.service -o cat

Upravljanje časopisima na sistemu

Da provjerite internu konzistentnost datoteke dnevnika, koristite opciju --verify. Ako je sve u redu, izlaz bi trebao pokazati 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

Brisanje starih datoteka dnevnika

Također možete prikazati trenutnu upotrebu diska svih datoteka dnevnika sa opcijama --disk-usage. Prikazuje zbroj upotrebe diska svih arhiviranih i aktivnih datoteka dnevnika:

journalctl --disk-usage

Da izbrišete stare (arhivirane) datoteke dnevnika, pokrenite naredbe ispod:

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

Rotiranje datoteka dnevnika

Posljednje, ali ne i najmanje važno, možete uputiti journald da rotira datoteke dnevnika pomoću opcije --rotate. Imajte na umu da se ova direktiva ne vraća dok se operacija rotacije ne završi:

sudo journalctl --rotate

Za detaljan vodič za upotrebu i opcije, pogledajte man stranicu journalctl kako slijedi.

man journalctl

Pogledajte neke korisne članke.

  1. Upravljanje procesom pokretanja sistema i uslugama (SysVinit, Systemd i Upstart)
  2. Petiti – alat za analizu dnevnika otvorenog koda za Linux SysAdmins
  3. Kako postaviti i upravljati rotacijom dnevnika koristeći Logrotate u Linuxu
  4. lnav – Gledajte i analizirajte Apache zapise sa Linux terminala

To je to za sada. Iskoristite povratne informacije ispod da postavite bilo kakva pitanja ili date svoje mišljenje o ovoj temi.