Verwalte Log Messagen ënner Systemd mat Journalctl [Comprehensive Guide]


Systemd ass e modernste System a Servicemanager fir Linux Systemer: en Init Daemon Ersatz geduecht fir Prozesser parallel beim Systemboot ze starten. Et gëtt elo an enger Zuel vun aktuellen Mainstream Verdeelung ënnerstëtzt, dorënner Fedora, Debian, Ubuntu, OpenSuSE, Arch, RHEL, CentOS, etc.

Virdrun hu mir d'Geschicht hannert 'init' an 'systemd' erkläert; wou mir diskutéiert hunn wat déi zwee Daemone sinn, firwat 'init' technesch ersat muss ginn duerch 'systemd' souwéi d'Haaptmerkmale vu systemd.

Ee vun den Haaptvirdeeler vu Systemd iwwer aner gemeinsam Init Systemer ass Ënnerstëtzung fir zentraliséiert Gestioun vu System a Prozesser Logbicher mat engem Journal. An dësem Artikel léiere mir wéi Dir Log Messagen ënner systemd verwalten a kuckt mat journalctl Kommando am Linux.

Wichteg: Ier Dir weider an dësem Guide plënnert, wëllt Dir vläicht léiere wéi Dir nei Service-Eenheeten an Systemd erstellt a leeft mat Shell-Skripten am Linux. Wéi och ëmmer, wann Dir an der Rei sidd mat all uewendriwwer, fuert weider duerch.

Journald konfiguréieren fir Log Messagen ënner Systemd ze sammelen

journald ass en Daemon, deen Journalen aus dem ganze System sammelt a schreift; dëst sinn am Wesentlechen Boot Messagen, Messagen vum Kernel a vu Syslog oder verschiddenen Uwendungen an et späichert all Messagen an enger zentraler Plaz - Journal Datei.

Dir kënnt d'Behuele vu journald iwwer seng Default Konfiguratiounsdatei kontrolléieren: /etc/systemd/journald.conf déi zur Kompiléierungszäit generéiert gëtt. Dëse Fichier enthält Optiounen deenen hir Wäerter Dir änneren kënnt fir Är lokal Ëmfeld Ufuerderunge ze passen.

Drënner ass e Probe vu wéi d'Datei ausgesäit, gekuckt mat dem Cat Kommando.

$ 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

Bedenkt datt verschidde Packagen installéiert a Konfiguratiounsextrakter an /usr/lib/systemd/*.conf.d/ benotzen an d'Zäitkonfiguratioune kënnen an /run/systemd/journald.conf.d/*.conf fonnt ginn, wat Dir vläicht net onbedéngt benotzen.

Eng Zuel vu Linux Verdeelungen inklusiv Ubuntu an hir Derivate wéi Linux Mint aktivéieren net persistent Späichere vu Bootmeldungen op der Disk par défaut.

Et ass méiglech dëst z'aktivéieren andeems Dir d'Optioun \Storage op \persistent setzt wéi hei ënnendrënner. Dëst wäert den/var/log/Journal Verzeechnes erstellen an all Journaldateien ginn ënner deem gespäichert.

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

Fir zousätzlech Astellungen, fannt Dir d'Bedeitung vun all Optiounen, déi solle konfiguréiert sinn an der Rubrik [Journal] andeems Dir tippt.

$ man journald.conf

Fir zouverlässeg Logverwaltung ënner systemd benotzt journald Service, sécherstellen datt d'Zäitastellunge mat abegraff d'Zäitzone am System korrekt sinn.

Fir déi aktuell Datum an Zäit Astellungen op Ärem System ze gesinn, Typ.

$ 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

Fir déi richteg Zäitzone an eventuell Systemzäit ze setzen, benotzt d'Befehle hei ënnen.

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

journalctl ass en Utility dat benotzt gëtt fir den Inhalt vum systemd Journal ze gesinn (wat vum journald Service geschriwwe gëtt).

Fir all gesammelt Logbicher ouni Filter ze weisen, tippt.

$ 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 ([email )
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

Dir kënnt mat der Optioun --list-boots eng Lëscht mat Bootnummeren (relativ zum aktuellen Boot), hir IDen an d'Zäitstempele vun der éischter a leschter Noriicht entspriechend dem Boot weisen.

$ 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 

Fir d'Journal Entréen aus dem aktuellen Boot (Nummer 0) ze gesinn, benotzt den -b Schalter esou (selwecht wéi d'Proufausgang hei uewen).

$ journalctl -b

a fir e Journal aus dem fréiere Boot ze gesinn, benotzt de -1 relative Pointer mat der -b Optioun wéi hei ënnen.

$ journalctl -b -1

Alternativ benotzt d'Boot ID esou.

$ journalctl -b 9fb590b48e1242f58c2579defdbbddc9

Fir Zäit am Coordinated Universal Time (UTC) Format ze benotzen, füügt d'--utc Optiounen wéi follegt derbäi.

$ journalctl --utc

Fir all Entréen zënter engem bestëmmten Datum an Zäit ze gesinn, z.B. 15. Juni 2017 um 8:15 Auer, gitt dëse Kommando.

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

Fir rezent Logmeldungen ze gesinn (10 par défaut), benotzt de -n Fändel wéi hei ënnendrënner.

$ journalctl -n
$ journalctl -n 20 

Fir nëmmen Kernel Messagen ze gesinn, ähnlech wéi den dmesg Kommando Output, kënnt Dir de -k Fändel benotzen.

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

Fir all Journal Entréen fir eng bestëmmten Eenheet ze gesinn, benotzt de -u Schalter wéi follegt.

$ journalctl -u apache2.service

Fir den aktuelle Boot ze null, gitt dëse Kommando.

$ journalctl -b -u apache2.service

Fir Logbicher vum fréiere Boot ze weisen, benotzt dëst.

$ journalctl -b -1 -u apache2.service

Drënner sinn e puer aner nëtzlech Kommandoen:

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

Fir Logbicher ze gesinn generéiert vun engem spezifesche Prozess, spezifizéiert et ass PID esou.

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

Fir Logbicher ze gesinn, déi vun engem spezifesche Benotzer oder Grupp generéiert sinn, spezifizéieren d'Benotzer oder d'Grupp ID esou.

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

Fir all Logbicher ze weisen, déi vun enger Datei generéiert ginn (méiglecherweis en ausführbar), wéi den D-Bus ausféierbaren oder bash ausführbaren, tippt einfach.

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

Dir kënnt och d'Ausgab filteren op Basis vu Messageprioritéiten oder Prioritéitsberäicher mam -p Fändel. Déi méiglech Wäerter sinn: 0 – emerg, 1 – alert, 2 – crit, 3 – err, 4 – warning, 5 – notice, 6 – info, 7 – debug):

$ journalctl -p err

Fir e Beräich ze spezifizéieren, benotzt d'Format hei ënnen (entsteet op d'Warnung).

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

Dir kënnt praktesch Logbicher kucken wéi se mat der -f-Optioun geschriwwe ginn (ähnlech wéi Schwanz -f Funktionalitéit).

$ journalctl -f

Wann Dir d'Ausgabformatéierung vun de Journalenträg kontrolléiere wëllt, füügt de -o Fändel derbäi a benotzt dës Optiounen: cat, export, json, json-pretty, json-sse, short, short-iso, kuerz-monotonesch, kuerz-präzis a verbose (iwwerpréift d'Bedeitung vun den Optiounen op der Man-Säit:

D'Katzeoptioun weist den aktuellen Message vun all Journalentrée ouni Metadaten (Zäitstempel a sou weider).

$ journalctl -b -u apache2.service -o cat

Fir d'Journaldatei fir intern Konsistenz ze kontrolléieren, benotzt d'Optioun --verify. Wann alles gutt ass, soll d'Ausgab e PASS uginn.

$ journalctl --verify

PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/system.journal                               
491f68: Unused data (entry_offset==0)                                                                
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 9866c3d4d.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 5d8945a9e.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 1becab02f.journal
PASS: /run/log/journal/2a5d5f96ef9147c0b35535562b32d0ff/[email 01cfcedff.journal

Dir kënnt och déi aktuell Diskussioun vun all Journaldateien mat den --disk-usage Optiounen weisen. Et weist d'Zomm vun der Diskverbrauch vun all archivéierten an aktive Journaldateien:

$ journalctl --disk-usage

Fir al (archivéiert) Journaldateien ze läschen, lafen d'Befehle hei ënnen:

$ 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

Lescht awer net zulescht, kënnt Dir Journald instruéieren Journaldateien mat der Optioun --rotate ze rotéieren. Notéiert datt dës Direktiv net zréckkënnt bis d'Rotatiounsoperatioun fäerdeg ass:

$ sudo journalctl --rotate

Fir en am-Déift Benotzungsguide an Optiounen, kuckt d'journalctl Man Säit wéi follegt.

$ man journalctl

Kuckt e puer nëtzlech Artikelen.

  1. Gestioun vum System Startup Prozess a Servicer (SysVinit, Systemd an Upstart)
  2. Petiti - En Open Source Log Analyse Tool fir Linux SysAdmins
  3. Wéi konfiguréieren a verwalten Logrotatioun mat Logrotate a Linux
  4. lnav - Apache Logbicher vun engem Linux Terminal kucken an analyséieren

Dat ass et fir elo. Benotzt de Feedback vun ënnen fir Froen ze stellen oder Är Gedanken iwwer dëst Thema ze addéieren.